Files
hisi_SS524V100_SDK/mpp/sample/sdi_cut/anjian_send_io.c
T

161 lines
3.4 KiB
C
Executable File

#include <linux/input.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdint.h>
#include <pthread.h>
#include "keyboard.h"
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <arpa/inet.h>
#include <netdb.h>
#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(&param);
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;
}
}
}
}