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

📄 ebook.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
📖 第 1 页 / 共 2 页
字号:
        OSTimeDly(1);
    if(EBookTaskVars->ChildWin[1])
    {
        SCROLLBAR_SetNumItems(EBookTaskVars->ChildWin[1],EBookTaskVars->maxsel);
        SCROLLBAR_SetValue(EBookTaskVars->ChildWin[1],EBookTaskVars->sel);
    }
}
bool EBook_IsBookEnd(book_vars *EBookTaskVars)
{
    if( (EBookTaskVars->page +1 ) > ( api_GetFileLength(EBookTaskVars->infomation.FifoCntNo) / 512 ) )
        return TRUE;
    return FALSE;
}

void EBook_ShowCurPage(book_vars *EBookTaskVars)
{
    EBook_ReadCurPage(EBookTaskVars);    
    EBook_ResetBookWin(EBookTaskVars);
}
void EBook_ReadCurPage(book_vars *EBookTaskVars)
{
    int data;
    if(api_SeekFile(EBookTaskVars->infomation.FifoCntNo, SEEK_SET, EBookTaskVars->page * 512) >= 0)
    {
        data = api_ReadFile(EBookTaskVars->infomation.FifoCntNo, &EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart], 512);      
        EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + data] = 0;
    }
}
void EBook_ReadNextPage(book_vars *EBookTaskVars)
{
    int i;
    int length;
    if(EBook_IsBookEnd(EBookTaskVars))
        return;

    EBookTaskVars->page++;
    length = strlen(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + EBookTaskVars->bufferstart_save]);
    for(i=0;i<length;i++)
    {
        EBookTaskVars->bookbuffer[254-i] = EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart + EBookTaskVars->bufferstart_save+length-i-1];
    }
    EBookTaskVars->bufferstart = 255;
    EBook_ReadCurPage(EBookTaskVars);
    EBookTaskVars->bufferstart = 255 - length;
}
void EBook_ReadPrevPage(book_vars *EBookTaskVars)
{
    if(EBookTaskVars->page == 0)
        return;
    EBookTaskVars->page--;
    if(EBookTaskVars->page - 1 >=0)
    {
        EBookTaskVars->bufferstart_save = EBookTaskVars->bufferstart - 512;
        EBookTaskVars->bufferstart = 255;
        EBook_ReadCurPage(EBookTaskVars);
        memcpy(&EBookTaskVars->bookbuffer[0],&EBookTaskVars->bookbuffer[514],254);
    }
    EBookTaskVars->bufferstart = 255;
    EBook_ReadCurPage(EBookTaskVars);
    EBookTaskVars->bufferstart = 255;
}
void cbCallBack_EBookReadWindow(WM_MESSAGE* pMsg)
{
    GUI_RECT rClient;
    book_vars *EBookTaskVars = (book_vars *)OSGetTaskOwnPtr(EBOOK_FACE_ID);
    msg_t msg;

    switch (pMsg->MsgId) 
    {
    case WM_PAINT:
        if(EBookTaskVars->getmaxselflag)
        {
            EBookTaskVars->getmaxselflag = FALSE;
            EBookTaskVars->maxsel = GetMaxSelForTask(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],80);
            EBook_ShowBookUnlock();
            break;
        }
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_GetClientRect(&rClient);
        EBookTaskVars->bufferstart_save = GetDisplayStringForGui(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],EBookTaskVars->bookshow,EBookTaskVars->sel,80);
        if(EBookTaskVars->maxsel ==0)
            EBookTaskVars->maxsel = GetMaxSelForTask(&EBookTaskVars->bookbuffer[EBookTaskVars->bufferstart],80);
        EBook_ShowBookUnlock();
        GUI_DispStringInRect(EBookTaskVars->bookshow, &rClient, GUI_TA_LEFT | GUI_TA_TOP);
        break;
    case WM_KEY:
        cbCallBack_KeyResolve(pMsg);
        break;
    }
    WM_DefaultProc(pMsg);

}
void cbCallBack_EBookLISTWindow(WM_MESSAGE* pMsg)
{
    switch (pMsg->MsgId) 
    {
    case WM_KEY:
        cbCallBack_KeyResolve(pMsg);
        break;
    }
}
void cbCallBack_KeyResolve(WM_MESSAGE* pMsg)
{
    msg_t msg;

    switch(((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)
    {
    case 0:
        msg.type = MSG_KEY;
        msg.msg.data[0]  =  ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Up;
        MYOSQPost(GUIToEBookWindow,&msg);
        return;
    case 1:
        msg.type = MSG_KEY;
        msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Down; 
        MYOSQPost(GUIToEBookWindow,&msg);
        return;
    case 2:
        msg.type = MSG_KEY;
        msg.msg.data[0]  =  ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Long;
        MYOSQPost(GUIToEBookWindow,&msg);
        break;
    case 3:
        msg.type = MSG_KEY;
        msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Hold; 
        MYOSQPost(GUIToEBookWindow,&msg);
        return;
    case 4:
        System_DealMessage(pMsg);
        return;
    }

}

void EBook_CreateFrameWindow(book_vars *EBookTaskVars)
{
    EBookTaskVars->FrameWin = FRAMEWIN_Create((char*)EBookTaskVars->point[1], 0, WM_CF_SHOW, 0, 0, 96, 64);

    FRAMEWIN_SetFont(EBookTaskVars->FrameWin, &GUI_Font16B_ASCII);
    FRAMEWIN_SetTextColor(EBookTaskVars->FrameWin, GUI_RED);
    FRAMEWIN_SetBarColor(EBookTaskVars->FrameWin, 0, GUI_GREEN);
    FRAMEWIN_SetTextAlign(EBookTaskVars->FrameWin, GUI_TA_HCENTER);
    FRAMEWIN_SetActive(EBookTaskVars->FrameWin, 0);

}
void EBook_CreateBookWindow(book_vars *EBookTaskVars)
{
    int result;
    EBookTaskVars->page = 0;
    EBookTaskVars->sel = 0;
    EBookTaskVars->maxsel = 0;
    EBookTaskVars->getmaxselflag = 0;
    EBookTaskVars->bufferstart_save = 0;
    EBookTaskVars->bufferstart=255;

    api_GetFileNameByNo(EBookTaskVars->infomation.FifoCntNo, EBookTaskVars->infomation.FileLongName, EBookTaskVars->infomation.fileno);

    result = api_OpenFileByNo(EBookTaskVars->infomation.FifoCntNo, EBookTaskVars->infomation.fileno);
    if( result < 0)
    {
        return;
    }
    EBookTaskVars->infomation.fileflag = TRUE;
    EBook_ReadCurPage(EBookTaskVars);

    GetBookFilePartName(EBookTaskVars);
    FRAMEWIN_SetText(EBookTaskVars->FrameWin, EBookTaskVars->infomation.FileLongName);

    EBookTaskVars->ChildWin[0] = WM_CreateWindowAsChild(0,0,81,45,EBookTaskVars->FrameWin,WM_CF_SHOW,&cbCallBack_EBookReadWindow,0);
    for(;EBookTaskVars->maxsel == 0;)
        OSTimeDly(1);
    EBookTaskVars->ChildWin[1] = SCROLLBAR_Create(81,0,8,45,EBookTaskVars->FrameWin,0,WM_CF_SHOW,SCROLLBAR_CF_VERTICAL | SCROLLBAR_CF_FOCUSSABLE);
    
    SCROLLBAR_SetNumItems(EBookTaskVars->ChildWin[1],EBookTaskVars->maxsel);
    SCROLLBAR_SetPageSize(EBookTaskVars->ChildWin[1],1);
    EBookTaskVars->CurWinSel = 0;

    WM_SetFocus(EBookTaskVars->ChildWin[0]);
}
void EBook_DeleteBookWindow(book_vars *EBookTaskVars)
{
    if(EBookTaskVars->ChildWin[0] != 0)
    {
        EBookTaskVars->CurWinSel = 2;
        WM_SetFocus(EBookTaskVars->ChildWin[2]);
        if(EBookTaskVars->infomation.fileflag == TRUE)
        {
            api_CloseFile(EBookTaskVars->infomation.FifoCntNo);
            EBookTaskVars->infomation.fileflag == FALSE;
        }
        WM_DeleteWindow(EBookTaskVars->ChildWin[0]);
        WM_DeleteWindow(EBookTaskVars->ChildWin[1]);
        EBookTaskVars->ChildWin[0] = 0;
    }
}
void EBook_CreateListWindow(book_vars *EBookTaskVars)
{
    EBook_CreateFrameWindow(EBookTaskVars);
    EBookTaskVars->ChildWin[2] = LISTBOX_CreateAsChild((GUI_ConstString *)EBookTaskVars->point[0], EBookTaskVars->FrameWin, 0,0,90,45,cbCallBack_EBookLISTWindow, WM_CF_SHOW);
    LISTBOX_SetBackColor(EBookTaskVars->ChildWin[2], 0, GUI_BLUE);
    LISTBOX_SetBackColor(EBookTaskVars->ChildWin[2], 1, GUI_LIGHTBLUE);
    LISTBOX_SetTextColor(EBookTaskVars->ChildWin[2], 0, GUI_WHITE);
    LISTBOX_SetTextColor(EBookTaskVars->ChildWin[2], 1, GUI_BLACK);
    LISTBOX_SetFont(EBookTaskVars->ChildWin[2], &GUI_Font13B_1);
    EBookTaskVars->CurWinSel = 2;
    WM_SetFocus(EBookTaskVars->ChildWin[2]);
}
void EBook_DeleteListWindow(book_vars *EBookTaskVars)
{
    WM_DeleteWindow(EBookTaskVars->ChildWin[2]);
}

int GetMaxSelForTask(const char * src,int xlength)
{
    int i,j,k =0,m,n=0;
    for(i=j=m=0; src[m] != 0; j++,m++)
    {
        if(src[m]==0x0D && src[m+1]==0x0A)
        {
            m++;
            j--;
            continue;
        } 
        if(src[m] == ' ')
            k = j;
        i += GUI_GetCharDistX(src[m]);
        if(i>xlength)
        {
            if(k==0)
            {
                m -= 3;
                j--;
            }
            else
            {
                m -= j - k;
                j = k;
            }
            n++;
            k=0;
            i=0;
        }
    }
    return n;
}

int GetDisplayStringForGui(const char * src,char *dst,int sel,int xlength)
{
    int i=0,j=0,k=0,m=0,n=0,c=0;
    for(; src[m] != 0 && j < MAXCHARNUM; j++,m++)
    {   
        if(src[m]==0x0D && src[m+1]==0x0A)
        {
            m++;
            j--;
            continue;
        } 
        dst[j]= src[m];
        if(src[m] == ' ')
            k = j;

        i += GUI_GetCharDistX(src[m]);
        if(i>xlength)
        {
            if(k==0)
            {
                m -= 3;
                j--;
                dst[j-1]='-';
                dst[j]  ='\n';
            }
            else
            {
                dst[k]='\n';
                m -= j - k;
                j = k;
            }
            if(n++ < sel)
            {
                j = -1;
            }
            else if(c == 0)
            {
                c=m+1;
            }
            k=0;
            i=0;
        }
    }

    if(j == MAXCHARNUM)
        dst[MAXCHARNUM - 1] = 0;
    else
        dst[j]= src[m];
    return c;
}

void EBookTaskCreate()
{
    //IF MUSICTASK IS NOT EXIST THEN
    if(!EBookTaskDetect())
    {
        OS_ENTER_CRITICAL(); 
#ifdef WIN32
        CREATE_TASK(&aTCB[1], "EBookMenu", EBook_Task,  5, Stack_1);
#else   
        OSTaskCreate((void(*)(void *))(long)EBook_Task,    (void *)0x0000,  
                        (void *)EBOOK_FACE_SPACE, EBOOK_FACE_PRIO, EBOOK_FACE_ID);
#endif
        OS_EXIT_CRITICAL();
    }
    //ELSE THEN DO NOTHING
    else
    {
        msg_t msg;
        msg.type = MSG_REBUILDWIN; 
        MYOSQPost(GUIToEBookWindow,&msg);
    }
}
    
void EBookTaskDelete()
{
#ifndef WIN32
    EBook_SemExit();
    OSTaskDel(OS_PRIO_SELF);
#endif
}

  
bool EBookTaskDetect()
{   
#ifndef WIN32 
    OS_ENTER_CRITICAL();
    if(OSTCBPrioTbl[EBOOK_FACE_PRIO] != (OS_TCB *)0)
    {
        OS_EXIT_CRITICAL();
        return TRUE;
    }
    OS_EXIT_CRITICAL();
    return FALSE;
#else
    if(!EBookTaskExistFlag)
    {
        EBookTaskExistFlag = TRUE;
        return FALSE;
    }
    return TRUE;
#endif    
}  
void GetBookFilePartName(book_vars *EBookTaskVars)
{
    EBookTaskVars->infomation.FileLongName[12] = EBookTaskVars->page/100 +'0';
    EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/100 > 0)] = EBookTaskVars->page%100/10 +'0';
    EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/10 > 0)+(EBookTaskVars->page/100 > 0)] = EBookTaskVars->page%10 +'0';
    EBookTaskVars->infomation.FileLongName[12 + (EBookTaskVars->page/10 > 0)+(EBookTaskVars->page/100 > 0) +1] = 0;
}


void EBook_SemInit(msg_t *msg_list)
{
    if(ShowBookSem == 0)
    {
        ShowBookSem = OSSemCreate(1);  
    }
    
    GUIToEBookWindow = (OS_EVENT*)MYOSQCreate(msg_list,10); 
}     

void EBook_ShowBookUnlock()
{ 
    OSSemPost(ShowBookSem);
}

void EBook_ShowBookLock() 
{
    INT8U err;
    OSSemPend(ShowBookSem, 0, &err);
}    

void EBook_SemExit()
{   
    INT8U err; 
    GUIToEBookWindow = MYOSQDel(GUIToEBookWindow, OS_DEL_ALWAYS, &err);
    ShowBookSem = OSSemDel (ShowBookSem, OS_DEL_ALWAYS, &err);
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -