Example #1
0
File: assert.c Project: djyos/djyos
//-----------------------------------------------------------------------------
//功能: 显示断言信息,然后退出程序
//参数: file,出错处的文件名
//     line,出错的行号,即调用assert宏的行号。
//输出: 无
//返回: 无
//------------
//更新记录:
// 1.日期: 2014/12/10
//   说明: 创建
//   作者: 罗侍田
//-----------------------------------------------------------------------------
void __assert(const char *file, s32 line)
{
	u16 event_id;
    printk("assertion failed: file \"%s\", line %d\r\n",file, line);
    printk("entery endless loop,try shell\r\n");
    event_id=Djy_MyEventId();
    Djy_SetEventPrio(event_id,CN_PRIO_SYS_SERVICE+1);
    for(;;);
}
Example #2
0
//----创始桌面窗口--------------------------------------------------------------
//描述: 该函数为内部调用,仅限于创建桌面.
//参数:proc: 桌面窗口过程回调函数
//      Text: 桌面窗口文字指针
//      x,y,w,h: 桌面窗口位置和大小
//      pdata: 用户自定义附加数据.
//返回:桌面窗口句柄.
//------------------------------------------------------------------------------
HWND    CreateDesktop(
                    WNDPROC *proc,
                    const char *Text,
                    int x,int y,int w,int h,
                    const void *pdata)
{
    WINDOW *pwin=NULL;
    struct tagGkWinRsc *pGkWin=NULL;
    u32 Style;

    if(NULL!=proc)
    {
        pwin =WIN_Alloc();
        if(NULL!=pwin)
        {

            Style = 0;
            Style &=~(WS_CHILD);

            _InitWindow(pwin,proc,Text,Style,x,y,w,h,NULL,0);
            pGkWin =(struct tagGkWinRsc*)malloc(sizeof(struct tagGkWinRsc));

            if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin, x,y,x+w,y+h,
                                RGB(0,0,0), CN_WINBUF_BUF, "desktop",
                                CN_SYS_PF_DISPLAY, 0,0,0))
            {
                free(pGkWin);
                return FALSE;
            }

            pwin->pGkWin     =pGkWin;
            pwin->mutex_lock =Lock_MutexCreate(NULL);
            pwin->pMsgQ      =GUI_CreateMsgQ(32);
            pwin->EventID   =Djy_MyEventId();
            pwin->Zorder     =0;
            GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS);

            HWND_Desktop =pwin;
            SendMessage(pwin,MSG_CREATE,(u32)pdata,0);
        }
    }
    return pwin;
}
Example #3
0
//----创建窗口------------------------------------------------------------------
//描述: 该函数可以创建主窗口和子窗口(控件)
//参数:proc: 窗口过程回调函数
//      Text: 窗口文字指针
//      Style: 窗口风格(具体参考窗口风格组合说明)
//      x,y,w,h: 桌面窗口位置和大小
//      hParent: 父窗口句柄.如果是NULL,则默认桌面为父窗口.
//      WinId: 窗口Id.如果是主窗口,该参数被忽略.
//      pdata: 用户自定义附加数据.
//返回:窗口句柄.
//------------------------------------------------------------------------------
HWND    CreateWindow(WNDPROC *pfWinProc,
                    const char *Text,u32 Style,
                    s32 x,s32 y,s32 w,s32 h,
                    HWND hParent,u32 WinId,const void *pdata)
{
    WINDOW *pwin=NULL;
    struct tagGkWinRsc *pGkWin=NULL;

    if(NULL==hParent)
    {
        hParent =GetDesktopWindow();
    }

    if(HWND_Lock(hParent))
    {
        pwin =WIN_Alloc();
        if(NULL!=pwin)
        {
            //初始化窗口数据
            _InitWindow(pwin,pfWinProc,Text,Style,x,y,w,h,hParent,WinId);

            x =pwin->WinRect.left;
            y =pwin->WinRect.top;
            w =RectW(&pwin->WinRect);
            h =RectH(&pwin->WinRect);

            pGkWin =(struct tagGkWinRsc*)malloc(sizeof(struct tagGkWinRsc));

            if(Style&WS_CHILD)
            {
                if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin,x,y,x+w,y+h,
                                    RGB(0,0,0), CN_WINBUF_BUF, pwin->Name,
                                    CN_SYS_PF_DISPLAY, 0,0,0))
                {
                    free(pGkWin);
                    return NULL;
                }

                pwin->mutex_lock =hParent->mutex_lock;  //子窗口使用父窗口锁
                pwin->pMsgQ      =hParent->pMsgQ;       //子窗口使用父窗口消息队列
                pwin->EventID   =hParent->EventID;
                pwin->Zorder     =hParent->Zorder-1;
                GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS);

            }
            else
            {
                if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin,x,y,x+w,y+h,
                                    RGB(0,0,0), CN_WINBUF_BUF, pwin->Name,
                                    CN_SYS_PF_DISPLAY, 0,0,0))
                {
                    free(pGkWin);
                    return NULL;
                }

                pwin->mutex_lock =Lock_MutexCreate(NULL);
                pwin->pMsgQ      =GUI_CreateMsgQ(32);
                pwin->EventID   =Djy_MyEventId();
                pwin->Zorder     =hParent->Zorder-1;
                GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS);

            }
            pwin->pGkWin = pGkWin;

            //将新窗口添加到父窗口
            _AddChild(hParent,pwin);

        }
        HWND_Unlock(hParent);

        if(NULL!=pwin)
        {
            SendMessage(pwin,MSG_CREATE,(u32)pdata,0);
            InvalidateWindow(pwin);
        }

    }
    return pwin;
}