Files

168 lines
4.2 KiB
C

#include <linux/input.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdint.h>
#include <pthread.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>
int switch_video;
//unsigned char key_value;
char buf_kill_rtsp[1024];
char buf[1024];
int *switch_uart(void) {
char buf1[128];
int fd;
sprintf(buf1, "/video_mode");
fd = shm_open(buf1, 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 *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;
}
void rtsp_play(int switch_index, int kill_port, int start_por){
printf("+++++++++++++++++++++++++%d time out\n" ,switch_index);
sprintf(buf_kill_rtsp,"./kill_rtsp.sh %d",kill_port);
system(buf_kill_rtsp);
printf("%s \n",buf_kill_rtsp);
sprintf(buf,"./start_rtsp.sh %d",start_por);
system(buf);
printf("%s \n",buf);
}
void handle_buffer1(int *switch_mode, int buffer_val1){
if(buffer_val1>0){
if(switch_mode[2]==0x55){
rtsp_play(1,4,buffer_val1*6-5);
}
if(switch_mode[3]==0x55){
rtsp_play(2,5,buffer_val1*6-4);
}
}}
void handle_buffer2(int *switch_mode, int buffer_val2,int buffer_val3,int buffer_val4){
if(buffer_val2==0x01){
if(buffer_val3>0){
if(switch_mode[4]==0x55){
rtsp_play(1,6,buffer_val3*6-3);
}
}
if(buffer_val4>0){
if(switch_mode[5]==0x55){
rtsp_play(2,7,buffer_val4*6-2);
}
}
}else if(buffer_val2==0x10){
if(buffer_val3>0){
if(switch_mode[4]==0x55){
rtsp_play(3,8,buffer_val3*6-1);
}
}
if(buffer_val4>0){
if(switch_mode[5]==0x55){
rtsp_play(4,9,buffer_val4*6);
}
}
}
}
int main(int argc, char **argv)
{
int *switch_mode;
int *buffer;
int buffer_pre[5];
switch_mode = switch_memory_open();
buffer = switch_uart();
buffer_pre[1] = buffer[1];
buffer_pre[2] = buffer[2];
buffer_pre[3] = buffer[3];
buffer_pre[4] = buffer[4];
//handle_buffer1(switch_mode, buffer[1]);
//handle_buffer2(switch_mode,buffer[2],buffer[3],buffer[4]);
#if 1
while(1)
{
if(switch_mode[2]==0x55||switch_mode[3]==0x55||switch_mode[4]==0x55||switch_mode[5]==0x55){
handle_buffer1(switch_mode, buffer[1]);
printf("handle_buffer1 \n");
handle_buffer2(switch_mode,buffer[2],buffer[3],buffer[4]);
}
if((buffer[1] != buffer_pre[1] )&&buffer[1]>0){
// printf("buffer[1]%x %x",buffer_pre[1],buffer[1]);
rtsp_play(2,4,buffer[1]*6-5);
rtsp_play(3,5,buffer[1]*6-4);
buffer_pre[1] = buffer[1];
}
if((buffer[2] != buffer_pre[2] )&&buffer[3]>0 &&buffer[4]>0){
// 处理buffer[2][3][4]
if(buffer[2]==0x01){
rtsp_play(4,10,buffer[3]*6-3);
rtsp_play(5,11,buffer[4]*6-2);
}else if(buffer[2]==0x10){
rtsp_play(4,10,buffer[3]*6-1);
rtsp_play(5,11,buffer[4]*6);
}
buffer_pre[2] = buffer[2];
}
if((buffer[3] != buffer_pre[3] )&&buffer[3]>0){
if(buffer[2]==0x01){
rtsp_play(4,10,buffer[3]*6-3);
}else if(buffer[2]==0x10){
rtsp_play(4,10,buffer[3]*6-1);
}
buffer_pre[3] = buffer[3];
}if((buffer[4] != buffer_pre[4] )&&buffer[4]>0){
if(buffer[2]==0x01){
rtsp_play(5,11,buffer[4]*6-2);
}else if(buffer[2]==0x10){
rtsp_play(5,11,buffer[4]*6);
}
buffer_pre[4] = buffer[4];
}
usleep(8000000);
}
#endif
}