/** ****************************************************************************** * @file AT_Module.h * @author 度云未来 DOIOT * @brief 针对公司模块AT指令的处理库 ****************************************************************************** * @attention *

© Copyright (c) 2019 成都度云未来 * All rights reserved.

* 注意:本程序针对cubemx 生成的hal库程序快速开发 * 环境:keil5.0 * STM32Cube FW_F1 V1.8.0 ********************************************************************************/ //#define Ask_arry_size 2 #define Ask_arry_len 20 //[Ask_arry_size][Ask_arry_len] typedef struct{ /*发送的指令 */ char *SEND_CMD; /*应该响应的指令 */ char *ASK[Ask_arry_len]; /*需要校验的指令数 */ uint32_t crc_size; /*指令等待超时时间*/ uint32_t timeout; /*重发次数*/ uint32_t REF_Count; /*失败时要跳转的指令位置*/ uint32_t jump; /*支持注册一个发送前奏回调函数*/ void (*BeforeCpltCallback)(); /*支持注册一个发送且校验完成完成回调函数,参数默认为rx_buff*/ void (*AfterCpltCallback)(char *rx_buff); /*支持注册一个错误处理校验函数,参数默认为rx_buff*/ void (*ErrorCpltCallback)(char *rx_buff); /*完成后延时*/ uint32_t delay_time; }AT_CMD; /*发送指令结构体*/ /*开模组长度char数组的宏*/ #if 0 #define MODULE_RDA_MAXlen 128 #define rxbuff(name) char(name)[MODULE_RDA_MAXlen]={0} #define clear(name) memset(name,0,MODULE_RDA_MAXlen) #else #define MODULE_RDA_MAXlen 160 #define rxbuff(name) char(name)[MODULE_RDA_MAXlen]={0} #define clear(name) memset(name,0,MODULE_RDA_MAXlen) #endif /**@brief 开始启动AT任务*/ uint8_t AT_TASK_START(AT_CMD task[],uint8_t Size); #define cmd_length 256 /*响应指令最大长度*/ /**@brief 发送且阻塞读取校验*/ uint8_t Module_SEND_CRC(char* send_cmd,char *ack_str,uint32_t overtime); /**@brief 发送且阻塞读取校验,支持多组参数*/ uint8_t Module_SEND_A_CRC(char* send_cmd,char cmd_arry[][cmd_length],uint8_t arry_size,uint8_t crc_size); /**@brief 阻塞读取并校验*/ uint8_t Module_Read_A_CRC(char cmd_arry[],uint32_t overtime); /**@brief 阻塞轮询,校验成功后返回*/ uint8_t AT_CMD_Polling(char *send_cmd,char*ack,uint32_t Polling_delay,uint32_t overtime); /*-字符处理函数------【旧版】---------------------------------------------------------------------------------*/ /**@brief 以字符包裹为标志提取子串*/ uint8_t AT_GET_Data(char * buff,uint8_t * get_data,char*sign,uint8_t Number_of_groups); /**@brief 以子串包裹为标志提取子串*/ uint8_t AT_GET_Data_2Param(char * buff,uint8_t get_data[],char*head,char*tail); /**@brief 把标志位的子串替换为要替换的子串*/ uint8_t AT_Data_Replace(char buff[],char *str1, char *str2); /**@brief AT_GET_Data_Param_number :指定的标志位开始,提取后面的数据,直到遇到\r,\n,*/ uint8_t AT_GET_Data_Param(char * buff,uint8_t get_data[],char*head); /**@brief AT_Extract_numbers:把导入的数组提纯为纯数字*/ uint8_t AT_Extract_numbers(char buff[]); /**@brief AT_Extract_numbers :导入的数组提纯为纯字符和数字*/ uint8_t AT_Extract_numbers_letters(char buff[]); /**@brief AT_Remove_spaces :去掉空字符,\r,\n,space */ uint8_t AT_Remove_spaces(char buff[]); #define HAL_Delay(x) #define AT_INFO(fmt,arg...) //trace_otp_trace1(uart_msg_send, 4, fmt, ##arg); //printf("<<-EEPROM-INFO->> "fmt"\n",##arg) #define AT_ERROR(fmt,arg...) //printf("<<-EEPROM-ERROR->> "fmt"\n",##arg) #define AT_DEBUG(fmt,arg...) /*do{\ if(EEPROM_DEBUG_ON)\ printf("<<-EEPROM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\ }while(0)*/ /*调试打印 */ #define debug_printf(fmt,arg...) printf("<<-at_debug_printf->> "fmt"\r\n",##arg) /*往模组打印*/ #define module_printf(fmt,arg...) trace_otp_trace1(uart_msg_send, UART_ME3616, fmt, ##arg); int Module_Blocking_Read(char *buffer, u32 timeout);