X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Femu.c;h=5adcc5d4a6ef5f859a24982f96792b7f5faa6d6f;hp=38fea460a56c68a312a48e812b0266d743d60edb;hb=88d814e3677c8b71a62382bf839f452960472cac;hpb=d5a3e1bccc54036e8b659f22dc704fa257f5734d diff --git a/loader/emu.c b/loader/emu.c index 38fea46..5adcc5d 100644 --- a/loader/emu.c +++ b/loader/emu.c @@ -1059,20 +1059,6 @@ void emu_init(void *map_bottom) sigaction(SIGSEGV, &segv_action, NULL); } -long emu_read_gpiodev(void *buf, int count) -{ - if (count <= 0) { - err("gpiodev read %d?\n", count); - return -EINVAL; - } - if (count > 4) - count = 4; - - mmsp2.btn_state = host_read_btns(); - memcpy(buf, &mmsp2.btn_state, count); - return count; -} - static long emu_mmap_dev(unsigned int length, int prot, int flags, unsigned int offset) { u8 *umem, *umem_end; @@ -1273,6 +1259,56 @@ fail: return -EINVAL; } +long emu_do_read(int fd, void *buf, int count) +{ + static const char wm97xx_p[] = + "5507 0 -831476 0 -4218 16450692 65536"; // from 4.0 fw + int ret, pressed = 0, x, y; + struct { + u16 pressure, x, y; + } wm97xx; + + if (count < 0) { + err("read(%d, %d)\n", fd, count); + return -EINVAL; + } + + switch (fd) { + case FAKEDEV_GPIO: + mmsp2.btn_state = host_read_btns(); + + if (count > 4) + count = 4; + memcpy(buf, &mmsp2.btn_state, count); + break; + case FAKEDEV_WM97XX: + ret = host_read_ts(&pressed, &x, &y); + if (ret == 0 && pressed) { + wm97xx.pressure = 1; + wm97xx.x = x * 3750 / 1024 + 200; + wm97xx.y = 3750 - y * 3750 / 1024 + 200; + } + else { + wm97xx.pressure = 0; + wm97xx.x = wm97xx.y = 200; + } + + if (count > sizeof(wm97xx)) + count = sizeof(wm97xx); + memcpy(buf, &wm97xx, count); + break; + case FAKEDEV_WM97XX_P: + if (count < sizeof(wm97xx_p)) + err("incomplete pointercal read\n"); + strncpy(buf, wm97xx_p, count); + break; + default: + err("read(%d, %d)\n", fd, count); + return -EINVAL; + } + return count; +} + struct dev_fd_t emu_interesting_fds[] = { [IFD_SOUND] = { "/dev/dsp", -1, emu_sound_open }, { NULL, 0, NULL },