📄 alert_main.cpp~
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <fcntl.h>#include <ftw.h>#include <unistd.h>#include <ctype.h>#include <time.h>#include <getopt.h>#include <pthread.h>#include <wait.h>#include <errno.h>#include <signal.h>#include <termios.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/ttydefaults.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <FL/x.H>#include <FL/fl_draw.H>#include <FL/filename.H>#include <FL/Fl_Pixmap.H>#include <Flek/Fl_Toggle_Tree.H>#include "var.h"#include "mesg.h"#include "show_free.h"#include "wordlist.h"#include "alert_gui.h"#include "alert_core.h"#include "MessageBox.h"#include "iconbrowser.h"#include "main_tree.h"#include "record_tree.h"#include "wire_device_tree.h"#include "wireless_device_tree.h"#include "remote_device_tree.h"#include "Hw_Kb_Core.h"#include "NCWnd_Detail.h"#include "Call_Hw_Input.h"#include "Secret_Input.h"#include "Call_Kb_Input.h"#include "pic/icon_blue.xpm"#include "pic/icon_red.xpm"#include "pic/icon_yellow.xpm"#include "pic/wire.xpm"#include "pic/wireless.xpm"#include "pic/remote.xpm"#include "pic/id.xpm"#include "pic/tishi.xpm"#include "pic/yiwen.xpm"#include "pic/password.xpm"#include "pic/record.xpm"#include "pic/setup.xpm"#include "pic/delay_setup.xpm"#include "pic/new_device.xpm"#include "pic/Delete.xpm"#include "pic/modify.xpm"#include "pic/communication.xpm"/*#include "pic/Send.xpm"#include "pic/Inbox.xpm"#include "pic/Outbox.xpm"*/#ifdef X86 #include "/work/Xapplication/myprog/Headers/showcard.h"#else #include "/work/Xapplication/myprog/Headers/showcard.h"#endifAtom alert_run_atom;extern FL_EXPORT Display *fl_display;Fl_Window *main_window;Fl_Window *setup_window;Fl_Window *record_window;Fl_Window *device_window;Fl_Window *password_setup_window;Fl_Window *local_setup_window;Fl_Window *auto_dial_setup_window;Fl_Window *inform_center_setup_window;Fl_Window *delay_setup_window;Fl_Window *auth_window;Fl_Window *comm_window;Fl_Window *alert_window;Fl_Window *dialog_window;Fl_Window *ask_save_file_window;Fl_Window *register_window;Fl_Window *register_result_window;Fl_Window *AddAnswerWnd_window;Fl_Window *message_form_window;Fl_Toggle_Tree *main_tree;Fl_Toggle_Tree *record_tree;Fl_Toggle_Tree *wire_device_tree;Fl_Toggle_Tree *wireless_device_tree;Fl_Pixmap * Red_Light;Fl_Pixmap * Yellow_Light;Fl_Pixmap * Blue_Light;Fl_Pixmap * wire_setup;Fl_Pixmap * wireless_setup;Fl_Pixmap * remote_setup;Fl_Pixmap * id_setup;Fl_Pixmap *inform_dialog;Fl_Pixmap *quest_dialog;Fl_Pixmap *pixmap[15];WordList remote_wd;WordList id_wd;int setup_item_index;int REG_RUN_FLAG;int TEST_RUN_FLAG;int AUTH_TRY_TIMES;int DEVICE_EDIT_MODE;Var PREFERENCES;Var LPREFERENCES;profile_t PROFILES;int wmain[6] ={138,87,88,96,85,0};int w_wire_device[5] ={130,130,150,100,0};int w_wireless_device[5] ={130,130,150,100,0};int wrecord[5]={120,100,90,150,0};pthread_t thread_play_sound;bool play_sound_flag=true;bool g_SoundBusy=false;int record_operation_id;bool Have_Timer=false;//////////////////////////////////////////////////////////////////////////////////////////extern int errno;static int fd;static int sem_id;static int timer_out=0;static int task_msg_id=-1;static int task1_pid;/////////////////////////////////////////////////////////////////////////////////////////////int P(int sem_num){ int ret; struct sembuf sem[1]; sem[0].sem_num=sem_num; sem[0].sem_op=-1; sem[0].sem_flg=0; while( ((ret=semop(sem_id,sem,1))==-1)&&errno==EINTR) { printf("P semop EINTR error \n"); continue; }; if (ret==-1) { printf("P semop error\n"); printf("errno is %d \n",errno); return -1; } printf("P semop %d OK\n",sem_num); return 0;}int V(int sem_num){ int ret; struct sembuf sem[1]; sem[0].sem_num=sem_num; sem[0].sem_op=1; sem[0].sem_flg=0; while(((ret=semop(sem_id,sem,1))==-1)&&errno==EINTR) { printf("V semop EINTR error\n"); continue; }; if (ret==-1){ printf("V semop error\n"); return -1; } printf("V semop %d OK\n",sem_num); return 0;}int P_T(int sem_num,int * timer_outp){ int ret; struct sembuf sem[1]; sem[0].sem_num=sem_num; sem[0].sem_op=-1; sem[0].sem_flg=0; *timer_outp=0; alarm(2); while(1) { //while 1 start ret=semop(sem_id,sem,1); if (ret<0) { alarm(0); if (errno!=EINTR) { * timer_outp=0; printf("P semop %d error \n",sem_num); return -1; } else { if (*timer_outp==1) { * timer_outp=0; printf("P semop %d timer out error\n",sem_num); return -2; } else { alarm(2); continue; }; }; } else { break; }; } // while 1 end alarm(0); printf("P semop %d OK\n",sem_num); return 0;}uchar checksum(uchar * buf,int length){ uchar sum; int i; sum=0; for(i=0;i<length;i++) { sum=sum+*buf; buf++; } sum=sum%256; sum=256-sum; return sum;} uchar bit_value(uchar order,uchar data){ uchar i; uchar bitmask[10]; bitmask[0]=0x1; bitmask[1]=0x2; bitmask[2]=0x4; bitmask[3]=0x8; bitmask[4]=0x10; bitmask[5]=0x20; bitmask[6]=0x40; bitmask[7]=0x80; i=bitmask[order-1]&data; if (i==0) { return 0;} return 1;}void set_bit_value(uchar order, uchar *data,uchar value){ uchar i; uchar bitmask[10]; bitmask[0]=0x1; bitmask[1]=0x2; bitmask[2]=0x4; bitmask[3]=0x8; bitmask[4]=0x10; bitmask[5]=0x20; bitmask[6]=0x40; bitmask[7]=0x80; switch(value) { case 0: i=~bitmask[order-1]; *data=(*data)&i; break; case 1: *data=(*data)|bitmask[order-1]; break; }; }int sendmessage(struct mymsgbuf p){ int len,result; len=sizeof(struct mymsgbuf)-sizeof(long); do { result=msgsnd(task_msg_id,&p,len,0); } while (result==-1 && errno==EINTR ); if (result==-1) { printf("msgsnd error\n"); return -1; } return 0;}int get_uart(){ int ret; P(MUTEX1); do { ret=kill(task1_pid,SIGUSR1); } while(ret==-1 && errno==EINTR); if (ret!=0) { printf("kill sigusr1 error\n"); V(MUTEX1); return -1; } printf("kill sigusr1 succeed\n"); ret=P_T(MUTEX,&timer_out); if (ret!=0) { V(MUTEX1); return -2; } return 0; }int free_uart(void){ int ret; do { ret=kill(task1_pid,SIGUSR2); } while(ret==-1 && errno==EINTR); if(ret!=0) { printf("kill sigusr2 error\n"); return -1; } printf("kill sigusr2 succeed\n"); V(MUTEX); V(MUTEX1); return 0;} int handshake(){ int result; uchar rbuf[2],tbuf[2]; tbuf[0]=0xda; result=write(fd,tbuf,1); if (result!=1) { printf("request error\n"); return -1; } printf("send request sucessful\n"); timer_out=0; alarm(2); while(1) { result=read(fd,rbuf,1); if (result==1) { alarm(0); timer_out=0; printf("receive answer\n"); if (rbuf[0]!=0xd9) { printf("request is refused\n"); return -1; } printf("request is accepted\n"); return 0; } else { if(result<0&&errno==EINTR) { alarm(0); if(timer_out==1) { printf("timer overfllow error\n"); alarm(0); timer_out=0; return -1; } else { alarm(2); continue; } } else { printf("wait for answer error\n"); alarm(0); timer_out=0; return -1; } }//end if }//end while}int uartsend(uchar *tbuf,int length){ int result; result=write(fd,tbuf,length); if (result!=length) { printf("send command error\n"); return -1; } printf("send command ok\n"); return 0;} int uartread(uchar *rbuf,int length){ int result; timer_out=0; alarm(4); while (1) { result=read(fd,rbuf,length); if (result<0) { alarm(0); if (errno!=EINTR) { timer_out=0; printf("read data error %d , %d \n",errno,timer_out); return -1; } else { if (timer_out==1) { timer_out=0; printf("read timer out error\n"); return -1; } else { alarm(2); continue; }; }; } else { break; }; } alarm(0); timer_out=0; return result;}int uartreadframe(uchar *rbuf){ int ret; int i,sum; uchar ch; ret=uartread(rbuf,1); if (ret!=1) { return -1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -