• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            C++分析研究  
            C++
            日歷
            <2014年1月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678
            統(tǒng)計(jì)
            • 隨筆 - 92
            • 文章 - 4
            • 評(píng)論 - 4
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             
              C 語(yǔ)言表驅(qū)動(dòng)動(dòng)態(tài)加載應(yīng)用實(shí)例
             
               目前手機(jī)終端功能越來(lái)越強(qiáng)大,客戶需求也是各種各樣,而且對(duì)于同一話機(jī)可能在不同的時(shí)間地點(diǎn),要求的話機(jī)功能也不一樣,如何能夠通過(guò)一種遠(yuǎn)程的方式
             
               調(diào)制話機(jī)功能,也成為各廠商的一個(gè)難題,介于此,產(chǎn)生了一種通過(guò) 命令+數(shù)據(jù) 修改終端參數(shù)的一種方式出現(xiàn)了。如何設(shè)置,設(shè)計(jì)公司機(jī)密,此處不便透露,
             
               本文的重點(diǎn)在于描述,實(shí)現(xiàn)這個(gè)功能的一個(gè)重點(diǎn)技術(shù)應(yīng)用,C 中的表驅(qū)動(dòng)應(yīng)用及鏈表應(yīng)用。托福答案
             
               廢話少說(shuō),先做準(zhǔn)備工作。
             
               要處理的數(shù)據(jù)為 命令+ 數(shù)據(jù) 那么定義函數(shù)如下:
             
               typedef NMCMD_RETURN (* COMMAND_FUNCTION)(C_UINT16 cmd_id, const C_CHAR * p_cmd_data, C_UINT8 data_len);
             
               其中 cmd_id 為命令p_cmd_data 為數(shù)據(jù)data_len 為數(shù)據(jù)長(zhǎng)度。托福改分
             
               定義結(jié)構(gòu)體 用來(lái)擴(kuò)展不同功能模塊的處理,可根據(jù)應(yīng)用來(lái)增加功能模塊 如:加密卡處理,鎖機(jī)鎖卡處理,安防處理,計(jì)費(fèi)處理等。托福答案
             
               /*-----------------------------------------------------------------------------
             
               * 文件_數(shù)據(jù)類(lèi)型定義
             
               *-----------------------------------------------------------------------------*/
             
               typedef struct stnmcmd
             
               {
             
               struct stnmcmd *pNext; /* 鏈表*/
             
               COMMAND_FUNCTION fProc; /* 指向下一個(gè)*/
             
               }XNNM_CMDPROC;
             
               定義全局 變量 指向鏈表頭
             
               static XNNM_CMDPROC *m_nmcmdproc = C_PNULL;
             
               定義不同命令對(duì)應(yīng)的處理函數(shù)
             
               //命令與命令處理函數(shù)映射結(jié)構(gòu)
             
               typedef struct
             
               {
             
               C_UINT16 cmd_id; //命令
             
               COMMAND_FUNCTION cmd_fun; //命令處理函數(shù)
             
               }NMCMD_FUNCTION;
             
               下面是基本框架函數(shù)實(shí)現(xiàn) 往鏈表中添加模塊命令處理函數(shù)
             
               /*---------------------------------------------------------------------------
             
               * 函數(shù)名稱: xnnm_loadproc
             
               * 功能描述: 加載處理器
             
               *
             
               * 輸入?yún)?shù): COMMAND_FUNCTION fProc // 處理器
             
               * 輸出參數(shù): 無(wú)
             
               * 返 回 值:
             
               *
             
               * 歷史紀(jì)錄:
             
               * 修改人 日期 日志
             
               * 2010-7-9
             
               *---------------------------------------------------------------------------*/
             
               C_UINT16 xnnm_LoadProc( COMMAND_FUNCTION fProc )
             
               {
             
               XNNM_CMDPROC *pNew = C_PNULL;
             
               if( fProc == C_PNULL )
             
               {
             
               return C_FALSE;
             
               }
             
               pNew = NM_MALLOC( sizeof(*pNew) );
             
               if( pNew == C_PNULL )
             
               {
             
               return C_FALSE;
             
               }
             
               memset( pNew, 0x00, sizeof(*pNew) );
             
               pNew->fProc = fProc;
             
               pNew->pNext = m_nmcmdproc;
             
               m_nmcmdproc = pNew;
             
               return C_TRUE;
             
               }
             
               將命令及數(shù)據(jù)傳入進(jìn)行處理
             
               /*---------------------------------------------------------------------------
             
               * 函數(shù)名稱: xnnm_ExecProc
             
               * 功能描述: 執(zhí)行處理器
             
               *
             
               * 輸入?yún)?shù):
             
               * 輸出參數(shù):
             
               * 返 回 值:
             
               *
             
               * 歷史紀(jì)錄:
             
               * 修改人 日期 日志
             
               * 2010-7-9
             
               *---------------------------------------------------------------------------*/
             
               C_UINT16 xnnm_ExecProc( C_UINT16 cmd_id, const C_CHAR * p_cmd_data, C_UINT8 data_len )
             
               {
             
               XNNM_CMDPROC *pList = m_nmcmdproc;
             
               while( pList )
             
               {
             
               if( pList->fProc( cmd_id, p_cmd_data, data_len ) == RET_NMCMD_SUCCESS )
             
               {
             
               break;
             
               }
             
               pList = pList->pNext;
             
               }
             
               return C_TRUE;
             
               }
             
               下面以鎖機(jī)鎖卡部分功能來(lái)實(shí)現(xiàn)鎖機(jī)鎖卡模塊命令處理函數(shù)應(yīng)用,加深對(duì)此框架的理解。
             
               鎖pin碼命令處理函數(shù)
             
               static NMCMD_RETURN nmcmd_lock_pin(C_UINT16 cmd_id, const C_CHAR * p_cmd_data, C_UINT8 data_len)
             
               {
             
               if ((data_len < 1) || (data_len > 2) || (XINO_IsNumStr(p_cmd_data, data_len) == C_FALSE))
             
               {
             
               return RET_NMCMD_INVALID_DATA;
             
               }
             
               // 根據(jù)數(shù)據(jù)內(nèi)容做相應(yīng)的處理begin
             
               if(XINO_STR2INT((const C_CHAR *)p_cmd_data, data_len) == 0)
             
               {
             
               locknv_enable_pin( 0 );
             
               }
             
               else
             
               {
             
               locknv_enable_pin( 1 );
             
               }
             
               // 根據(jù)數(shù)據(jù)內(nèi)容做相應(yīng)的處理end
             
               return RET_NMCMD_SUCCESS;
             
               }
             
               /*-----------------------------------------------------------------------------*/
             
               //鎖機(jī)鎖卡功能模塊 命令 與命令處理函數(shù)對(duì)應(yīng)表
             
               static const NMCMD_FUNCTION m_acstcmd[] =
             
               {
             
               {ID_NMCMD_LOCK_PIN, nmcmd_lock_pin }, //修改開(kāi)機(jī)自動(dòng)鎖Pin碼
             
               {ID_NMCMD_ENABLE_RAND_PIN, nmcmd_enable_rand_pin }, //修改是否啟用隨機(jī)PIN碼
             
               {ID_NMCMD_SET_FIXED_PIN , nmcmd_fix_pin }, /* 設(shè)置固定PIN碼*/
             
               {ID_NMCMD_INIT_PIN, nmcmd_init_pin }, //修改初始PIN碼
             
               {ID_NMCMD_LOCK_IMSI, nmcmd_lock_imsi }, //修改開(kāi)機(jī)自動(dòng)綁定IMSI號(hào)
             
               {ID_NMCMD_CELL_LOCKED, nmcmd_cell_locked }, //修改是否鎖定CELL
             
               {ID_NMCMD_CELL_AUTOINC, nmcmd_cell_autoinc }, //修改CELL是否自動(dòng)增長(zhǎng)
             
               {ID_NMCMD_CELL_LOCK_MAX, nmcmd_cell_lock_max }, //修改CELL最大鎖定個(gè)數(shù)
             
               {ID_NMCMD_CLEAN_CELL_LIST, nmcmd_clean_cell_list }, //清除CELL鎖定列表
             
               {ID_NMCMD_CELL_LIST_TYPE, nmcmd_cell_list_type }, //鎖定CELL類(lèi)型- 黑白名單
             
               {ID_NMCMD_LOCK_CELL_APPEND, nmcmd_lock_cell_append }, //添加鎖定的CELL
             
               {ID_NMCMD_LAC_LOCKED, nmcmd_lac_locked }, //修改是否鎖定lAC
             
               {ID_NMCMD_LAC_LIST_TYPE, nmcmd_lac_list_type }, //鎖定lac類(lèi)型- 黑白名單
             
               {ID_NMCMD_LAC_AUTOINC, nmcmd_lac_autoinc }, //修改lac是否自動(dòng)增長(zhǎng)
             
               {ID_NMCMD_LAC_LOCK_MAX, nmcmd_lac_lock_max }, //修改lac最大鎖定個(gè)數(shù)
             
               {ID_NMCMD_CLEAN_LAC_LIST, nmcmd_clean_lac_list }, //清除lac鎖定列表
             
               {ID_NMCMD_LOCK_LAC_APPEND, nmcmd_lock_lac_append }, //添加鎖定的lac
             
               /* 鎖運(yùn)營(yíng)商*/
             
               {ID_NMCMD_LOCK_SP_CLEAN, nmcmd_lock_sp_clean }, //鎖定運(yùn)營(yíng)商表-清除
             
               {ID_NMCMD_LOCK_SP_APPEND_MODIFY, nmcmd_lock_sp_append_modify }, //鎖定運(yùn)營(yíng)商表-添加/修改
             
               //{ID_NMCMD_LOCK_SP_DELETE, nmcmd_lock_sp_delete }, //鎖定運(yùn)營(yíng)商表-刪除
             
               {C_PNULL, C_PNULL },
             
               };
             
               其中ID_NMCMD_LOCK_PIN ID_NMCMD_CLEAN_LAC_LIST 等 為定義的命令
             
               nmcmd_lock_pin nmcmd_enable_rand_pin 等為 命令對(duì)應(yīng)的處理函數(shù)。
             
               /*-----------------------------------------------------------------------------
             
               * 全局_函數(shù)實(shí)現(xiàn)
             
               *-----------------------------------------------------------------------------*/
             
               /*---------------------------------------------------------------------------
             
               * 函數(shù)名稱: locknm_handlercmd
             
               * 功能描述: 處理器 處理鎖機(jī)鎖卡根據(jù)命令查找對(duì)應(yīng)樹(shù)立函數(shù)
             
               *
             
               * 輸入?yún)?shù):
             
               * 輸出參數(shù):
             
               * 返 回 值:
             
               *
             
               * 歷史紀(jì)錄:
             
               * 修改人 日期 日志
             
               * 2010-7-9
             
               *---------------------------------------------------------------------------*/
             
               NMCMD_RETURN locknm_handlercmd(C_UINT16 cmd_id, const char * p_cmd_data, C_UINT8 data_len)
             
               {
             
               NMCMD_RETURN bRet = RET_NMCMD_FAIL;
             
               C_UINT16 nTableSize = sizeof( m_acstcmd ) /sizeof(m_acstcmd[0]);
             
               NMCMD_FUNCTION *pTable = m_acstcmd;
             
               C_UINT16 i = 0;
             
               XINO_TRACE_LOW("[xjp] locknm_handlercmd enter");
             
               for( i = 0; i < nTableSize; i++ )
             
               {
             
               if( ( pTable[i].cmd_id == cmd_id ) && ( pTable[i].cmd_fun != C_PNULL ) )
             
               {
             
               /* 處理成功*/
             
               pTable[i].cmd_fun( cmd_id, p_cmd_data, data_len );
             
               bRet = RET_NMCMD_SUCCESS;
             
               break;
             
               }
             
               }
             
               XINO_TRACE_LOW("[xjp] locknm_handlercmd leave");
             
               return bRet;
             
               }
             
               開(kāi)機(jī)初始化時(shí) 調(diào)用lock_init_proc 加載鎖機(jī)鎖卡命令處理函數(shù)locknm_handlercmd 到鏈表中。
             
               C_VOID lock_init_proc( C_VOID )
             
               {
             
               /* 加載命令處理*/
             
               xnnm_LoadProc(locknm_handlercmd); /* 加載開(kāi)機(jī)處理器*/
             
               }
             
               命令接收處調(diào)用 xnnm_ExecProc( C_UINT16 cmd_id, const C_CHAR * p_cmd_data, C_UINT8 data_len ) 進(jìn)行處理。
             
               如果有新增一個(gè)模塊
             
               需要完成的工作就是
             
               1.新增 命令與函數(shù)對(duì)應(yīng)關(guān)系表 本例為 static const NMCMD_FUNCTION m_acstcmd[] =
             
               2.新增 根據(jù)命令查找處理函數(shù) 本例為 NMCMD_RETURN locknm_handlercmd(C_UINT16 cmd_id, const char * p_cmd_data, C_UINT8 data_len)
             
               3. 新增相應(yīng)命令處理函數(shù), 本例為 static NMCMD_RETURN nmcmd_lock_pin(C_UINT16 cmd_id, const C_CHAR * p_cmd_data, C_UINT8 data_len)
             
               4. 在終端初始化部分加載根據(jù)命令查找對(duì)應(yīng)處理函數(shù) 本例為C_VOID lock_init_proc( C_VOID )
             
             
            posted on 2013-09-08 09:53 HAOSOLA 閱讀(269) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開(kāi)獎(jiǎng) PK10開(kāi)獎(jiǎng)
            亚洲欧洲久久久精品| 99久久国产免费福利| 国产伊人久久| 99久久免费国产特黄| 久久午夜夜伦鲁鲁片免费无码影视| 久久精品人人做人人爽97| 国产精品美女久久福利网站| 久久婷婷五月综合色99啪ak| 国产成人久久777777| 国产精品美女久久久免费| 日本三级久久网| 岛国搬运www久久| 精品国产91久久久久久久a| 国内精品伊人久久久久影院对白| 久久精品人人做人人爽电影| 久久久精品午夜免费不卡| 久久精品成人免费网站| 亚洲精品成人网久久久久久| 一本一本久久A久久综合精品| 色诱久久av| 久久这里都是精品| 伊人久久亚洲综合影院| 国产一区二区久久久| 久久综合噜噜激激的五月天| 99久久精品午夜一区二区| 99精品久久精品一区二区| 国产精品熟女福利久久AV| 久久久精品国产Sm最大网站| 欧美久久久久久| 精品久久久无码人妻中文字幕豆芽 | 久久久久久久综合日本亚洲| 久久综合亚洲欧美成人| 久久―日本道色综合久久| 国产精品久久久久久久午夜片 | 狠狠色丁香婷婷综合久久来来去 | 青青草原综合久久大伊人精品| Xx性欧美肥妇精品久久久久久| 久久亚洲AV无码精品色午夜麻豆| 国产午夜免费高清久久影院| 色综合久久综精品| 一本久久a久久精品vr综合|