/** ******************************************************************************
* @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);