#include #include #include #include #include #include "keyboard.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "confile.h" #include "Util.h" #define KEY_EVENT_DEV0_NAME "/dev/input/event0" //#define KEY_EVENT_DEV0_NAME "/dev/input/event1" #define DEFAULT_MD_LEN 4096 int switch_video; unsigned char key_value; int count=0; int osd_on=0; int *switch_memory_open(void) { char buf[128]; int fd; sprintf(buf, "/video_switch"); fd = shm_open(buf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if(fd < 0) { perror("shm_open"); exit(1); } if (ftruncate(fd, 4096) == -1) { perror("ftruncate"); exit(1); } int *retval = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); return retval; } int get_parameter(struct decoce_param *pparam) { if(confile_init()) { printf("config file(decoder.cfg) parse filed!\n"); return -1; } pparam->sdi_switch = get_conf_int("sdi_switch", 0); pparam->osd_on = get_conf_int("osd_on", 0); printf("sdi %d osd %d ",pparam->sdi_switch,pparam->osd_on); return 0; } int main(int argc, char **argv) { int key_fd = 0; struct input_event key_event = {0}; int ret; int port; int *switch_mode; struct decoce_param param; switch_video = atoi(argv[1]); int flag_down=0; int count_down=0; key_fd = open(KEY_EVENT_DEV0_NAME, O_RDONLY); if(key_fd <= 0) { printf("---open /dev/input/event0 device error!---\n"); return ret; } switch_mode = switch_memory_open(); get_parameter(¶m); switch_mode[0] = param.sdi_switch; count = param.sdi_switch; switch_mode[1] = param.osd_on; osd_on = param.osd_on; //printf("---count ----%d \n",count); while(1) { count=switch_mode[0]; ret = read(key_fd, &key_event, sizeof(key_event)); if(ret) { // printf("key_event.type %d EV_KEY %d \n",key_event.type,EV_KEY); // printf("key_event.value %d key_event.code %d count_down %d\n",key_event.value, key_event.code,count_down); if(key_event.type == EV_KEY && key_event.value == 1 ) { flag_down=1; count_down=1; }else if(key_event.type == EV_KEY && key_event.value == 2){ count_down++; }else if(key_event.type == EV_KEY && key_event.value == 0){ if(flag_down == 1){ //短按 if((key_event.code == 0x68) && (count_down < 25)) { if(count==5||count==6){ key_value = 0x01; count++; if(count == (switch_video+1)){ count=5; } printf("count1 ----%d \n",count); //set_conf_int("sdi_switch",count); //save_confile("/root/decode.cfg"); switch_mode[0] = count; } //printf("count ----%d \n",count); } if((count_down > 50) && (key_event.code == 0x68)){ printf("long\n"); osd_on ^= 0x01; switch_mode[1] = osd_on; //set_conf_int("osd_on",osd_on); //save_confile("/root/decode.cfg"); } } flag_down =0; count_down =0; } } } }