• RDA 工模


    1、工模GUI如下图:

      注意两个API接口,_APP_Update_Layer()/UpdateNodeFunctionContent()

      这两个接口一个是刷新ListView,另一个刷新ListView对应的TextBox值,后面简称ListView为工模的“键”,对应的TextBox为对应的“值”,即工模为键-值对的组合。

      

      1) 刷新ListView以及TextBox值

    static   GUIResult_e _APP_Update_Layer(int NodeId)
    {
         GUIResult_e dRet = GUI_SUCCESS;
        int i=0;
        int ChildId = FactoryNode[NodeId].childID;
    
        if(ChildId==0)
            return dRet;
    
        // 检查ListView页面节点数
        int NextId =  FactoryNode[ChildId].nextID;
        int count = 1;
        while( (NextId!=0) && (count<FM_ITEMS_PER_PAGE) )
        {
            count ++;
            NextId = FactoryNode[NextId].nextID;
        }
    
        // 释放键内存
        Fee_LeftSide_List();
        
        // 开辟内存,存储ListView键
        StringList_of_LeftSide = (UINT8 **)malloc( sizeof(UINT8 *) * (FM_ITEMS_PER_PAGE+1) ); // Added 1 for End symbol
        for (i=0; i<=FM_ITEMS_PER_PAGE ; i++)
        {
            StringList_of_LeftSide[i] = (UINT8 *)malloc(sizeof(UINT8) * (MAX_TEXT_LENGTH+1));
            memcpy((void *)StringList_of_LeftSide[i], (void *)&string_last, sizeof(string_last));
        }
    
        // 清空ListView键
        GUI_FUNC_CALL( GEL_SetParam(g_fmFactorySetting_data, PARAM_STATIC_STRING, pEmptyStrings ) );
        
        // 拷贝页面节点字串,对ListView键赋值
        NextId =  ChildId;
        for(i=0; i<count; i++)
        {
            snprintf((char *)StringList_of_LeftSide[i], MAX_TEXT_LENGTH, "%s", FactoryNode[NextId].szItem);
            NextId = FactoryNode[NextId].nextID;
        }
        // 清空TextBox值
        for(i=0; i<FM_ITEMS_PER_PAGE; i++)
        {
            HWND Item_Handle;
            dRet = GEL_GetHandle(pWindowControl, nItemStart+i, &Item_Handle);
            dRet = GEL_SetParam(Item_Handle, PARAM_STATIC_STRING,String_null);
        }
        //刷新ListView键
        GUI_FUNC_CALL( GEL_SetParam(g_fmFactorySetting_data, PARAM_DYNAMIC_STRING, (void *)StringList_of_LeftSide) );
        GUI_FUNC_CALL( GEL_SetParam(g_fmFactorySetting_data, PARAM_SETNORMAL, 0) );
        //临时刷新TextBox为"-->",具体值由"UpdateNodeFunctionContent"刷新
        for(i=0; i<=FM_ITEMS_PER_PAGE; i++)
        {
            HWND FocusItem_Handle;
            dRet = GEL_GetHandle(pWindowControl, nItemStart+i, &FocusItem_Handle);
            if(i<count)
                dRet = GEL_SetParam(FocusItem_Handle, PARAM_STATIC_STRING, StringRightArrow);
            else
                dRet = GEL_SetParam(FocusItem_Handle, PARAM_STATIC_STRING,String_null);
    
            GUI_FUNC_CALL( GEL_SetParam(FocusItem_Handle, PARAM_SETNORMAL, NULL) );
            if (i<count)
                GUI_FUNC_CALL( GEL_SetParam(g_fmFactorySetting_data, PARAM_ITEM_ENABLE, &i) );
    
        }
        //获取页面节点数
        Current_Node_Count = count;
        UpdateNodeFunctionContent(ChildId,0,0);//刷新TextBox值
        return dRet;
    }

      2)刷新菜单的Focus/Disable/Item滚动状态

    static INT32 _APP_GUIOBJ_FM_FactorySetting_UpdateMenu(void)
    {
        GUIResult_e dRet = GUI_SUCCESS;
        INT32 i32Index = 0;
        UINT32 NodeId = ID_ROOT;
        HWND hItem;
        HWND hFocusItem;
        State_e nState = NORMAL_STATE;
        APP_Source_Type_t eSourceType = APP_SOURCE_MAX;
        AL_ServiceDetail_t stServInfo;
        AL_RecHandle_t hProgHdl;
        UINT32 u32ColorSystem = 0;
    
        APP_GUIOBJ_Source_GetCurrSource(&eSourceType);
        //清除所有Item聚焦
        for(i32Index=nItemStart; i32Index<=nItemEnd; i32Index++)
        {
            dRet = GEL_GetHandle(pWindowControl,i32Index, &hItem);
    
            // Get state
            GUI_FUNC_CALL( GEL_GetParam(hItem, PARAM_STATE,&nState) );
    
            if(nState == FOCUS_STATE)
            {
                GUI_FUNC_CALL(GEL_SetAnimEnable(hItem, FALSE));
                GUI_FUNC_CALL( GEL_SetParam(hItem, PARAM_SETNORMAL, NULL));
            }
        }
        //设置特定Item的Disable状态
        if(nowNodeHeadId == ID_FM_Funct_Backlight)
        {
            for(i32Index=0;(int)i32Index<Current_Node_Count;i32Index++)
            {
                NodeId = FactoryNode[nowNodeHeadId].childID + i32Index;
                if(NodeId == ID_FM_Function_BlackLight_CURRENT
                    || NodeId == ID_FM_Function_BlackLight_DUTY_VALUE)
                {
                    dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_DISABLE, (void*)&i32Index);
                    dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem);
                    dRet = GEL_SetParam(hItem,PARAM_SETDISABLED, NULL);
                }
                else if(NodeId == ID_FM_Function_BlackLight_DUTY)
                {
                    if((1 <= u16preBacklightValue) && (99 >= u16preBacklightValue))
                    {
                        dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_DISABLE, (void*)&i32Index);
                        dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem);
                        dRet = GEL_SetParam(hItem,PARAM_SETDISABLED, NULL);
                    }
                    else
                    {
                        dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_ENABLE, (void*)&i32Index);
                        dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem);
                        dRet = GEL_SetParam(hItem,PARAM_SETNORMAL, NULL);
                    }    
                }
                else
                {
                    dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_ENABLE, (void*)&i32Index);
                    dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem);
                    dRet = GEL_SetParam(hItem,PARAM_SETNORMAL, NULL);
                }
            }
        }
    
        // 设置Item的聚焦及滚动
        dRet = GEL_GetParam(g_fmFactorySetting_data, PARAM_CURRENT_INDEX, &i32Index);
        dRet = GEL_SetParam(g_fmFactorySetting_data, PARAM_SETFOCUSED, NULL);
        i32Index +=nItemStart;
        dRet = GEL_GetHandle(pWindowControl, i32Index, &hFocusItem);
        dRet = GEL_SetParam(hFocusItem, PARAM_SETFOCUSED, NULL);
    
        GUI_FUNC_CALL(GEL_SetAnimEnable(hFocusItem, FALSE)); 
        APP_GuiMgr_RegionBufferControl(&hFocusItem, 1); //设置滚动Item
        GUI_FUNC_CALL(GEL_SetAnimEnable(hFocusItem, TRUE)); 
    
        GUI_FUNC_CALL( GEL_ShowMenu(pWindow) );
        GUI_FUNC_CALL(GEL_UpdateOSD());
    
         return (UINT32)dRet;
    }

       3)菜单联动显示

        即,当前聚焦的Item发生变化时,其它Item会联动变化,例如:工模调整背光百分比是,当前电流/占空比/PWM寄存器的值是应该跟随变化的

      调用API:    UpdateNodeFunctionContent(ID_FM_Function_BlackLight_Backlight, 0, 0)

      背灯例子:

    void Factory_BackLight(BOOL bSet, BOOL path, FUNCTION_DATA *pValue, BOOL bDefault)
    {
        FUNCTION_DATA * FuncData = (FUNCTION_DATA *)pValue;    
        Backlight_t BacklightSetting;
        BacklightSetting.Backlight_total_Stage = 100;    
        static char dutyBuff[10];
        INT16 u16Pwm = 0;
        UINT32 mapValue= 0;
        if (bSet)
        {
            //调整Backlight(OSD)的值
            u16Pwm= AL_FLASH_GetBackLight();
            if (gbIsFMRightKey == TRUE)
            {
                u16Pwm = (++u16Pwm>=100)?100:u16Pwm;
    
            }
            else if (gbIsFMLeftKey == TRUE)
            {
                u16Pwm = (--u16Pwm<=0)?0:u16Pwm;
            }
            AL_FLASH_SetBackLight(u16Pwm);        
            BacklightSetting.OSD_backlight_index = u16Pwm;
            //设置Backlight
            Cmd_SetLcdBackLight(BacklightSetting);
            mapValue = CONFIG_DEFAULT_PWM_REG_MAX - (CONFIG_DEFAULT_PWM_REG_MAX - CONFIG_DEFAULT_PWM_REG_MIN)*BacklightSetting.OSD_backlight_index / BacklightSetting.Backlight_total_Stage;
            sprintf(dutyBuff,"%d - reg[%d]",u16Pwm,mapValue);
            //Backlight 显示
            Update_TypeVersion_Node(dutyBuff, FuncData->nItem);
            MID_TVFE_GetCurrDutyPWM((short unsigned int *)&(u16DutyPWM));
            //联动Item  Duty/Current/Duty Value 跟随变化,刷新包含Backlight后面的各个节点
            UpdateNodeFunctionContent(ID_FM_Function_BlackLight_Backlight, 0, 0);
        }
        else
        {
            mapValue = CONFIG_DEFAULT_PWM_REG_MAX - (CONFIG_DEFAULT_PWM_REG_MAX - CONFIG_DEFAULT_PWM_REG_MIN)*AL_FLASH_GetBackLight() / BacklightSetting.Backlight_total_Stage;
            sprintf(dutyBuff,"%d - reg[%d]",(INT32)AL_FLASH_GetBackLight(),mapValue);
            Update_TypeVersion_Node((char * ) dutyBuff, FuncData->nItem);
        }    
    }

       接口介绍:

    static GUIResult_e UpdateNodeFunctionContent(int NodeId,UINT32 u32CurrentIndex,UINT32 dEventID)
    {
        GUIResult_e dRet = GUI_SUCCESS ;
        NODE_FUNCTION * pFunc;
        FUNCTION_DATA FuncData;
        HWND FocusItem_Handle;
        dRet = GEL_GetHandle(pWindowControl, u32CurrentIndex+nItemStart, &FocusItem_Handle);
        UINT32 tmp=u32CurrentIndex;
    
        gbIsFMRightKey = (UI_EVENT_RIGHT == dEventID) ? TRUE : FALSE;
        gbIsFMLeftKey = (UI_EVENT_LEFT == dEventID) ? TRUE : FALSE;
        
        //迭代需要刷新的TextBox节点
        for(u32CurrentIndex=0; (int)u32CurrentIndex< Current_Node_Count; u32CurrentIndex++)
        {
            if(dEventID!=0)
            u32CurrentIndex = tmp;
            dRet = GEL_GetHandle(pWindowControl, u32CurrentIndex+nItemStart, &FocusItem_Handle);
    
            UINT32 nCurrNodeId = NodeId+ u32CurrentIndex;//nowNodeHeadId + u32CurrentIndex ;
            nowNodeId = nCurrNodeId;
            pFunc = FactoryNode[nCurrNodeId].pThis;
            
            //如果节点有回调,通过回调获取节点的值
            if(pFunc != NULL)
            {
                if(pFunc->type  == MENU_CTRL_TYPE_SLIDER)
                {
                    if (pFunc->MenuSettingFun)
                        (pFunc->MenuSettingFun)(FALSE, 0, (FUNCTION_DATA*)&FuncData, FALSE);
    
                }
                else if(pFunc->type  == MENU_CTRL_TYPE_RADIOBUTTON)
                {
                    FACT_RADIOBTN *pRad;
                    if (pFunc->leaves)
                    {
                        FuncData.nItem = 0;
                        FuncData.value = 0;
                        if (pFunc->MenuSettingFun)
                        {
                            (pFunc->MenuSettingFun)(FALSE,0, (FUNCTION_DATA*)&FuncData, FALSE);
                        }
                    }
                }
                else if(pFunc->type  == MENU_CTRL_TYPE_PUSHBUTTON )
                {
                    if (pFunc->MenuSettingFun)
                    {
                        if( dEventID==UI_EVENT_RIGHT|| dEventID==UI_EVENT_ENTER )
                        (*pFunc->MenuSettingFun)(TRUE, 0, &FuncData, FALSE);//注意形参TRUE,为设置节点的值
                        else
                        (*pFunc->MenuSettingFun)(FALSE, 0, &FuncData, FALSE);//注意形参FALSE,为获取
                    }
                }
                else if( MENU_CTRL_TYPE_VERSION == pFunc->type )
                {
                    FuncData.nItem = u32CurrentIndex;
                    if (pFunc->MenuSettingFun)
                    {
                        if( dEventID==UI_EVENT_RIGHT|| dEventID==UI_EVENT_ENTER)
                            (pFunc->MenuSettingFun)(TRUE,/* MAIN*/ 0, &FuncData, FALSE); 
                        else
                            (pFunc->MenuSettingFun)(FALSE,/* MAIN*/ 0, &FuncData, FALSE); 
                    }
    
                }
                else if(MENU_CTRL_TYPE_GROUPSTATICSTRINGS == pFunc->type)
                {
                    if (pFunc->MenuSettingFun)
                    {
                        (pFunc->MenuSettingFun)(FALSE,/* MAIN*/ 0, &FuncData, FALSE); // Get Value from UMF
                    }
                }
                else if(MENU_CTRL_TYPE_DAYNAMICSTRING == pFunc->type)
                {
                    FuncData.nItem = u32CurrentIndex;
                    if (pFunc->MenuSettingFun)
                    {
                        if((dEventID == UI_EVENT_RIGHT) || (dEventID == UI_EVENT_LEFT))
                        {
                            (pFunc->MenuSettingFun)(TRUE, 0, &FuncData, FALSE);
                        }
                        else
                        {
                            (pFunc->MenuSettingFun)(FALSE, 0, &FuncData, FALSE);
                        }
                    }        
    
                }
            }
            else
            {
                if(UI_EVENT_RIGHT == dEventID)
                {
                    dRet = Enter_Behavior();
                }
                else
                {
                    GUI_FUNC_CALL(GEL_SendMsg(FocusItem_Handle, WM_PAINT, 0));
                }
            }
    
            if(dEventID!=0)
            break;
        }
        return dRet;
    }
  • 相关阅读:
    postgresql 修改配置,允许外部访问
    geopandas 把 shp 文件入库到 postgis 数据库
    geopandas 生成 geojson 文件
    geopandas 生成 shp 文件
    STM32 FSMC LCD 液晶的驱动—ILI9320
    SSTV简介+常用频率表+工作原理
    CasRel 一种新的用于关系三重抽取的级联二进制标记框架
    JAVA类在JVM加载过程
    20201320第三周学习笔记
    20201320第四周学习笔记
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/7358465.html
Copyright © 2020-2023  润新知