⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 con-flow.c

📁 minigui的部分界面实现
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 + -