Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
int _main( int argc, char *argv[] )
{
    int fres=0;
    s32 ret=0;
    struct IPCMessage *CMessage=NULL;

    thread_set_priority( 0, 0x58 );

#ifdef DEBUG
    dbgprintf("$IOSVersion: FFS-SD: %s %s 64M DEBUG$\n", __DATE__, __TIME__ );
#else
    dbgprintf("$IOSVersion: FFS-SD: %s %s 64M Release$\n", __DATE__, __TIME__ );
#endif

    //dbgprintf("FFS:Heap Init...");
    HeapID = heap_create(Heap, sizeof Heap);
    QueueSpace = heap_alloc(HeapID, 0x20);
    //dbgprintf("ok\n");

    QueueID = RegisterDevices();
    if( QueueID < 0 )
    {
        ThreadCancel( 0, 0x77 );
    }

    sdhc_init();

    //dbgprintf("FFS:Mounting SD...\n");
    fres = f_mount(0, &fatfs);
    //dbgprintf("FFS:f_mount():%d\n", fres);

    if(fres != FR_OK)
    {
        //dbgprintf("FFS:Error %d while trying to mount SD\n", fres);
        ThreadCancel( 0, 0x77 );
    }

    //dbgprintf("FFS:Clean up...");

    //clean up folders
    FS_Delete("/tmp");
    FS_Delete("/import");

    f_mkdir("/tmp");
    f_mkdir("/import");

    thread_set_priority( 0, 0x0B );

    //dbgprintf("ok\n");

    while (1)
    {
        ret = mqueue_recv(QueueID, (void *)&CMessage, 0);
        if( ret != 0 )
        {
            //dbgprintf("FFS:mqueue_recv(%d) FAILED:%d\n", QueueID, ret);
            continue;
        }

        //dbgprintf("FFS:Cmd:%d\n", CMessage->command );

        switch( CMessage->command )
        {
        case IOS_OPEN:
        {
            ret = FS_Open( CMessage->open.device, CMessage->open.mode );
#ifdef DEBUG
            if( ret != FS_NO_DEVICE )
                dbgprintf("FFS:IOS_Open(\"%s\", %d):%d\n", CMessage->open.device, CMessage->open.mode, ret );
#endif
            mqueue_ack( (void *)CMessage, ret);

        }
        break;

        case IOS_CLOSE:
        {
#ifdef DEBUG
            dbgprintf("FFS:IOS_Close(%d):", CMessage->fd);
#endif
            ret = FS_Close( CMessage->fd );
#ifdef DEBUG
            dbgprintf("%d\n", ret );
#endif
            mqueue_ack( (void *)CMessage, ret);
        }
        break;

        case IOS_READ:
        {

#ifdef DEBUG
            dbgprintf("FFS:IOS_Read(%d, 0x%p, %u):", CMessage->fd, CMessage->read.data, CMessage->read.length );
#endif
            ret = FS_Read( CMessage->fd, CMessage->read.data, CMessage->read.length );

#ifdef DEBUG
            dbgprintf("%d\n", ret );
#endif
            mqueue_ack( (void *)CMessage, ret );

        }
        break;
        case IOS_WRITE:
        {
#ifdef DEBUG
            dbgprintf("FFS:IOS_Write(%d, 0x%p, %u)", CMessage->fd, CMessage->write.data, CMessage->write.length );
#endif
            ret = FS_Write( CMessage->fd, CMessage->write.data, CMessage->write.length );

#ifdef DEBUG
            dbgprintf(":%d\n", ret );
#endif
            mqueue_ack( (void *)CMessage, ret );
        }
        break;
        case IOS_SEEK:
        {
#ifdef DEBUG
            dbgprintf("FFS:IOS_Seek(%d, %x, %d):", CMessage->fd, CMessage->seek.offset, CMessage->seek.origin );
#endif
            ret = FS_Seek( CMessage->fd, CMessage->seek.offset, CMessage->seek.origin );

#ifdef DEBUG
            dbgprintf("%d\n", ret );
#endif
            mqueue_ack( (void *)CMessage, ret );

        }
        break;

        case IOS_IOCTL:
            FFS_Ioctl(CMessage);
            break;

        case IOS_IOCTLV:
            FFS_Ioctlv(CMessage);
            break;
#ifdef EDEBUG
        default:
            dbgprintf("FFS:unimplemented/invalid msg: %08x\n", CMessage->command);
            mqueue_ack( (void *)CMessage, -1017);
#endif
        }
    }

    return 0;
}