




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
int main(void)int i;WORD wTimeoutTicks; /定义超时变量HAL_Init_ConfigureHAL();/初始化UART和定时器模式HAL_Init_Global_Interrupt_Switch(ENABLE); / 使能总中断 HAL_Timer_InitTimer0(); HAL_UART_UART0Init(UART0_BaudRate) ; /初始化UART0 8 N 1 19200 使能接收发送,使能接收中断 清g_strUart.UART0_XXX变量 HAL_UART_UART1Init(UART1_BaudRate) ; /初始化UART1 8 N 1 38400 使能接收发送,使能接收中断 清g_strUart.UART1_XXX变量 HAL_ExtInt_Init();/初始化外部8个中断处理函数memset(g_HAL_ExtInt_psCBFunc, 0, sizeof(g_HAL_ExtInt_psCBFunc) * 8);/HAL_ExtInt_SetCBPfn(6, ClearActivityEvent); /指定外部中断6的处理函数g_HAL_ExtInt_psCBFunc6 = ClearActivityEvent();/HAL_ExtInt_Arm(6, 2); /使能外部中断6为上升沿中断for(i=0;i0xfff;i+); /延时一定时间IT700Driver_Init(); /初始化IT700模块g_IT700Driver_struct.byIncomingPacketOpcode = 0;g_IT700Driver_struct.byIncomingPacketType = 0;g_IT700Driver_struct.pOnIncomingDataPacket = NULL;g_IT700Driver_struct.wInLength = 0;g_IT700Driver_struct.wInPLIdx = 0;g_IT700Driver_struct.strInData.bInDataRxFlag = FALSE;g_IT700Driver_struct.strInData.wIncomingDataPacketLength = 0;g_IT700Driver_struct.strInResp.bInRespRxFlag = FALSE;g_IT700Driver_struct.byRxState = eIT700DRIVER_RX_STATES_ATTN;HAL_UART_UART1_SetOnRxByteCB(IT700Driver_CB_OnRxByte); /:设定指针到进入的数据CB函数 HAL_Timer_StartTimer0(0x00,HAL_TIMER_CLOCK_DIV_1024);/ 启动定时器Timer0 时钟为fc/1024 = 3.6864M/1024,一个时间TICK约为71msNLMngHandler_Init();/初始化NL管理器函数g_NLMngHandler_struct.wNLMngIncomingBufferLength = 0; g_NLMngHandler_struct.bConnectedToNC = FALSE; g_NLMngHandler_struct.bAdmissionRequest = FALSE; g_NLMngHandler_struct.bNetworkAddressAssigned = FALSE;#if STATION_TYPE = REMOTE_METERIT700Driver_SetOnIncomingPacketPointerCB(RS_CB_OnIncomingDataPkt); /设定指针到进入数据包CB函数 仅RS处理函数g_IT700Driver_struct.pOnIncomingDataPacket = RS_CB_OnIncomingDataPkt;#elseIT700Driver_SetOnIncomingPacketPointerCB(NC_CB_OnIncomingDataPkt); /设定指针到进入数据包CB函数 仅NC处理函数g_IT700Driver_struct.pOnIncomingDataPacket = NC_CB_OnIncomingDataPkt;#endifInitModem();/初始化MODEMBOOL bSuccess = TRUE;BOOL bResetRequired = TRUE;WORD wReadParam;while(bResetRequired) / initialization loopbResetRequired = FALSE;bSuccess = IT700Driver_bReset_PIM_HW();/IT700硬件复位和等待复位响应,成功返回TRUE,失败返回FALSEBOOL IT700Driver_bReset_PIM_HW(void) WORD i;WORD wTimeoutTicks;BOOL bSuccess = TRUE;g_IT700Driver_struct.bResetReceived = FALSE;s_ClearIncomingRspPacket(); /g_IT700Driver_struct.strInResp.bInRespRxFlag = FALSE;/g_IT700Driver_struct.byIncomingPacketOpcode = 0;/g_IT700Driver_struct.byIncomingPacketType = 0;HAL_IO_togglePin/ 清 RESET pin(PIM_RESET_PORT,PIM_RESET_PIN,OUT,CLEAR);for(i=0;i 8);sbyCommand5+ 0 = byTable; / 设定 table index:0x06sbyCommand5+ 1 = (BYTE)(wIndex & 0xff); / 设定 parameter index: 95sbyCommand5 + 2 = (BYTE)(wIndex 8);sbyCommand5 + 3 = 1; / 只有一个参数读取 设定参数计数到 1sbyCommand5+ 4 = 0;if(s_bSendWaitForResponse(sbyCommand, sizeof(sbyCommand) /发送包和等待响应 成功返回TRUE.否则返回FALSEstatic BOOL s_bSendWaitForResponse(PBYTE pbyData, WORD wLength)WORD wTimeoutTicks;BYTE byCheckSum;s_ClearIncomingRspPacket();/释放传入响应包缓存byCheckSum=s_byCalcCheckSum(&pbyData1, wLength - 1);/计算校验和 字节累加和 MOD 256HAL_UART_UART1_Transmit(pbyData, wLength);/通过UART1发送数据包HAL_UART_UART1_Transmit(&byCheckSum, 1); / 发送校验和wTimeoutTicks = IT700Driver_wCalculateTimeoutValue(60); / 计算超时ticks: 60 while( (!g_IT700Driver_struct.strInResp.bInRespRxFlag) | (g_IT700Driver_struct.byIncomingPacketOpcode != pbyDataeHOST_EI_IDX_OPCODE) ) / 等待包接收,并验证正确命令ID if(IT700Driver_bIsTimeoutOccured(wTimeoutTicks) return FALSE; / 超时返回FALSE return TRUE;*pwParameter = (WORD)g_IT700Driver_struct.strInResp.pbyInRespBuffer1 + (WORD)g_IT700Driver_struct.strInResp.pbyInRespBuffer1 + 1 * 256;/拷贝要求的参数elsebSuccess = FALSE; / 如果超时发生返回FALSEs_ClearIncomingRspPacket(); /传入数据包解析释放缓存return bSuccess;if ( (bSuccess) & (wReadParam != 0) ) bSuccess = IT700Driver_bSetPredefined(0);BOOL IT700Driver_bSetPredefined(BYTE byBand) / 设定modem预定义BAND参数(DLL,NL) 0FCC, 1ARIB, / 2CA, 3CA2/CB, 4CA3BOOL bSuccess = TRUE;BYTE sbyCommand2+ 5;/准备传出数据包的缓存IT700Driver_PrepareHeader(0x40,4,sbyCommand); /准备包头 0xCA ,0x04 ,0x00,0x00,0x40 / 设置参数表:sbyCommand0 + 5 = 0xFF; / 常数- all parameterssbyCommand1 + 5 = byBand;/ 0FCCif(s_bSendWaitForResponse(sbyCommand, sizeof(sbyCommand) /数据包发送和等待响应,成功为TRUEif(g_IT700Driver_struct.strInResp.pbyInRespBuffer0 != TRUE)bSuccess = FALSE; / 如果接收到的应答为FALSE,则返回FALSEelsebSuccess = FALSE;s_ClearIncomingRspPacket();/传入数据包解析释放缓存return bSuccess;bResetRequired = TRUE;#if STATION_TYPE = NETWORK_CONCENTRATOR /如果类型为NC/ 设定NC操作模式 /if(bSuccess)bSuccess = IT700Driver_bGetParam(&wReadParam, 49,0x06); /获取一个MODEM参数的操作模式,成功返回TRUEif ( (bSuccess) & (wReadParam != 3) )bSuccess = IT700Driver_bSetParam(WORD)3, 49, 0x6); /设定站的模式为BS操作模式改变请求bSuccess &= IT700Driver_bSetSerialNum(PBYTE)sbyNcSNs); /设定BS的序列号码const BYTE sbyNcSNsNLMNG_SN_SIZE = 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;BOOL IT700Driver_bSetSerialNum(PBYTE pbySN)BOOL bSuccess = TRUE;BYTE sbyCommand3 + 16 + 5; /准备传出数据包的缓存IT700Driver_PrepareHeader(0x41, 2+ 3 + 16,sbyCommand); /准备包头sbyCommand5+ 0 =0x5;/ 设定表 index:sbyCommand5+ 1 = 0xAB;/设定命令特殊有效代码sbyCommand5+ 2 = 0xBA;memcpy(&sbyCommand5 + 3,pbySN,16);/拷贝BS序列号if(s_bSendWaitForResponse(sbyCommand, sizeof(sbyCommand) /数据包发送和等待响应,成功为TRUEif(g_IT700Driver_struct.strInResp.pbyInRespBuffer0 != TRUE)bSuccess = FALSE; / return false if FALSE answer receivedelsebSuccess = FALSE;s_ClearIncomingRspPacket();/传入数据包解析释放缓存return bSuccess;bResetRequired = TRUE;/ 设定 admission mode /if(bSuccess)bSuccess =IT700Driver_bGetParam(&wReadParam, 60,0x6);/设定BS承认模式Admission Application Mode,这步操作必须改变,默认为承认模式if( (bSuccess) & (wReadParam != 0x03) )/ admission mode change requiredbSuccess = IT700Driver_bSetParam(WORD)0x03, 60, 0x6);/设定一个信号MODEM参数/设定工厂默认值BOOL IT700Driver_bSetParam(WORD wParameter, WORD wIndex, BYTE byTable)BOOL bSuccess = TRUE;BYTE sbyCommand5 + 5;/准备传出包的缓存IT700Driver_PrepareHeader(0x41,2+ 5,sbyCommand); /准备包头0xCA ,0x07,0x00,0x00,0x41 sbyCommand5+ 0 = byTable; / set table index:sbyCommand5+ 1 = (BYTE)(wIndex & 0xff); / set parameter index:sbyCommand5 + 2 = (BYTE)(wIndex 8);sbyCommand5+ 3 = (BYTE)(wParameter & 0xff);sbyCommand5+4 = (BYTE)(wParameter 8);if(s_bSendWaitForResponse(sbyCommand, sizeof(sbyCommand)/发送包和等待响应,成功返回TRUEif(g_IT700Driver_struct.strInResp.pbyInRespBuffer0 != TRUE)bSuccess = FALSE; / return false if FALSE answer receivedelsebSuccess = FALSE;s_ClearIncomingRspPacket();传入数据包解析释放缓存return bSuccess;bResetRequired = TRUE;/ 设定 NC Database size /if (bSuccess) bSuccess = IT700Driver_bGetParam(&wReadParam, 91, 0x6);/获取一个MODEM参数的操作模式,成功返回TRUEif( (bSuccess) & (wReadParam != 10) )bSuccess = IT700Driver_bSetParam(WORD)10, 91, 0x6);/NC数据库改变请求bResetRequired = TRUE;#else /Remote meter station/ 设定RS operation mode /if(bSuccess)bSuccess = IT700Driver_bGetParam(&wReadParam, 49, 0x06);/获取一个MODEM参数的操作模式,成功返回TRUEif (wReadParam != 0)/ Set station mode to RS/ operation mode change requestedbSuccess = IT700Driver_bSetParam(WORD)0, 49, 0x06); /RS操作模式改变请求,成功返回TRUEbSuccess &= IT700Driver_bSetSerialNum(BYTE*)sbyApprovedRsSNs0); /设定RS的序列号码,成功返回TRUEconst BYTE sbyApprovedRsSNsNLMNG_SN_LIST_SIZENLMNG_SN_SIZE= 0x04,0x54,0x00,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;bResetRequired = TRUE;#endif/ 设置 logical network size /if (bSuccess)bSuccess =IT700Driver_bGetParam(&wReadParam, 56, 0x06); /获取一个MODEM逻辑网络大小,成功返回TRUEif( (bSuccess) & (wReadParam != 10) )bSuccess = IT700Driver_bSetParam(WORD)10, 56, 0x06); /逻辑网络大小改变请求bResetRequired = TRUE;/if (bResetRequired)IT700Driver_bSaveParameters(); /发送保存参数命令BOOL IT700Driver_bSaveParameters(void)BOOL bSuccess = TRUE;BYTE sbyCommand5+ 1; /准备命令缓存IT700Driver_PrepareHeader(0x43, 2 + 1, sbyCommand); /准备命令头0Xca ,0x03,0x00,0x00,0x43sbyCommand5 + 0 = 0xFF; / 常数if(s_bSendWaitForResponse(sbyCommand, sizeof(sbyCommand) /发送数据包和等待响应,成功返回TRUEif(g_IT700Driver_struct.strInResp.pbyInRespBuffer0 != TRUE)bSuccess = FALSE; / return FALSE if CMD RES is FALSEelsebSuccess = FALSE;s_ClearIncomingRspPacket(); /传入数据包解析释放缓存return bSuccess;/ end while loopif(bSuccess)HAL_IO_TurnOnGreen();/绿灯ONHAL_IO_TurnOffRed();/红的 OFFbSuccess = IT700Driver_bGoOnline();/发送Go Online 命令BOOL IT700Driver_bGoOnline(void) BOOL bSuccess = TRUE; if(s_bSendWaitForResponse(sbyGoOnlineCmdDY, sizeof(sbyGoOnlineCmdDY) /发送包和等待响应,成功返回TRUE/BYTE sbyGoOnlineCmdDY = 0xCA,02,00,0,0x22; if(g_IT700Driver_struct.strInResp.pbyInRespBuffer0 != TRUE) bSuccess = FALSE; / fail if response is FALSE else bSuccess = FALSE; s_ClearIncomingRspPacket();/传入数据包解析释放缓存 return bSuccess;elseHAL_IO_TurnOnRed();/红灯 ONHAL_IO_TurnOffGreen();/绿灯 OFFif (bSuccess)HAL_UART_UART0_ShowText(ONLINErn);/发送字符”ONLINE”到PC显示wTimeoutTicks = IT700Driver_wCalculateTimeoutValue(140);/计算超时值,为140 tickfor( ; ; )/ NL management:/ 1. Check if there is incoming NL management packet pending/ 2. Check if there admission request pendingNLMngHandler_ManageNLMng();void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火锅餐饮行业消费者需求变化与市场趋势研究报告
- 2025年文化旅游演艺综合体项目投资可行性及创新实践
- 门吊安全培训知识课件
- 高能电子直线加速器辐照加工及物流中心基地项目环境影响报告表
- 2025年4D打印技术的应用前景探索
- 年产不锈钢水槽10万套、下水件12万件技改扩建项目环评报告表
- 2025年操作系统考试试题及答案
- 2025年人流综合征的试卷及答案
- 2025评估咨询合同范本
- 斗山智能工程解决方案(3篇)
- 货运平台项目可行性研究报告
- 脚手架废弃物的分类与处理
- 《运动医学与康复》课件
- 河北建投集团招聘笔试题库2025
- 2025年自建房施工合同书 (包工不包料 C款)
- (高清版)DB33∕T 715-2018 公路泡沫沥青冷再生路面设计与施工技术规范
- 军事心理战试题及答案
- 托育园管理制度
- 2025年北京市第一次普通高中学业水平合格性考试历史试题(含答案)
- 2025年江西省高职单招文化统一考试真题及答案(网络版)
- 检验科消防安全知识培训
评论
0/150
提交评论