背景:
今天主要工作就是coding
代码主要是发送AT指令,实现连接MQTT流程。
要做到可复用性强,可读性高,方便后期维护和修改参数。
代码:
//配置连接参数,客户端ID用户名密码,遗嘱主题和信息
int N58_MQTT_CONN_AND_WILLPARAM()
{
int step=0,rechecktcpcount=0;
char temp[100],temp1[100],temp2[10];
TSysPubSettingData *ppubsetting=GetSysPubSetting();
MQTT_RxBuffClear();
mqttData.Midata.istate = 0;
mqttData.Midata.ReSendcount= 0;
mqttData.Midata.ACKtime = 0;
memset(temp,0,100);
memset(temp1,0,100);
memset(temp2,0,10);
sprintf(temp,"\"%s\",\"%s\",\"%s\"\r\n",ppubsetting->MQTTSetting.ClientID,ppubsetting->MQTTSetting.MQTTUserName,ppubsetting->MQTTSetting.MQTTPassword);
sprintf(temp1,"\"%s\",\"%s\"\r\n","willtopic","Client is offline");
sprintf(temp2,"OK");
while(1)
{
switch(step)
{
case 0:
{
do{
if(rechecktcpcount<3){
if(GetTickCount()-mqttData.Midata.ACKtime>1000){
sprintf(pmqttatrest,"%s%s","AT+MQTTCONNPARAM=",temp); //配置连接参数,客户端ID,用户名,密码
MQTT_LOG_OUT("AT Send:%s",pmqttatrest);
MQTT_SendChar(pmqttatrest,strlen(pmqttatrest));
rechecktcpcount++;
mqttData.Midata.ACKtime = GetTickCount();
}
}else
return -1;
}while(MQTT_AT_RevDeal("OK",NULL,300));
mqttData.Midata.ReSendcount= 0;
mqttData.Midata.ACKtime = 0;
step = 1;
break;
}
case 1:
{
do{
if(rechecktcpcount<3){
if(GetTickCount()-mqttData.Midata.ACKtime>1000){
sprintf(pmqttatrest,"%s%s","AT+MQTTWILLPARAM=0,1,",temp1); //配置遗嘱主题,遗嘱信息
MQTT_LOG_OUT("AT Send:%s",pmqttatrest);
MQTT_SendChar(pmqttatrest,strlen(pmqttatrest));
rechecktcpcount++;
mqttData.Midata.ACKtime = GetTickCount();
}
}else
return -1;
}while(MQTT_AT_RevDeal("OK",NULL,300));
return 1;
}
}
}
}
总结:
以上是我其中,配置客户端ID,用户名,密码,遗嘱主题和信息的通用函数,
其他流程大都复用这个基本函数,其中可以做到重连机制,进入下一个阶段的返回值判断,还有参数结构体化,方便管理和维护,参数可视化,可读性高。
这两天为了实现上次分享的流程,疯狂Coding!
继续完善,等项目完成,分享实战代码!有问题可以留言