コード例 #1
0
void* DefaultWifiThread(void *pThreadArg)
{
    int iExit = 0;
	int iRecv = 0;
	OTDRMSGQUEUE *pWifiMsg = NULL;
	pWifiMsg = GetWifiMsgQueue();
	printf("enter thd\n");
	if(pWifiMsg == NULL)
	{
		printf("error, pWifiMsg is NULL\n");
		return NULL;
	}
	else
	{
		ClearOTDRMsgQueue(pWifiMsg);
	}
	
    while (!iExit)
    {		
        iExit = GetExitFlag();
		
        if (iExit == 1)
        {
            break;
        }

		iRecv = 0;
		ReadWifiMsgQueue(&iRecv);
		if(iRecv)
		{
			printf("wifiTHD Recv = %d\n", iRecv);
			switch(iRecv)
			{
				case ENUM_OPEN:
					WifiOpen();
					break;
				case ENUM_SCAN:
					WifiScan();
					break;
				case ENUM_SCAN_R:
					WifiScan_r();
					break;
				case ENUM_CONNECT://victor
					WifiConnect();
					break;
				default:
					break;
			}
		}
		else
		{
			MsecSleep(30);
		}
		
    }	
	printf("exit thd\n");
	return NULL;
}
コード例 #2
0
ファイル: wnd_main.c プロジェクト: spartacus429496/linux_gui
/***
  * 功能:
        初始化设备驱动,获得设备文件描述符
  * 参数:
  * 返回:
        成功返回零,失败返回非零值
  * 备注:
***/
int InitializeDevice(void)
{
    int iErr = 0;

    //加载键盘驱动
    iErr = system("insmod /lib/modules/2.6.30/drv_keypad.ko");
    if (iErr)
    {
        printf("insmod drv_keypad.ko error\n");
    }

    //等待一段时间,以便完成设备驱动加载
    MsecSleep(200);

    return iErr;
}
コード例 #3
0
ファイル: l3.c プロジェクト: China863SDN/DCFabric
//by:yhy 绿网无用函数
//每2s清空一次
void *timeout_packets()
{
    l3_send_buf_t *p_buf = NULL;
    l3_send_buf_t *tmp = NULL;

	
	prctl(PR_SET_NAME, (unsigned long) "TimeoutPktThread" ) ;  
    while(1)
    {
        pthread_mutex_lock(&g_timeout_thread_mutex);
        p_buf = g_l3_first_packets;
        while(p_buf)
        {
            if(g_cur_sys_time.tv_sec - p_buf->time_smp >= 2)
            {
                if(p_buf == g_l3_first_packets)
                {
                    g_l3_first_packets = p_buf->next;
                    if(g_l3_first_packets)
                    {
                        g_l3_first_packets->pre = NULL;
                    }
                }
                else
                {
                    p_buf->pre->next = p_buf->next;
                    p_buf->next->pre = p_buf->pre;
                }

                tmp = p_buf->next;
                free(p_buf);
                p_buf = tmp;
                continue;
            }

            p_buf = p_buf->next;
        }

        pthread_mutex_unlock(&g_timeout_thread_mutex);
        //sleep(2);
        
		MsecSleep(2*1000);
    }
}
コード例 #4
0
ファイル: guitouch.c プロジェクト: spartacus429496/linux_gui
/***
  * 功能:
        默认触摸屏线程入口函数
  * 参数:
        1.void *pThreadArg:     线程入口函数参数,类型为(GUITOUCH *)
  * 返回:
        返回线程结束状态
  * 备注:
***/
void* DefaultTouchThread(void *pThreadArg)
{
    //错误标志、返回值定义
    int iErr = 0;
    static int iReturn = 0;
    //临时变量定义
    int iExit = 0;
    GUITOUCH *pTouchObj = pThreadArg;

    while (!iExit)
    {
        //根据结束标志判断是否需要结束触摸屏线程
        iExit = GetExitFlag();
        if (iExit)
        {
            break;
        }

        //触摸屏事件的封装
        switch (pTouchObj->iDevType)
        {
        case GUITOUCH_TYP_STD:
            iErr = StandardTouchProcess(pTouchObj);
            break;
        case GUITOUCH_TYP_CUST:
            iErr = CustomTouchProcess(pTouchObj);
            break;
        default:
            break;
        }

        //出错为-1,表示无触摸屏数据可读,睡眠50毫秒
        if (-1 == iErr)
        {
            MsecSleep(50);
        }
    }

    //退出线程
    ThreadExit(&iReturn);
    return &iReturn;    //该语句只是为了消除编译器报警,实际上不起作用
}
コード例 #5
0
ファイル: wnd_main.c プロジェクト: spartacus429496/linux_gui
int main(int argc, char *argv[])
{
    GUITHREAD thdFb = -1;
    GUITHREAD thdKeypad = -1;
    GUITHREAD thdTouch = -1;

    GUIWINDOW *pWnd = NULL;

    int iExit = 0;

    //初始化设备驱动
    //InitializeDevice();

    //装载输入法数据库
    //OpenInputDb("/home/ubuntu/workspace/guilib/run/input/china.db");

    //初始化GUI环境,运行调度线程及事件封装线程
    InitializeGUI();

    //运行设备抽象层的线程
    ThreadCreate(&thdFb, NULL,
                 DefaultFbThread, GetCurrFbmap());
    //ThreadCreate(&thdKeypad, NULL,
    //             DefaultKeypadThread, GetCurrKeypad());
    ThreadCreate(&thdTouch, NULL,
                 DefaultTouchThread, GetCurrTouch());
	
    //第一个窗体线程运行
    pWnd = CreateWindow(0, 0, 800, 480,
                        FrmWiFiInit, FrmWiFiExit,
                        FrmWiFiPaint, FrmWiFiLoop,
                        FrmWiFiPause, FrmWiFiResume,
                        NULL);   //pWnd由调度线程释放
    SendSysMsg_ThreadCreate(pWnd);

    //等待结束标志设立
    while (!iExit)
    {
        iExit = GetExitFlag();
        if (iExit)
        {
            ThreadCancel(thdTouch);     //取消可能阻塞的触摸屏线程
            ThreadCancel(thdKeypad);    //取消可能阻塞的键盘线程
            ThreadCancel(thdFb);        //取消可能阻塞的帧缓冲线程
            break;
        }

        MsecSleep(100);
    }

    //回收设备抽象层的线程
    ThreadJoin(thdTouch, NULL);
    ThreadJoin(thdKeypad, NULL);
    ThreadJoin(thdFb, NULL);

    //释放GUI环境,回收事件封装线程及调度线程
    ReleaseGUI();

    //释放输入法数据库
    CloseInputDb();

    //释放设备驱动
    //ReleaseDevice();

    return 0;
}
コード例 #6
0
static void WifiScan_r()
{
	FILE *fstream;
    char buffer[512] = {0};
    char buffer1[512] = {0};
	
	vsystem("wpa_cli scan_r > /mnt/sdcard/wifi/list.txt");
	MsecSleep(1000);

	vsystem("awk '{print $5}' /mnt/sdcard/wifi/list.txt | tail -n +3 > /mnt/sdcard/scan");
		
	MutexLock(&pWifiMutex);
    if (NULL == (fstream = fopen("/mnt/sdcard/scan", "r")))
    {
        perror("fopen");
        return;
    }
	int index = 0;
    while (NULL != mfgets(buffer, sizeof(buffer), fstream))
    {
        if (index >= MAX_SIGNUM)
        {
            break;
        }
        strncpy(stWifi[index].ssid, buffer, sizeof(stWifi[index].ssid) - 1);
        index++;
    }
    fclose(fstream);

	vsystem("awk '{print $3}' /mnt/sdcard/wifi/list.txt | tail -n +3 > /mnt/sdcard/scan");
		
    if (NULL == (fstream = fopen("/mnt/sdcard/scan", "r")))
    {
        perror("fopen");
        return;
    }
	index = 0;
    while (NULL != mfgets(buffer, sizeof(buffer), fstream))
    {
        if (index >= MAX_SIGNUM)
        {
            break;
        }
		stWifi[index].iLevel = atoi(buffer);
		stWifi[index].iCell = CalcWifiCell(stWifi[index].iLevel);
        index++;
    }
    fclose(fstream);
	
	SortByLevel(index);
	
	int i;
	for(i = 0; i < index; i++)
	{
		if(i < WIFIITEM)
		{
			snprintf(buffer1, sizeof(buffer1), "%s", stWifi[i].ssid);
			if(NULL == pWiFiStrItem[i])
			{
				free(pWiFiStrItem[i]);
				pWiFiStrItem[i] = NULL;
			}
			pWiFiStrItem[i] = TransString(buffer1);
			SetLabelText(pWiFiStrItem[i], pWiFiLblItem[i]);
			DisplayPicture(pWiFiItem[i]);
			DisplayLabel(pWiFiLblItem[i]);
		}
		printf("sig%d %s  %d %d\n", i, stWifi[i].ssid, stWifi[i].iCell, stWifi[i].iLevel);
	}
	
	MutexUnlock(&pWifiMutex);
	
	WriteWifiMsgQueue(ENUM_SCAN);
}
コード例 #7
0
static void WifiScan()
{
	vsystem("wpa_cli scan");
	MsecSleep(10000);
	WriteWifiMsgQueue(ENUM_SCAN_R);
}