int input_interface(t_interface *in, char *dst) { static char buf[4096] = {0}; static int index = 0; int key; key = wgetch(WIN(w_root)); if ( ' ' <= key && key <= '~' && index < 4096) return (key_insert(buf, key, &index, in)); else if ((key == 263 || key == 127) && index > 0) return (key_delete(buf, &index, in)); else if (key == '\n' && index > 0) return (key_send(buf, dst, &index, in)); else if (key == KEY_LEFT) { memcpy(dst, "/window left\0", 13); return (1); } else if (key == KEY_RIGHT) { memcpy(dst, "/window right\0", 14); return (1); } return (0); }
void keys() { char oldkey, newkey; int stat = 0; __u16 keycode; sem_t * sem_id; int ret = 0; struct timeval oldtv, newtv; struct timezone tz; int temp; sem_id = sem_open(UX400_SEM_CPLD, O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, 1); if(sem_id == SEM_FAILED) { perror("UX400 KEY sem_open"); exit(1); } fancontrol(0x33); gettimeofday(&oldtv, &tz); for(;;){ if(sem_wait(sem_id) < 0) { perror("UX400 KEY sem_wait"); exit(1); } ret = powerkey(); if(sem_post(sem_id) < 0) { perror("UX400 KEY sem_post"); } if( ret == 1){ key_send(KEY_POWER, 1 ); usleep(50000); key_send(KEY_POWER, 0 ); sleep(1); key_send(KEY_POWER, 1 ); usleep(50000); key_send(KEY_POWER, 0 ); sleep(1); key_send(KEY_POWER, 1 ); usleep(50000); key_send(KEY_POWER, 0 ); } if(sem_wait(sem_id) < 0) { perror("UX400 KEY sem_wait"); exit(1); } newkey = keyscan(); if(sem_post(sem_id) < 0) { perror("UX400 KEY sem_post"); } // if(newkey != 0x1F) printf("key read: 0x%x\n", newkey); gettimeofday(&newtv, &tz); // printf("sec: %d, usec: %d\n", newtv.tv_sec, newtv.tv_usec); if((oldkey == newkey)&&(newkey != 0x1F)){ if(newtv.tv_sec == oldtv.tv_sec){ temp = newtv.tv_usec - oldtv.tv_sec; }else{ temp = newtv.tv_usec + 1000000 - oldtv.tv_sec; } oldtv = newtv; // printf("temp = %d\n", temp); if( temp < KEY_INTERVAL) continue; } oldtv = newtv; oldkey = newkey; switch(newkey){ case 0x1F: case 0x00: break; case VEEX_KEY_BACKLIGHT: key_send(KEY_F5, 1 ); usleep(50000); key_send(KEY_F5, 0 ); break; case VEEX_KEY_SUMARY: // printf("SUMARY!\n"); key_send(KEY_F6, 1 ); usleep(50000); key_send(KEY_F6, 0 ); break; case VEEX_KEY_HELP: key_send(KEY_F3, 1 ); usleep(50000); key_send(KEY_F3, 0 ); break; case VEEX_KEY_FILE: key_send(KEY_F1, 1 ); usleep(50000); key_send(KEY_F1, 0 ); break; case VEEX_KEY_HISTORY: key_send(KEY_F4, 1 ); usleep(50000); key_send(KEY_F4, 0 ); break; default: break; } usleep(50000); } }
void keys() { char temp; int stat = 0; __u16 keycode; sem_t * sem_id; fancontrol(0x33); sem_id = sem_open(UX400_SEM_CPLD, O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, 1); if(sem_id == SEM_FAILED) { perror("UX400 KEY sem_open"); exit(1); } system("/usr/bin/ux400-vga"); for(;;){ if(sem_wait(sem_id) < 0) { perror("UX400 KEY sem_wait"); exit(1); } if(powerkey() == 1){ key_send(KEY_POWER, 1 ); key_send(KEY_POWER, 0 ); key_send(KEY_POWER, 1 ); key_send(KEY_POWER, 0 ); } temp = keyscan(); if(sem_post(sem_id) < 0) { perror("UX400 KEY sem_post"); } switch(temp){ case 0x1F: case 0x00: if(stat == 1){ key_send(keycode, 0); } stat = 0; break; case VEEX_KEY_BACKLIGHT: if(stat != 1) key_send(KEY_F5, 1); stat = 1; keycode = KEY_F5; break; case VEEX_KEY_SUMARY: if(stat != 1) key_send(KEY_F6, 1 ); stat = 1; keycode = KEY_F6; break; case VEEX_KEY_HELP: if(stat != 1) key_send(KEY_F3, 1); stat = 1; keycode = KEY_F3; break; case VEEX_KEY_FILE: if(stat != 1) key_send(KEY_F1, 1); stat = 1; keycode = KEY_F1; break; case VEEX_KEY_HISTORY: if(stat != 1) key_send(KEY_F4, 1); stat = 1; keycode = KEY_F4; break; default: if(stat == 1){ key_send(keycode, 0); } stat = 0; break; } usleep(100000); } }