NBModule.h服務器
#ifndef _NBMODULEFRAME_H__ #define _NBMODULEFRAME_H__ #include "total.h" enum NBModuleStat_Enum { SuccessStat = 0, WillOpClPowerStat, // 須要關機開機解決的狀態 WillResetStat, // 須要復位解決的狀態 OpreErrorStat // 操做模組錯誤屢次,解救不回來,再也不操做 }; typedef struct NBModuleData_S { char iccid[21]; // iccid char csq; // 信號質量 char RegMobileNetState; // 註冊基站狀態 1成功 0失敗 char ConnectMqttState; // mqtt鏈接狀態 1是成功 0 失敗 }NBModuleData_S; typedef struct NBModuleFrame_S { uint8_t commonfunc_num; uint8_t PowerControlNum; // 電源開關機控制次數 uint8_t MaxPowerControlNum; // 最大電源開關機次數 uint8_t ResetControlNum; // 復位次數 uint8_t MaxResetControlNum; // 容許最大的復位次數 int16_t (*GprsMqttSetUp)(struct NBModuleFrame_S *pNBModule); // 組網與mqtt創建過程 int16_t (*OpenModulePower)(void); // 開電源 int16_t (*CloseModulePower)(void); // 關電源 int16_t (*ResetModule)(void); // 復位 int16_t (*CommonFunc[6])(void); // 普通聯網過程 int16_t (*MqttConfig)(void); int16_t (*MqttOpen)(void); int16_t (*MqttSub)(void); int16_t (*MqttPub)(uint8_t *mutual_buf, uint16_t mutual_len, char *pubTopic); }NBModuleFrame_S; uint8_t NBModuleFrame_S_Init(struct NBModuleFrame_S *NBModule); extern struct NBModuleData_S g_NBModuleData; // NB模組數據導爲全局 #endif
NBModule.c網絡
#include "NBModuleFrame.h" struct NBModuleData_S g_NBModuleData; /************************************* * * Funciton Name : OpenModulePower_F * Function : 模組開機 * * *************************************/ static int16_t OpenModulePower_F(void) { return SuccessStat; } /************************************* * * Funciton Name : CloseModulePower_F * Function : 模組關機 * * *************************************/ static int16_t CloseModulePower_F(void) { return SuccessStat; } /************************************* * * Funciton Name : ResetModule_F * Function : 復位模組 * * *************************************/ static int16_t ResetModule_F(void) { return SuccessStat; } /************************************* * * Funciton Name : ATCmd_F * Function : AT命令 * * *************************************/ static int16_t ATCmd_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATEcho_F * Function : 關回顯 * * *************************************/ static int16_t ATEcho_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATICCID_F * Function : 查詢ICCID * * *************************************/ static int16_t ATICCID_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATCgreg_F * Function : 查詢注網是否成功 * * *************************************/ static int16_t ATCgreg_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATCsq_F * Function : 查詢信號質量 * * *************************************/ static int16_t ATCsq_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATMqttConfig_F * Function : 配置鏈接Mqtt的服務器IP端口、客戶端ID(NB_Client_ICCID)、 * 300keeplive、user、password、clean(1:客戶端段線時服務器丟棄客戶端信息)、encrypt(0不加密) * * *************************************/ static int16_t ATMqttConfig_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATMqttOpen_F * Function * * *************************************/ static int16_t ATMqttOpen_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATMqttSub_F * Function : *************************************/ static int16_t ATMqttSub_F(void) { return WillOpClPowerStat; } /************************************* * * Funciton Name : ATMqttPub_F * Function * *************************************/ static int16_t ATMqttPub_F(uint8_t *mutual_buf, uint16_t mutual_len, char *pubTopic) { return SuccessStat; } /************************************* * * Funciton Name : GprsMqttSetUp_F * Function : 模組網絡創建過程 * * *************************************/ static int16_t GprsMqttSetUp_F(struct NBModuleFrame_S *pNBModule) { uint8_t Fori = 0; int16_t ret = 0; pNBModule->OpenModulePower(); // 開機 pNBModule->PowerControlNum = 0; pNBModule->ResetControlNum = 0; GoExe: for ( Fori = 0; Fori < pNBModule->commonfunc_num; Fori++ ) { ret = pNBModule->CommonFunc[Fori](); if ( ret == WillOpClPowerStat ) // 須要開關機解決 { if ( pNBModule->PowerControlNum++ >= pNBModule->MaxPowerControlNum ) // 超過最大容許的開關機次數 { return OpreErrorStat; } pNBModule->CloseModulePower(); // 關機 pNBModule->OpenModulePower(); // 開機 Fori = 0; } else if ( ret == WillResetStat ) // 須要復位解決 { if ( pNBModule->ResetControlNum++ >= pNBModule->MaxResetControlNum ) // 超過最大容許的復位次數 { return OpreErrorStat; } Fori = 0; // 復位 pNBModule->ResetModule(); } } ret = pNBModule->MqttConfig(); if ( ret == WillOpClPowerStat ) { if ( pNBModule->PowerControlNum++ >= pNBModule->MaxPowerControlNum ) // 超過最大容許的開關機次數 { return OpreErrorStat; } pNBModule->CloseModulePower(); // 關機 pNBModule->OpenModulePower(); // 開機 goto GoExe; } else if ( ret == WillResetStat ) { if ( pNBModule->ResetControlNum++ >= pNBModule->MaxResetControlNum ) // 超過最大容許的復位次數 { return OpreErrorStat; } // 復位 pNBModule->ResetModule(); goto GoExe; } ret = pNBModule->MqttOpen(); if ( ret == WillOpClPowerStat ) { if ( pNBModule->PowerControlNum++ >= pNBModule->MaxPowerControlNum ) // 超過最大容許的開關機次數 { return OpreErrorStat; } pNBModule->CloseModulePower(); // 關機 pNBModule->OpenModulePower(); // 開機 goto GoExe; } else if ( ret == WillResetStat ) { if ( pNBModule->ResetControlNum++ >= pNBModule->MaxResetControlNum ) // 超過最大容許的復位次數 { return OpreErrorStat; } // 復位 pNBModule->ResetModule(); goto GoExe; } ret = pNBModule->MqttSub(); if ( ret == WillOpClPowerStat ) { if ( pNBModule->PowerControlNum++ >= pNBModule->MaxPowerControlNum ) // 超過最大容許的開關機次數 { return OpreErrorStat; } pNBModule->CloseModulePower(); // 關機 pNBModule->OpenModulePower(); // 開機 goto GoExe; } else if ( ret == WillResetStat ) { if ( pNBModule->ResetControlNum++ >= pNBModule->MaxResetControlNum ) // 超過最大容許的復位次數 { return OpreErrorStat; } // 復位 pNBModule->ResetModule(); goto GoExe; } else if ( ret == SuccessStat ) { return SuccessStat; } return OpreErrorStat; } uint8_t NBModuleFrame_S_Init(struct NBModuleFrame_S *NBModule) { uint8_t index = 0; NBModule->MaxPowerControlNum = 3; NBModule->MaxResetControlNum = 3; NBModule->PowerControlNum = 0; NBModule->ResetControlNum = 0; NBModule->CommonFunc[index++] = ATCmd_F; NBModule->CommonFunc[index++] = ATEcho_F; NBModule->CommonFunc[index++] = ATICCID_F; NBModule->CommonFunc[index++] = ATCgreg_F; NBModule->CommonFunc[index++] = ATCsq_F; //NBModule->CommonFunc[index++] = ATCMDNS_F; NBModule->OpenModulePower = OpenModulePower_F; NBModule->CloseModulePower = CloseModulePower_F; NBModule->ResetModule = ResetModule_F; NBModule->MqttConfig = ATMqttConfig_F; NBModule->MqttOpen = ATMqttOpen_F; NBModule->MqttSub = ATMqttSub_F; NBModule->MqttPub = ATMqttPub_F; NBModule->GprsMqttSetUp = GprsMqttSetUp_F; NBModule->commonfunc_num = index; return index; }
main.c框架
int main(void) { struct NBModuleFrame_S NBModule; // NB模組框架 int16_t ret = 0; memset(&NBModule, 0, sizeof(struct NBModuleFrame_S)); NBModuleFrame_S_Init(&NBModule); // 聯網過程 ret = NBModule.GprsMqttSetUp(&NBModule); if ( ret == SuccessStat ) { printf("Success\r\n"); } }
面向對象的方法將二者結合,當低耦合時,爲固有緊密耦合的元素和內容的封裝提升內聚力。C不是面嚮對象語言,能夠用於開發基於對象或面向對象的嵌入式系統。ui