Esempio n. 1
0
//----初始化标准输入模块-------------------------------------------------------
//功能: 初始化标准输入模块,执行初始化后,可以创建输入设备。
//参数: 无
//返回: true = 成功,false= 失败.
//-----------------------------------------------------------------------------
bool_t ModuleInstall_Stddev(ptu32_t para)
{
    static struct  tagStdinDeviceRsc root;

    tg_pStdinInputMsgQ = Stddev_CreatInputMsgQ(10,"StdInDev");
    if(tg_pStdinInputMsgQ == NULL)
        return false;
    g_ptStdinDevice = M_Malloc(gc_u32CfgStdinDeviceLimit
                                * sizeof(struct  tagStdinDeviceRsc),0);
    if(g_ptStdinDevice == NULL)
    {
        Stddev_DeleteInputMsgQ(tg_pStdinInputMsgQ);
        return false;
    }
    s_ptStdinDeviceRscTree = (struct  tagStdinDeviceRsc *)
                        Rsc_AddTree(&root.stdin_device_node,
                        sizeof(struct  tagStdinDeviceRsc),RSC_STDIN_OUT,"stdin input device");
    //初始化泛设备控制块内存池
    g_ptStdinDevicePool = Mb_CreatePool((void*)g_ptStdinDevice,
                                    gc_u32CfgStdinDeviceLimit,
                                    sizeof(struct  tagStdinDeviceRsc),
                                    2,10,
                                    "输入设备控制块内存池");
    Stddev_SetFocusDefault(tg_pStdinInputMsgQ);
    return true;
}
Esempio n. 2
0
// =========================================================================
// 函数功能:菜单模块初始化函数,初始化相应资源,添加根节点
// 输入参数:    无
// 输出参数:无
// 返回值  :
// 说明    :建立菜单项的内存池和根节点
// =========================================================================
ptu32_t module_init_menu(ptu32_t para)
{
   static struct tagRscNode sMenuitemRoot;
   bool_t  result=false;

   //init the menuitem tree
   pg_menuitem_root= Rsc_AddTree(&sMenuitemRoot, sizeof(struct tagRscNode),RSC_RSCNODE,"MenuItem_root");
   if(NULL==pg_menuitem_root)
   {
      printf("create the pg_menuitem_root failed!\n");
      return result;
   }
   //init the menuitem pool
   pg_menuitem_pool = Mb_CreatePool((void*)sMenuitemRsc,
                                    cn_limit_menuitem,
                                    sizeof(struct menu_item),
                                    20,100,
                                    "MenuItem_pool");
   if(NULL==pg_menuitem_pool)
    {
       printf("create the pg_menuitem_pool failed!\n");
       return result;
    }
    result=true;
    return result;
}
Esempio n. 3
0
// =============================================================================
// 函数功能:  Socket_Init
//
// 输入参数:para,目前无意义
// 输出参数:
// 返回值  :true成功 false失败
// 说明    :1,建立套接字所需要的内存池
// =============================================================================
bool_t Socket_Init(ptu32_t para)
{
    bool_t result;
    int i;
    //套接字内存池
    pgSocketPool = Mb_CreatePool((void *)sgSocketPool, CN_SOCKET_POOLSIZE,\
                                 sizeof(tagSocket), 0, 0, "Socket Pool");
    if (NULL == pgSocketPool)
    {
        printk("Socket:Creat SocketPool Failed\n\r");
        result =  false;
    }
    else
    {

        printk("Socket:Creat SocketPool Success\n\r");
        for(i =0; i < CN_SOCKET_POOLSIZE; i++)
        {
            sgSocketMap[i] = NULL;
        }
        result = true;
    }

    return result;
}
Esempio n. 4
0
//----模块初始化---------------------------------------------------------------
//功能: 初始化Multiplex模块。创建互斥量,初始化内存池。
//参数:para,无效。
//返回:0=成功,非0=失败。
//-----------------------------------------------------------------------------
ptu32_t ModuleInstall_Multiplex(ptu32_t para)
{
    Lock_MutexCreate_s(&MultiplexMutex, "Multiplex control block");
    //创建MultiplexSets控制块内存池,内存池的初始状态是空的。
    g_ptMultiplexSetsPool = Mb_CreatePool(NULL, 0, sizeof(struct tagMultiplexSetsCB),
        5, CN_MULTIPLEX_MAX_SETS, "Multiplex control block");
    if (g_ptMultiplexSetsPool == NULL)
        return -1;
    //创建Multiplex对象控制块内存池,内存池的初始状态是空的。
    g_ptMultiplexObjectPool = Mb_CreatePool(NULL, 0, sizeof(struct tagMultiplexObjectCB),
        5, CN_MULTIPLEX_MAX_OBJECTS, "Multiplex control block");
    if (g_ptMultiplexObjectPool == NULL) {
        Mb_DeletePool(g_ptMultiplexObjectPool);
        return -1;
    }
    return 0;
}
Esempio n. 5
0
// =============================================================================
// 函数功能:看门狗模块的初始化
// 输入参数:
// 输出参数:
// 返回值  :1成功  0失败
// 说明    :创建看门狗硬件对应的软看门狗。注册看门狗异常信息解析器
// =============================================================================
ptu32_t ModuleInstall_Wdt(ptu32_t para)
{
    bool_t  result_bool;
    u16     evttid;

    g_ptWdtPool = M_Malloc(gc_u32CfgWdtLimit * sizeof(tagWdt),0);
    if(g_ptWdtPool == NULL)
        return 0;
    ptWdtPool = Mb_CreatePool(g_ptWdtPool,gc_u32CfgWdtLimit,sizeof(tagWdt),0,0,"wdt pool");
    //init the queue
    ptWdtHead = NULL;
    ptWdtTail = NULL;
    ptWdtHard = NULL;

    //create the msg box for the api to snd msg to the wdt service task
    ptWdtMsgBox = MsgQ_Create(CN_WDTMSG_LIMIT,sizeof(tagWdtMsg),CN_MSGQ_TYPE_FIFO);

    //create the main service
    evttid = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_WDT,0,0,Wdt_Service,
                                NULL,0x1000,"wdt service");
    if(evttid == CN_EVTT_ID_INVALID)
        return 0;
    if( Djy_EventPop(evttid,NULL,0,0,0,0) == CN_EVENT_ID_INVALID)
    {
        printk("WDT MODULE:POP SERVICE FAILED!\n\r");
        Djy_EvttUnregist(evttid);
        return 0;
    }

    //create the soft wdt match the hard wdt
    struct tagWdtHalChipInfo hardpara;
    result_bool = WdtHal_GetChipPara(&hardpara);
    if(true == result_bool)//存在硬件看门狗,则创建硬件看门狗
    {
        fnWdtHardFeed = hardpara.wdtchip_feed;
        ptWdtHard = Wdt_Create(hardpara.wdtchip_name,\
                               hardpara.wdtchip_cycle,\
                               __Wdt_HardWdtYipHook,\
                               EN_EXP_DEAL_IGNORE, NULL);
    }
//todo:此处有警告
    extern bool_t Exp_RegisterThrowinfoDecoder(fnExp_ThrowinfoDecoderModule decoder,const char *name);
    if(false ==Exp_RegisterThrowinfoDecoder(__Wdt_WdtExpInfoDecoder,\
                                            CN_WDT_EXPDECODERNAME))
    {
        printk("WDT MODULE: Register Wdt Exp Decoder Failed!\n\r");
    }

    printk("WDT MODULE:Init end ...\n\r");
    return 1;
}
Esempio n. 6
0
bool_t install_vncserver_mirrordisplay(rfbScreenInfoPtr rfbserver)
{
    bool_t  ret=false;
    struct tagDisplayRsc *base_display;
    struct tagGkWinRsc *desktop;
    struct tagDisplayRsc *mirror_display;//我们的镜像显示器

    if(NULL==rfbserver)
    {
        return ret;
    }

    //通过桌面找到显示器,这种方法有点out ---TODO
    desktop = GK_ApiGetDesktop("sim_display");

    if(NULL==desktop)//找不到桌面。
    {
        return ret;
    }
    base_display=desktop->disp;
    if(NULL==base_display)//找不到主显示器
    {
        return ret;
    }
    if((base_display->pixel_format>>8)<8)//暂时不支持8位像素格式
    {
        return ret;
    }
    vncclip_pool = Mb_CreatePool((void*)s_vncclip_rsc,
                                     cn_limit_vncclip,
                                     sizeof(struct tagClipRect),
                                     20,100,
                                     "vncclip_pool");
    if(NULL == vncclip_pool)
    {
        debug_printf("#fatalerror--create the vncclip_pool failed!\n");
        return ret;
    }

    mirror_display=M_MallocLc(sizeof(struct tagDisplayRsc),0);
    if(NULL==mirror_display)
    {
        debug_printf("#fatalerror--malloc mirror display mem failed!\n");
        Mb_DeletePool(vncclip_pool);
        return ret;
    }
    memset(mirror_display,0,sizeof(struct tagDisplayRsc));
    //初始化镜像显示器的一些必备属性,跟主显示器保持一致--TODO,

    mirror_display->pixel_format = base_display->pixel_format;
    mirror_display->width = base_display->width;
    if(cn_vnc_keyboard_visual_enable)
    {
        mirror_display->height = base_display->height + cn_vnc_keyboard_height;
    }
    else
    {
        mirror_display->height = base_display->height;
    }
    mirror_display->frame_buffer = NULL;
    mirror_display->draw.bm_to_screen=vnc_bm_to_screen;

    ret= GK_InstallDisplayMirror(base_display,mirror_display,"vnc_server_disp");

    if(ret)//安装成功
    {   //区域设置
        rfbserver->width=mirror_display->width;
        rfbserver->height=mirror_display->height;
        rfbserver->rfbServerFormat.bitsPerPixel=(mirror_display->pixel_format>>8);
        rfbserver->frameBuffer=M_MallocLc(rfbserver->width*\
                    (rfbserver->height)*(rfbserver->rfbServerFormat.bitsPerPixel/8),0);

        if(NULL==rfbserver->frameBuffer)
        {
            Rsc_DelNode((struct tagRscNode *)mirror_display);
            free(mirror_display);
            Mb_DeletePool(vncclip_pool);
            debug_printf("#fatalerror--malloc rfbserver frame buf failed!\n");

            return ret;
        }
//镜像显示器和其基础显示器公用一个buf。
        //初始化一些rfbserver的参数
        debug_printf("fram buf = %08x   %d bytes\n",rfbserver->frameBuffer,\
           rfbserver->width*(rfbserver->height)*(rfbserver->rfbServerFormat.bitsPerPixel/8));
        memset(rfbserver->frameBuffer,0,rfbserver->width*(rfbserver->height)*(rfbserver->rfbServerFormat.bitsPerPixel/8));
        rfbserver->clip_head=NULL;

        //像素格式
     //   rfbserver->rfbServerFormat.bitsPerPixel=rfbserver->bitsPerPixel;
        //感觉rfbScreen对于色彩的设置有点冗余,可以考虑只用format就好了,后续修正--TODO
        rfbserver->rfbServerFormat.bigEndian=false;
        rfbserver->rfbServerFormat.trueColour=true;
        rfbserver->paddedWidthInBytes=(rfbserver->rfbServerFormat.bitsPerPixel/8)*rfbserver->width;
        switch(rfbserver->rfbServerFormat.bitsPerPixel)//目前就列举这几种吧,后续的再行补充
        {
            case 8://332格式
                debug_printf("the server vmirror_display used 332 format!\n");
                rfbserver->rfbServerFormat.redShift=5;
                rfbserver->rfbServerFormat.greenShift=2;
                rfbserver->rfbServerFormat.blueShift=0;
                rfbserver->rfbServerFormat.redMax=((1<<3)-1);
                rfbserver->rfbServerFormat.greenMax=((1<<3)-1);
                rfbserver->rfbServerFormat.blueMax=((1<<2)-1);
                rfbserver->rfbServerFormat.depth=8;
                break;
            case 16://565格式
                debug_printf("the server vmirror_display used 565 format!\n");
                rfbserver->rfbServerFormat.redShift=11;
                rfbserver->rfbServerFormat.greenShift=5;
                rfbserver->rfbServerFormat.blueShift=0;
                rfbserver->rfbServerFormat.redMax=((1<<5)-1);
                rfbserver->rfbServerFormat.greenMax=((1<<6)-1);
                rfbserver->rfbServerFormat.blueMax=((1<<5)-1);
                rfbserver->rfbServerFormat.depth=16;
                break;
            case 32://真彩色888
                debug_printf("the server vmirror_display used 888 format!\n");
                rfbserver->rfbServerFormat.redShift=16;
                rfbserver->rfbServerFormat.greenShift=8;
                rfbserver->rfbServerFormat.blueShift=0;
                rfbserver->rfbServerFormat.redMax=((1<<8)-1);
                rfbserver->rfbServerFormat.greenMax=((1<<8)-1);
                rfbserver->rfbServerFormat.blueMax=((1<<8)-1);
                rfbserver->rfbServerFormat.depth=24;
                break;
            default://不应该处理,后果很严重,后虚修补bug--TODO
                break;
        }

        vncscreen=rfbserver;
        vnc_set_vncclip_pool(vncclip_pool);
        rfbserver->mirror_display = mirror_display;
        return ret;
    }
    else
    {