📄 con-flow.c
字号:
vd->pFramebuffer =(unsigned char *) realloc (vd->pFramebuffer, (size_t) vd->framesizeIn);
return erreur;
}
/*初始化摄像头
vd:摄像头相关结构体
device:设备位置
width:宽度
height:高度
format:格式
grabmethod:抓图方法*/
int init_videoIn (struct vdIn *vd, char *device, int width, int height, int format, int grabmethod)
{
int err = -1;
//判断指针入参不可以为空
if (vd == NULL || device == NULL)
return -1;
//得到图象的宽和高不可以为零
if (width == 0 || height == 0)
return -1;
if (grabmethod < 0 || grabmethod > 1)
grabmethod = 1; //read by default;
vd->videodevice = NULL;
vd->cameraname = NULL;
vd->videodevice = NULL;
vd->videodevice = (char *)realloc(vd->videodevice, 32);
vd->cameraname = (char *)realloc(vd->cameraname, 32);
snprintf(vd->videodevice, 32, "%s", device);
memset(vd->cameraname, 0, sizeof (vd->cameraname));
memset(vd->bridge, 0, sizeof(vd->bridge));
vd->hdrwidth = width;
vd->hdrheight = height;
vd->formatIn = format;
vd->bppIn = GetDepth (vd->formatIn);
vd->pFramebuffer = NULL;
err = init_v4l(vd);
vd->ptframe = NULL;
vd->ptframe = (unsigned char *)realloc(vd->ptframe, (size_t) vd->framesizeIn );
return err;
}
//关闭摄像头
int close_v4l(struct vdIn *vd)
{
//判断指针入参不可以为空
if (vd == NULL)
return -1;
vd->videodevice = NULL;
vd->cameraname = NULL;
vd->videodevice = NULL;
close(vd->fd);
free(vd->videodevice);
free(vd->cameraname);
free(vd->ptframe );
free (vd->pFramebuffer);
//close ("/dev/video0");
return 0;
}
const char* getdatetime (char *timezone)
{
time_t cur_time;
if ( (cur_time = time(NULL)) != -1)
{
putenv (timezone); tzset();
localtime_r (&cur_time, &my_tm);
putenv (sys_tz); tzset();
sprintf (buffer, "%4d年%02d月%02d日 %02d:%02d:%02d",
my_tm.tm_year + 1900, my_tm.tm_mon+1, my_tm.tm_mday,
my_tm.tm_hour, my_tm.tm_min, my_tm.tm_sec);
}
return (buffer);
}
//拨打电话时获得串口数据
int CallGetSerialDataProc(void)
{
HWND hDlg;
char tmp[10];
char tmp1[40];//辅助信息
int size,sumsize = 0;//得到的串口数据字节数
int i,k,j = 0;
int oldtype;
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
//pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldtype);
//打开串口
serial_port1 = open_serial_modem("/dev/ttyS1");
printf("\t!!!serial_port1 = %x;!!!\n",serial_port1);
//设置波特率
config_serial_port(serial_port1, (speed_t)B115200);
//拨打电话
dial_number(serial_port1);
while(sumsize < 16 )
{
printf("\t!!!399 %d;\n",size);
size = read(serial_port1, tmp, 28);
printf("\t!!!401 %d;\n",size);
if(-1 ==size )
return;
for(i = 0; i < size; i ++)
{
printf("\t!!!441 %x;\n",tmp[i]);
printf("\t!!!442 %c;\n",tmp[i]);
if(10!=tmp[i]&&13!=tmp[i])
{
tmp1[j++]=tmp[i];
printf("\t!!!452 %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4],tmp1[5],tmp1[6],tmp1[7],tmp1[8],tmp1[9],
tmp1[10],tmp1[11],tmp1[12],tmp1[13],tmp1[14],tmp1[15],tmp1[16],tmp1[17],tmp1[18],tmp1[19],
tmp1[20],tmp1[21],tmp1[22],tmp1[23],tmp1[24],tmp1[25],tmp1[26],tmp1[27],tmp1[28],tmp1[29],
tmp1[30],tmp1[31],tmp1[32],tmp1[33],tmp1[34],tmp1[35],tmp1[36],tmp1[37],tmp1[38],tmp1[39]);
printf("\t!!!457 %x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x\n",
tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4],tmp1[5],tmp1[6],tmp1[7],tmp1[8],tmp1[9],
tmp1[10],tmp1[11],tmp1[12],tmp1[13],tmp1[14],tmp1[15],tmp1[16],tmp1[17],tmp1[18],tmp1[19],
tmp1[20],tmp1[21],tmp1[22],tmp1[23],tmp1[24],tmp1[25],tmp1[26],tmp1[27],tmp1[28],tmp1[29],
tmp1[30],tmp1[31],tmp1[32],tmp1[33],tmp1[34],tmp1[35],tmp1[36],tmp1[37],tmp1[38],tmp1[39]);
}
}
sumsize = sumsize+size;
}
j = 0;
//当得到的字符个数小于2时,一直处于检测状态
while (j < 2)
{
for(i=0;i<10;i++)
{
tmp[i]=0;
}
size = read(serial_port1, tmp, 4);
if(-1 ==size )
return;
printf("size = %d %x,%x,%x,%x\n",size,tmp[0],tmp[1],tmp[2],tmp[3]);
if(size <= 4)
{
for (i = 0; i < size; i++)
{
if((13==tmp[i])||(10==tmp[i]))
{
printf("\t!!!422 %d;\n",tmp[i]);
}
else
{
tmp1[j++] = tmp[i];
printf("\t!!!426 %c;\n",tmp[i]);
}
}
}
}
printf("\t get2data。。。\n");
if (strncmp(tmp1, "OK", 2) == 0)
{
printf("\t通话中,开始计时。。。\n");
j = 0;
//检测对方的挂机状态
while (j < 10)
{
size = read(serial_port1, tmp, 10);
pthread_testcancel();
if(-1==size)
return;
printf("\t!!!444 size = %d char = %x!!!\n",size,tmp[0]);
for (i = 0; i < size; i++)
{
if((13==tmp[i])||(10==tmp[i]))
{
printf("\t!!!452 %x;\n",tmp[i]);
}
else
{
tmp1[j++] = tmp[i];
printf("\t!!!456 j= %d %x %x;\n",j,tmp[i],tmp1[j-1]);
if (strncmp(tmp1, "ATHOK", 5) == 0)
{
printf("\t我方已挂机。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_EQUAL,(LPARAM) 0);
return TRUE;
}
}
}
}
for(i=0;i<j;i++)
{
printf("\t!!!429 %x;\n",tmp1[i]);
}
if (strncmp(tmp1, "NO CARRIER", 10) == 0)
{
printf("\t对方已挂机。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_MINUS,(LPARAM) 0);
return TRUE;
}
else
{
printf("\t未知状态挂机。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_MINUS,(LPARAM) 0);
return FALSE;
}
}
else
{
printf("\t线路不通。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_EQUAL,(LPARAM) 0);
return;
}
}
int HangGetSerialDataProc(void)
{
HWND hDlg;
char tmp[10];
char tmp1[10];//辅助信息
int i,j = 0;
int size, sumsize = 0;
int oldtype;
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
//pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,&oldtype);
hangup(serial_port1);
//当得到的字符个数小于4时,一直处于检测状态
while(j < 2 )
{
printf("\t!!!509 %d;\n",size);
size = read(serial_port1, tmp, 28);
pthread_testcancel();
if(-1 ==size )
return;
printf("\t!!!513 %d;\n",size);
for(i = 0; i < size; i ++)
{
if((13==tmp[i])||(10==tmp[i]))
{
printf("\t!!!518 %d;\n",tmp[i]);
}
else
{
tmp1[j++] = tmp[i];
printf("\t!!!523 %c;\n",tmp[i]);
}
}
sumsize = sumsize+size;
printf("\t!!!501 %d;\n",sumsize);
}
if (strncmp(tmp1, "OK", 2) == 0)
{
printf("\t我方已挂机。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_EQUAL,(LPARAM) 0);
return TRUE;
j = 0;
}
else
{
printf("\t线路未挂断。。。\n");
SendMessage(HWND_DESKTOP, MSG_KEYDOWN, (WPARAM)SCANCODE_EQUAL,(LPARAM) 0);
return;
}
}
void CloseWindow(HWND hDlg)
{
KillTimer(hDlg, 1);
EndDialog (hDlg, IDCANCEL);
}
//正在呼叫客服窗口处理函数
static int IsCallingDialogBoxProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
int error_code;
int hwd;
CTRLDATA *a;
char tmp[10];
int size;
pthread_t pid1;
pthread_t pid2;
switch (message)
{
case MSG_INITDIALOG:
LoadBitmap (HDC_SCREEN, &bmp_top, "/jffs2/jpg/top.jpg");
LoadBitmap (HDC_SCREEN, &bmp_bottom, "/jffs2/jpg/bottom.jpg");
SetWindowElementColorEx(GetDlgItem (hDlg,IDC_STATIC_1),
FGC_CONTROL_NORMAL,RGB2Pixel(HDC_SCREEN, 255, 112, 0));
UpdateWindow(GetDlgItem (hDlg,IDC_STATIC_1),TRUE);
SetWindowBkColor(GetDlgItem (hDlg,IDC_STATIC_1),RGB2Pixel(HDC_SCREEN, 255, 255, 255));
SetWindowBkColor(GetDlgItem (hDlg,IDC_STATIC_2),RGB2Pixel(HDC_SCREEN, 255, 255, 255));
SetWindowBkColor(GetDlgItem (hDlg,IDC_STATIC_3),RGB2Pixel(HDC_SCREEN, 255, 255, 255));
SetWindowBkColor(GetDlgItem (hDlg,IDC_STATIC_4),RGB2Pixel(HDC_SCREEN, 255, 255, 255));
InvalidateRect(GetDlgItem (hDlg,IDC_STATIC_1),NULL,TRUE);
InvalidateRect(GetDlgItem (hDlg,IDC_STATIC_2),NULL,TRUE);
InvalidateRect(GetDlgItem (hDlg,IDC_STATIC_3),NULL,TRUE);
InvalidateRect(GetDlgItem (hDlg,IDC_STATIC_4),NULL,TRUE);
SetWindowBkColor(GetDlgItem (hDlg,IDC_STATIC_5),RGB2Pixel(HDC_SCREEN, 196, 227, 159));
InvalidateRect(GetDlgItem (hDlg,IDC_STATIC_5),NULL,TRUE);
SetWindowFont (GetDlgItem(hDlg, IDC_STATIC_5), my_font);
//设置定时器,以更新窗口时间
SetTimer(hDlg, 1, 1);
break;
case MSG_TIMER:
a =(CTRLDATA *)GetDlgItem(hDlg, IDC_STATIC_5);
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_5), getdatetime(sys_tz));
UpdateWindow((HWND)a, TRUE);
break;
case MSG_KEYDOWN:
printf("\t!!!hDlg = %x;&hDlg= %x!!! \n",hDlg,&hDlg);
if(SCANCODE_ENTER == LOWORD(wParam))
{
printf("\t!!!IsCallingDialogBoxProc The Key Enter is pushed!!! \n");
pthread_cancel(pid1);
pthread_create(&pid2, NULL, (void *)HangGetSerialDataProc, &hDlg);
printf("\t!!!pid2 = %x!!! \n",pid2);
close_serial_modem(serial_port1);
}
else if(SCANCODE_0 == LOWORD(wParam))
{
//创建新的线程以检测串口数据
pthread_create(&pid1, NULL, (void *)CallGetSerialDataProc, &hDlg);
}
//如果按下P键,则进入专家预约-预约结束界面
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -