Files

1136 lines
36 KiB
C
Raw Permalink Normal View History

/********************************** (C) COPYRIGHT ******************************
* File Name : MQTT_Sub.c
* Author : WCH
* Version : V1.0
* Date : 2018/12/01
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP/IP<EFBFBD><EFBFBD>MQTTЭ<EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>ٶȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* (1)<EFBFBD><EFBFBD>CH579 Examples by KEIL;
* (2)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ,115200bps,<EFBFBD>򿪻<EFBFBD><EFBFBD>߹رյ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
* (3)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP/IP<EFBFBD><EFBFBD>MQTTЭ<EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD>
<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾSUB<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>
* log 202204211400 <EFBFBD><EFBFBD>ӡMQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ӻظ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ļظ<EFBFBD>
* 202204231151 MQTT<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
#include <stdio.h>
#include <string.h>
#include "net.h"
#include "aLiYun.h"
#include "mqtt.h"
#include "SPI_SRAM.h"
#include "DBG.h"
#include "PC_DeviceTest_Fun.h"
#include "flash.h"
#include "rtc.h"
#include "includes.h"
#define KEEPLIVE_ENABLE 1 /* <20><><EFBFBD><EFBFBD>KEEPLIVE<56><45><EFBFBD><EFBFBD> */
/* <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD> */
#define RECE_BUF_LEN 536 /* <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С */
/* CH57xNET<45><54>TCP<43><50>MSS<53><53><EFBFBD><EFBFBD>Ϊ536<33>ֽڣ<D6BD><DAA3><EFBFBD>һ<EFBFBD><D2BB>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>Ϊ536<33>ֽ<EFBFBD> */
/* TCPЭ<50><D0AD>ջ<EFBFBD><D5BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65>Ľ<EFBFBD><C4BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>趨 */
/* RX_QUEUE_ENTRIESʱҪ<CAB1><D2AA><EFBFBD><EFBFBD>MSS<53>ʹ<EFBFBD><CDB4><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ĺ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7B4B0>ֵΪ4*MSS<53><53><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>һ<EFBFBD>λᷢ<CEBB><E1B7A2> */
/* 4<><34>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RX_QUEUE_ENTRIESС<53><D0A1>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><E1B5BC><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>ͨѶЧ<D1B6>ʽ<EFBFBD><CABD><EFBFBD> */
/* <20><><EFBFBD><EFBFBD>RX_QUEUE_ENTRIESҪ<53><D2AA><EFBFBD><EFBFBD>( <20><><EFBFBD><EFBFBD>/MSS ),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socketͬʱ<CDAC><CAB1><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD> */
/* <20><><EFBFBD><EFBFBD>RX_QUEUE_ENTRIESҪ<53><D2AA><EFBFBD><EFBFBD>(( <20><><EFBFBD><EFBFBD>/MSS )*socket<65><74><EFBFBD><EFBFBD>) <20>ڶ<EFBFBD><DAB6><EFBFBD>socketͬʱ<CDAC><CAB1><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD>ʱ */
/* Ϊ<>˽<EFBFBD>ԼRAM<41><4D><EFBFBD><EFBFBD><EBBDAB><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪMSS */
#if MQTT_EN
#define MQTT_NORMALDATA_UP_FLAG 0x01
#endif
UINT16 aport=1000; /* CH579Դ<39>˿<EFBFBD> */
#if MQTT_EN
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
uint8_t MQTT_NoramlData_Up(void);
uint8_t MQTT_WxLock_Ctrl(uint8_t *buf);
void MQTT_Dev_Ctrl(uint8_t *buf);
void TimeSetUseStamp(uint32_t TimeStamp);
/*<2A><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MQTT_INFO mqtt_info = {
.init_flag = 0, /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
.con_flag = 0, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ */
.pub_flag = 1, /* <20>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><E1BBB0>Ϣ<EFBFBD><CFA2>־λ */
.sub_flag = 0, /* <20>Ѷ<EFBFBD><D1B6>ĻỰ<C4BB><E1BBB0>־λ */
.tout_flag = 0, /* <20><>ʱ<EFBFBD><CAB1>־λ */
.domain_dns = 0, //mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
.reconnect = 3, //ʧ<><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.keepAliveInterval = 60, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
.packetid = 0, /* <20><>ID */
.username = /*USER_NAME*/NULL, /* <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>豸Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD> */
.password = /*PASSWORD*/NULL, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD> */
.sub_topic = /*SUB_TOPIC*/NULL, /* <20><><EFBFBD>ĵĻỰ<C4BB><E1BBB0><EFBFBD><EFBFBD> */
.pub_topic = /*PUB_TOPIC*/NULL, /* <20><><EFBFBD><EFBFBD><EFBFBD>ĻỰ*/
.mqtt_socket = 0, //<2F><><EFBFBD><EFBFBD>mqtt <20>׽<EFBFBD><D7BD><EFBFBD>
.MyBuf = {0},
.Sram_write_addr = SRAM_MQTT_RECEIVE_START, //
.Sram_read_addr = SRAM_MQTT_RECEIVE_START, //
};
#endif
#if MQTT_EN
/*******************************************************************************
* Function Name : Transport_Open
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8* dis_ip<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ip,
UINT32 sour_port<EFBFBD><EFBFBD>Դ<EFBFBD>˿<EFBFBD>
* Output : None
* Return : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
UINT8 Transport_Open(MQTT_INFO* Mqtt_info, UINT8* des_ip, UINT32 sour_port)
{
UINT8 i,s;
SOCK_INF TmpSocketInf; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱsocket<65><74><EFBFBD><EFBFBD> */
if(Mqtt_info == NULL) return 0xFF;
memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF)); /* <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
memcpy((void *)TmpSocketInf.IPAddr, des_ip, 4); /* <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ */
TmpSocketInf.DesPort = 1883; /* <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6> */
TmpSocketInf.SourPort = /*aport++*/sour_port; /* <20><><EFBFBD><EFBFBD>Դ<EFBFBD>˿<EFBFBD> */
TmpSocketInf.ProtoType = PROTO_TYPE_TCP; /* <20><><EFBFBD><EFBFBD>socekt<6B><74><EFBFBD><EFBFBD> */
TmpSocketInf.RecvStartPoint = (UINT32)/*SocketRecvBuf*/&Mqtt_info->MyBuf[0]; /* <20><><EFBFBD>ý<EFBFBD><C3BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD> */
TmpSocketInf.RecvBufLen = RECE_BUF_LEN ; /* <20><><EFBFBD>ý<EFBFBD><C3BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>ճ<EFBFBD><D5B3><EFBFBD> */
i = CH57xNET_SocketCreat(&s, &TmpSocketInf); /* <20><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SocketId<49><64> */
mStopIfError(i); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
i = CH57xNET_SocketConnect(s); /* TCP<43><50><EFBFBD><EFBFBD> */
mStopIfError(i); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
return s;
}
/*******************************************************************************
* Function Name : Transport_Close
* Description : <EFBFBD>ر<EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD>Ҫ<EFBFBD>رյ<EFBFBD>TCP<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
UINT8 Transport_Close(UINT8 S)
{
UINT8 i;
i=CH57xNET_SocketClose(S, TCP_CLOSE_NORMAL);
mStopIfError(i);
return i;
}
/*******************************************************************************
* Function Name : Transport_SendPacket
* Description : <EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
UINT8 *buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<EFBFBD>ַ
UINT32 len <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void Transport_SendPacket(UINT8 S, UINT8 *buf, UINT32 len)
{
UINT32 totallen;
UINT8 *p=buf;
UINT8 ReNum=0; //ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD> 2022-07-07
totallen=len;
while(1)
{
len = totallen;
CH57xNET_SocketSend(S, p, &len); /* <20><>MyBuf<75>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> */
totallen -= len; /* <20><><EFBFBD>ܳ<EFBFBD><DCB3>ȼ<EFBFBD>ȥ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵij<CFB5><C4B3><EFBFBD> */
p += len; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ƫ<EFBFBD><C6AB>*/
if(totallen)
{
Dbg_Print(DBG_BIT_NET_STATUS_bit,"ʣ<EFBFBD><EFBFBD>totallen<EFBFBD><EFBFBD>%d", totallen);
ReNum++;
if(ReNum>3){ break;} //ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD> 2022-07-07
continue; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
break; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>˳<EFBFBD> */
}
}
/*******************************************************************************
* Function Name : MQTT_Connect
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
char* clientID<EFBFBD><EFBFBD>clientID
char *username <EFBFBD><EFBFBD><EFBFBD>
char *password <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int keepAliveInterval :<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Connect(UINT8 S, char* clientID, char *username, char *password, int keepAliveInterval)
{
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
if(clientID == NULL || username == NULL || password == NULL)
{
Dbg_Print(DBG_BIT_NET_STATUS_bit,"MQTT<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>\r\n");
return;
}
UINT32 len = strlen(clientID) + strlen(username) + strlen(password) + 25;
UINT8* buf = malloc(len);
if(buf == NULL) return;
//data.clientID.cstring = "11";
data.clientID.cstring = clientID;
data.keepAliveInterval = keepAliveInterval;
data.cleansession = 1;
data.username.cstring = username;
data.password.cstring = password;
len=MQTTSerialize_connect(buf, len, &data);
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>ȣ<EFBFBD>%d\r\n", len);
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"Send Buff:",buf, len);
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
free(buf);
}
/*******************************************************************************
* Function Name : MQTT_Subscribe
* Description : MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
char *topic <EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Subscribe(UINT8 S, char *topic)
{
MQTTString topicString = MQTTString_initializer;
if(topic == NULL) return;
UINT32 len = strlen(topic)+ 10;
UINT8* buf = malloc(len);
if(buf == NULL) return;
int req_qos=0;
UINT32 msgid=1;
topicString.cstring=topic;
len=MQTTSerialize_subscribe(buf, len, 0, msgid, 1, &topicString, &req_qos);
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD>ȣ<EFBFBD>%d\r\n SocketId:%d", len, S);
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
free(buf);
}
/*******************************************************************************
* Function Name : MQTT_Unsubscribe
* Description : MQTTȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
char *topic ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Unsubscribe(UINT8 S, char *topic)
{
MQTTString topicString = MQTTString_initializer;
if(topic == NULL) return;
UINT32 len = strlen(topic)+ 20;
UINT8* buf = malloc(len);
if(buf == NULL) return;
UINT32 msgid=1;
topicString.cstring=topic;
len=MQTTSerialize_unsubscribe(buf, len, 0, msgid, 1, &topicString);
Dbg_Print(DBG_BIT_NET_STATUS_bit,"ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD>ȣ<EFBFBD>%d\r\n", len);
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
free(buf);
}
/*******************************************************************************
* Function Name : MQTT_Publish
* Description : MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
char *topic <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int qos<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ȼ<EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Publish(UINT8 S, char *topic, UINT8 *payload, int payloadlen, int qos)
{
#if MQTT_EN
MQTTString topicString = MQTTString_initializer;
if(topic == NULL || payload == NULL) return;
UINT32 len = strlen(topic) + payloadlen + 10;
UINT8* buf = malloc(len);
if(buf == NULL) return;
topicString.cstring = topic;
len= MQTTSerialize_publish(buf, len, 0, qos, 0, mqtt_info.packetid++, topicString, payload, payloadlen);
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d\r\n S:%d", len, S);
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"data :",buf,len);
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>\r\n");
free(buf);
#endif
}
/*******************************************************************************
* Function Name : MQTT_Pingreq
* Description : MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Pingreq(UINT8 S)
{
UINT32 len;
UINT8 buf[20];
len=MQTTSerialize_pingreq(buf,sizeof(buf));
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%d\r\n", len);
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
}
/*******************************************************************************
* Function Name : MQTT_Disconnect
* Description : <EFBFBD>Ͽ<EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input : UINT8 S<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Disconnect(UINT8 S)
{
UINT32 len;
UINT8 buf[50];
len=MQTTSerialize_disconnect(buf,sizeof(buf));
Transport_SendPacket(S, buf, len);
LOG_NET_COMM_Send_Record(S,mqtt_info.des_ip,1883,&buf[0],len);
}
/*******************************************************************************
* Function Name : MQTT_Init
* Description : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>MQTT
* Input : domain_name<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ip<EFBFBD><EFBFBD>дNULL (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>free<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>)
* des_ip: MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip<EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* clientID: clientID (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>free<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>)
* username: <EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>free<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>)
* password<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>free<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>)
sublish: <EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>free<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>)
* keepAliveInterval<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* Output : None
* Return : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>óɹ<EFBFBD>
*******************************************************************************/
UINT8 MQTT_Init(MQTT_INFO* Mqtt_info, char* domain_name, UINT8* des_ip, char* clientID, char *username, char *password, char* sublish, int keepAliveInterval)
{
#if MQTT_EN
if(Mqtt_info == NULL || clientID ==NULL || username == NULL || password == NULL || sublish == NULL) return 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(des_ip == NULL) //Ŀ<><C4BF>ipΪ<70><CEAA>
{
if(domain_name == NULL) return 1; //<2F><><EFBFBD><EFBFBD>ҲΪ<D2B2><CEAA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(server_info.net_sta != NET_COMPLETE) return 2; //<2F><><EFBFBD>緱æ
Mqtt_info->dns_en = 1; //DNS<4E><53><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>
// server_info.dns_sta = DNS_INIT;
// server_info.net_sta = NET_DNS; //״̬<D7B4><CCAC>Ϊ NET_DNS
if(Mqtt_info->domain_name)
{
free(Mqtt_info->domain_name);
}
Mqtt_info->domain_name = domain_name;
// server_info.dns_domian_name = domain_name;
}
else
{
memcpy(&Mqtt_info->des_ip, des_ip, 4);
// if(server_info.net_sta != NET_COMPLETE) return 1;
// server_info.net_sta = NET_MQTT_INIT; //״̬<D7B4><CCAC>Ϊ,NET_MQTT_INIT
}
if(Mqtt_info->clientID)
{
free(Mqtt_info->clientID);
}
if(Mqtt_info->username)
{
free(Mqtt_info->username);
}
if(Mqtt_info->password)
{
free(Mqtt_info->password);
}
if(Mqtt_info->sub_topic)
{
free(Mqtt_info->sub_topic);
}
Mqtt_info->clientID = clientID;
Mqtt_info->username = username;
Mqtt_info->password = password;
Mqtt_info->sub_topic = sublish;
Mqtt_info->keepAliveInterval = keepAliveInterval;
Mqtt_info->init_flag = 1;
Mqtt_info->reconnect = 3;
#endif
return 0;
}
/*******************************************************************************
* Function Name : MQTT_SET_SUB_Topic
* Description : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>MQTT_<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* Input : topic<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_SET_SUB_Topic(MQTT_INFO* Mqtt_info, char* topic)
{
if(topic != NULL)
{
Mqtt_info->sub_topic = topic;
}
}
/*******************************************************************************
* Function Name : MQTT_SET_PUB_Topic
* Description : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>MQTT_<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* Input : topic<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void MQTT_SET_PUB_Topic(MQTT_INFO* Mqtt_info, char* topic)
{
if(topic != NULL)
{
Mqtt_info->pub_topic = topic;
}
}
/*******************************************************************************
* Function Name : MQTT_Flash_Parameter_Init
* Description : <EFBFBD><EFBFBD>flash<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>mqtt
* Input : topic<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
UINT8 MQTT_Flash_Parameter_Init(MQTT_INFO* Mqtt_info)
{
if(Mqtt_info == NULL) return 1;
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>*/
MQTT_DATA mqtt_data;
mqtt_data.mqtt_basic_info = malloc(sizeof(MQTT_BASIC_INFO));
if(mqtt_data.mqtt_basic_info == NULL)
{
return 2;
}
UINT8 ret = 0;
UINT16 keepAlive = 0;
char* domain_name = NULL;
char* clientID = NULL;
char* userName = NULL;
char* passWord = NULL;
char* sublish = NULL;
char* publish = NULL;
Flash_Read((UINT8*)&mqtt_data ,sizeof(MQTT_DATA)-4, FLASH_MCU_MQTT_START_ADDRESS + sizeof(ALIYUN_INFO) -4-2);
Flash_Read((UINT8*)mqtt_data.mqtt_basic_info ,sizeof(MQTT_BASIC_INFO), FLASH_MCU_MQTT_START_ADDRESS + sizeof(ALIYUN_INFO)-4);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"keepAliveInterval:%d", mqtt_data.keepAliveInterval);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"sublish:%s", mqtt_data.mqtt_basic_info->mqtt_theme.sublish);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"publish:%s", mqtt_data.mqtt_basic_info->mqtt_theme.publish);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"domain_name:%s", mqtt_data.mqtt_basic_info->domain_name);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"clientID:%s", mqtt_data.mqtt_basic_info->clientID);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"username:%s", mqtt_data.mqtt_basic_info->username);
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"password:%s", mqtt_data.mqtt_basic_info->password);
if(mqtt_data.keepAliveInterval < 0xFFFF)
{
keepAlive = mqtt_data.keepAliveInterval;
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC>ֵ
{
keepAlive = 120;
}
if(mqtt_data.mqtt_basic_info->mqtt_theme.sublish[0] != 0xFF && mqtt_data.mqtt_basic_info->mqtt_theme.sublish[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->mqtt_theme.sublish)+1;
sublish = malloc(len);
if(sublish == NULL)
{
ret = 2;
goto reault;
}
memset(sublish, 0, len);
strcpy(sublish, (char*)mqtt_data.mqtt_basic_info->mqtt_theme.sublish);
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ret = 3;
goto reault;
}
if(mqtt_data.mqtt_basic_info->domain_name[0] != 0xFF && mqtt_data.mqtt_basic_info->domain_name[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->domain_name)+1;
domain_name = malloc(len);
if(domain_name == NULL)
{
ret = 2;
goto reault;
}
memset(domain_name, 0, len);
strcpy(domain_name, (char*)mqtt_data.mqtt_basic_info->domain_name);
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ret = 3;
goto reault;
}
if(mqtt_data.mqtt_basic_info->clientID[0] != 0xFF && mqtt_data.mqtt_basic_info->clientID[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->clientID)+1;
clientID = malloc(len);
if(clientID == NULL)
{
ret = 2;
goto reault;
}
memset(clientID, 0, len);
strcpy(clientID, (char*)mqtt_data.mqtt_basic_info->clientID);
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ret = 3;
goto reault;
}
if(mqtt_data.mqtt_basic_info->username[0] != 0xFF && mqtt_data.mqtt_basic_info->username[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->username)+1;
userName = malloc(len);
if(userName == NULL)
{
ret = 2;
goto reault;
}
memset(userName, 0, len);
strcpy(userName, (char*)mqtt_data.mqtt_basic_info->username);
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ret = 3;
goto reault;
}
if(mqtt_data.mqtt_basic_info->password[0] != 0xFF && mqtt_data.mqtt_basic_info->password[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->password)+1;
passWord = malloc(len);
if(passWord == NULL)
{
ret = 2;
goto reault;
}
memset(passWord, 0, len);
strcpy(passWord, (char*)mqtt_data.mqtt_basic_info->password);
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ret = 3;
goto reault;
}
if(mqtt_data.mqtt_basic_info->mqtt_theme.publish[0] != 0xFF && mqtt_data.mqtt_basic_info->mqtt_theme.publish[0] != 0x00)
{
UINT8 len = strlen((char*)mqtt_data.mqtt_basic_info->mqtt_theme.publish)+1;
publish = malloc(len);
if(publish == NULL)
{
ret = 4;
goto reault;
}
memset(publish, 0, len);
strcpy(publish, (char*)mqtt_data.mqtt_basic_info->mqtt_theme.publish);
if(Mqtt_info->pub_topic)
{
free(Mqtt_info->pub_topic);
}
Mqtt_info->pub_topic = publish;
}
reault:
switch(ret)
{
case 0: //<2F>޴<EFBFBD><DEB4><EFBFBD>
case 4: //publish<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
free(mqtt_data.mqtt_basic_info); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
return MQTT_Init(Mqtt_info, domain_name, NULL, clientID, userName, passWord, sublish, keepAlive); //<2F><>ʼ<EFBFBD><CABC>MQTT
default: //<2F>д<EFBFBD><D0B4><EFBFBD>
Dbg_Println(DBG_BIT_Debug_STATUS_bit,"MQTT_Flash_Parameter err");
free(mqtt_data.mqtt_basic_info);
if(domain_name) free(domain_name);
if(clientID) free(clientID);
if(userName) free(userName);
if(passWord) free(passWord);
if(sublish) free(sublish);
if(publish) free(publish);
return ret;
}
}
/*------------------------------------------------------------*/
/* MQTT<54>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> */
/*------------------------------------------------------------*/
void MQTT_CMD_A5(UINT8 S, char* topic, UINT8 cmdhead, UINT8* cmdID, UINT8 result) //<2F>β<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
{
#if MQTT_EN
uint32_t timetemp;
UINT8 Cmd_buff[19] = {0};
timetemp = RTC_Conversion_To_Unix(&RTC_Raw_Data);
Cmd_buff[0] = 0xA5; //<2F>̶<EFBFBD>A5<41><35><EFBFBD><EFBFBD>
Cmd_buff[1] = cmdhead;
memcpy(&Cmd_buff[2],cmdID,CmdID_LEN); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&Cmd_buff[2+CmdID_LEN], MACAddr, DeviceID_LEN); //<2F><><EFBFBD>豸MAC<41><43>ַ
HtolCpy((&Cmd_buff[2+CmdID_LEN+DeviceID_LEN]), timetemp);
Cmd_buff[17] = result;
MQTT_Publish(S, topic, Cmd_buff, 19, 0);
#endif
}
#if MQTT_NORMALDATA_UP_FLAG
/**
* @name <EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
* @attention <EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𹷵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
*/
uint8_t MQTT_CMD_A6(void) //u8* cmdID, u8 * DeviceID,u8* UTCTime
{
uint8_t Ret = 0x00;
#if MQTT_EN
uint32_t timetemp = RTC_Conversion_To_Unix(&RTC_Raw_Data); //TIMESTAMP
Device_Public_Information_G BUS_Public;
RS485_WxLock_INFO Rs485WxLockInfo;
uint8_t Cmd_buff[200];
uint8_t KeepFlag = 0x00;
uint32_t dev_addr;
if(NULL == DevActionGlobal.DevLockAddr) //HostRunInfo.CfgDevAddWxLock
{
return Ret; //
}
dev_addr = DevActionGlobal.DevLockAddr;
// Rs485WxLockInfo = HostRunInfo.CfgDevAddWxLock->DevDataStruct;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
if(0x01 == Rs485WxLockInfo.WeixinUpSendFlag) //͸<><CDB8><EFBFBD><EFBFBD>־
{
Rs485WxLockInfo.WeixinUpSendFlag = 0x00;
KeepFlag = 0x01;
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN] = Rs485WxLockInfo.WeixinUpMessageLen;//
memcpy(&Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+0x01], Rs485WxLockInfo.WeixinUpMessage, Rs485WxLockInfo.WeixinUpMessageLen);
Ret = 0x01;
Cmd_buff[0] = 0xA6;
// MacAddrCpy(&Cmd_buff[1]); //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ID<49><44><EFBFBD><EFBFBD>mac<61><63>ַ 6<><36><EFBFBD>ֽ<EFBFBD>
memcpy(&Cmd_buff[1], MACAddr, DeviceID_LEN); //<2F><><EFBFBD>豸MAC<41><43>ַ
HtolCpy((&Cmd_buff[1+DeviceID_LEN]), timetemp);
MQTT_Publish(mqtt_info.mqtt_socket, mqtt_info.pub_topic, Cmd_buff, 1+Rs485WxLockInfo.WeixinUpMessageLen+1+DeviceID_LEN+UTCTime_LEN, 0);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A6 ͸<><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"A6 ͸<><CDB8> Send Buff:",Cmd_buff,1+Rs485WxLockInfo.WeixinUpMessageLen+1+DeviceID_LEN+UTCTime_LEN);
// MQTT_PublishQs0(PTopicName,(char *)Cmd_buff ,1+Rs485WxLockInfo->WeixinUpMessageLen+1+DeviceID_LEN+UTCTime_LEN);
}
else if(0x01 == Rs485WxLockInfo.WeixinAskLockFlag)
{
Rs485WxLockInfo.WeixinAskLockFlag = 0x00;
KeepFlag = 0x01;
Cmd_buff[0] = 0xAA;
Ret = 0x01;
memcpy(&Cmd_buff[1], MACAddr, DeviceID_LEN); //<2F><><EFBFBD>豸MAC<41><43>ַ
// MacAddrCpy(&Cmd_buff[1]); //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ID<49><44><EFBFBD><EFBFBD>mac<61><63>ַ 6<><36><EFBFBD>ֽ<EFBFBD>
HtolCpy((&Cmd_buff[1+DeviceID_LEN]), timetemp);
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MQTT_Publish(mqtt_info.mqtt_socket, mqtt_info.pub_topic, Cmd_buff, 0x01+1+DeviceID_LEN+UTCTime_LEN, 0);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>AA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"AA <20><><EFBFBD><EFBFBD>Send Buff:",Cmd_buff,0x01+1+DeviceID_LEN+UTCTime_LEN);
// MQTT_PublishQs0(PTopicName,(char *)Cmd_buff ,0x01+1+DeviceID_LEN+UTCTime_LEN);
}
if(0x01 == KeepFlag)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
}
#endif
return Ret;
}
#endif
//#define MqttDevNumMax 50 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Cmd_Buff_LEN (CFG_Dev_Freego_Map_MAX*24+20)
/*<2A>ϱ<EFBFBD><CFB1><EFBFBD>б<EFBFBD>*/
void MQTT_CMD_A7(UINT8 S, char* topic) //<2F>ϱ<EFBFBD><CFB1><EFBFBD><E8B1B8><EFBFBD><EFBFBD>(uint8_t *)
{
#if MQTT_EN
uint16_t len = 0;
uint32_t timetemp;
UINT8 Cmd_buff[Cmd_Buff_LEN];
timetemp = RTC_Conversion_To_Unix(&RTC_Raw_Data); //+ -8*3600
memset(Cmd_buff, 0x00, Cmd_Buff_LEN); //<2F><>0
len = MQTT_DevList_Get(&Cmd_buff[1+DeviceID_LEN+UTCTime_LEN]); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ沢<DAB4><E6B2A2>ȡ<EFBFBD><EFBFBD>б<EFBFBD>
if(len == 0) return;
Cmd_buff[0] = 0xA7;
memcpy(&Cmd_buff[1], MACAddr, DeviceID_LEN);
HtolCpy((&Cmd_buff[1+DeviceID_LEN]), timetemp);
MQTT_Publish(S, topic, Cmd_buff, len+1+DeviceID_LEN+UTCTime_LEN, 0);
// free(Cmd_buff);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// memset(test_buff,0,sizeof(test_buff));
// HexToStr(test_buff,Cmd_buff,len+1+DeviceID_LEN+UTCTime_LEN);
// printf("%s\n",(char *)Cmd_buff);
// printf("\r\n<><6E><EFBFBD><EFBFBD>A7<41><37><EFBFBD><EFBFBD>\r\n ");
#endif
}
/**
* @name MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>õ<EFBFBD>
* @param
* p <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
* @attention <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint16_t MQTT_DevCoreStateGet(uint8_t *p)
{
return 0x00;
}
/**
* @name MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
* @param
* buf <EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ֻ<EFBFBD>ϱ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣָ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>
* @attention <EFBFBD><EFBFBD><EFBFBD>ݹ̶<EFBFBD> (FreegoDevStateLen*DevSum+1)<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ϢID<EFBFBD><EFBFBD>4B<EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>6B<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTCʱ<EFBFBD>4B<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* [0] [1][2][3][4][5][6]
*/
uint16_t MQTT_CoreDev_Up(uint8_t *buf)
{
// Service_INFOP ServiceInfo;
// uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еķ<D0B5><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
uint16_t Ret = 0x00;
uint16_t DevSum = 0x00;
{
DevSum = MQTT_DevCoreStateGet(&buf[1]); //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
buf[0] = DevSum;
if(0x00 != DevSum) //
{
Ret = DevSum*0x06+0x01; //<2F>̶<EFBFBD>
}
return Ret;
}
/*MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>,<2C><><EFBFBD>ݽṹ<DDBD><E1B9B9>A8<41>ϱ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ȫһ<C8AB><D2BB>*/
uint8_t MQTT_CoreData_Up(void)
{
#if MQTT_EN
uint32_t timetemp; //ָ<><D6B8>ʱ<EFBFBD><CAB1>
// uint16_t MqttDevContLen;
uint8_t Cmd_buff[50]; //
static uint32_t CoreDataUpTick;
if( SysTick_1ms - CoreDataUpTick > 60*1000) //1<><31><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>
{
CoreDataUpTick = SysTick_1ms;
}
else
{
return 0x00;
}
// MqttDevContLen = MQTT_CoreDev_Up(&Cmd_buff[1+DeviceID_LEN+UTCTime_LEN]);//MQTT_Dev_Up(&Cmd_buff[1+DeviceID_LEN+UTCTime_LEN]);
// if(0x00 == MqttDevContLen)
// {
// return 0x00; //û<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
// }
timetemp = RTC_Conversion_To_Unix(&RTC_Raw_Data) ; // TIMESTAMP;
Cmd_buff[0] = 0xA8; //<2F>̶<EFBFBD>A8<41><38><EFBFBD><EFBFBD>
// Cmd_buff[1] = cmdhead;
// memcpy(&Cmd_buff[2],cmdID,CmdID_LEN); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&Cmd_buff[1], MACAddr, DeviceID_LEN); //<2F><><EFBFBD>豸MAC<41><43>ַ
HtolCpy((&Cmd_buff[1+DeviceID_LEN]), timetemp);
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN] = 0x01; //<2F>ϱ<EFBFBD>1<EFBFBD><31><EFBFBD>
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+1] = 0x04; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+2] = 0x00;
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+3] = 0x00; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·<EFBFBD><C2B7>ַ
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+4] = 0x00;
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+5] = DevActionGlobal.DevActionU64Cond.EleState; //״̬
Cmd_buff[1+DeviceID_LEN+UTCTime_LEN+6] = 0x00;
MQTT_Publish(mqtt_info.mqtt_socket, mqtt_info.pub_topic, Cmd_buff, 20, 0);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A8<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʼ\r\n");
// memset(test_buff,0,sizeof(test_buff));
// HexToStr(test_buff,Cmd_buff,MqttDevContLen+1+DeviceID_LEN+UTCTime_LEN);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A8<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD>\r\n");
#endif
return 0x01;
}
/**
* @name MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>ǿյ<EFBFBD><EFBFBD><EFBFBD>
* @param
* buf һ<EFBFBD>δ<EFBFBD>7<EFBFBD><EFBFBD><EFBFBD>ֽڹ<EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
* @attention <EFBFBD><EFBFBD>3<EFBFBD><EFBFBD> 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* [0] [1] [2] [3] [4][5][6]
*/
void MQTT_Dev_Ctrl(uint8_t *buf)
{
// CFG_Freego_Map_AddP CfgMapAdd;
// uint8_t DevCtrl[6];
uint8_t i; //<2F>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>Ƶ<EFBFBD><33><C2B7><EFBFBD><EFBFBD>
for(i = 0; i < buf[0]; i++)
{
switch(buf[1])
{
case Dev_Host_Invalid: //<2F><><EFBFBD><EFBFBD>
break;
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ֻҪ<D6BB><D2AA>·<EFBFBD><C2B7>Ϊ0<CEAA><30><EFBFBD>ͼ<EFBFBD>1
if(0x00 != buf[3]) //<2F><>·<EFBFBD><C2B7>Ϊ0
{
buf[3]--;
}
break;
}
DevActionCtrl(&buf[1], 6);
}
}
/*<2A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void TimeSetUseStamp(uint32_t TimeStamp)
{
// uint32_t temp_unix;
S_RTC write_rtc;
memset(&write_rtc,0,sizeof(write_rtc));
Unix_Conversion_To_RTC(&write_rtc,TimeStamp);
RTC_WriteDate(write_rtc);
DevActionGlobal.TimeGetFlag++;
SRAM_Write_DW(TimeStamp,SRAM_Register_Start_ADDRESS + Register_CurrentUsageTime_OFFSET);
// Retain_Flash_Register_Data();
}
/*******************************************************************************
* Function Name : FRG_Data_Processing
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>մ<EFBFBD><EFBFBD><EFBFBD>
* Input : S: <EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>
topic<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ʱ<EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
datalen<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
qos: <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
* Output : None
* Return : None
*******************************************************************************/
void FREEG_Data_Processing(UINT8 S, char* topic, UINT8* data, uint16_t datalen, int qos)
{
#if MQTT_EN
// UINT8 crc168_val = 0; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>CRC_168У<38><D0A3><EFBFBD><EFBFBD>ֵ
if(topic == NULL) return;
if((data[datalen-1] == CRC_168(data, datalen-1)) || (0xA4 == data[CMD_PKT]))
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT_Revice_crc success");
if(memcmp(MACAddr, &data[DEVICE_ID_PKT], 6) == 0) //<2F>豸IDһ<44><D2BB>
{
switch(data[CMD_PKT])
{
case 0xA0: //ʱ<><CAB1>ͬ<EFBFBD><CDAC>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT_Time_Update");
{
uint32_t seccount=0;
uint8_t DecUTCTime[4]; //<2F>·<EFBFBD><C2B7><EFBFBD>utcʱ<63><CAB1>
memcpy(DecUTCTime, &data[1+CmdID_LEN+DeviceID_LEN], 4);
seccount = (DecUTCTime[0]<<24) + (DecUTCTime[1]<<16) + (DecUTCTime[2]<<8) + DecUTCTime[3];
// seccount += TIME_MISS;
TimeSetUseStamp(seccount); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
}
MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_SUCCESS); //ָ<><D6B8>ִ<EFBFBD>гɹ<D0B3>
break;
case 0xA1: //ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT_Config");
switch(data[PRAM_PKT])
{
case 0x01:
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>\r\n");
break;
case 0x02:
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>\r\n");
break;
case 0x03:
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// MQTT_Ele_Ctrl_Open();
// UINT8 control[6] = {0};
// control[0] = 0x04;
// control[1] = 0x00;
// control[2] = LOOPCH01;
// control[3] = 0x00;
// control[4] = 0x01;
// control[5] = 0x00;
// DevActionCtrl(control, 6); //ȡ<><C8A1> <20><>
Ele_Ctrl_OpenClose(0x01);//ȡ<><C8A1> <20><>
}
break;
case 0x04:
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>\r\n");
// SRAM_Write_Byte(0x02,SRAM_Service_Take_Electricity_State); //ȡ<><C8A1> <20><>
// UINT8 control[6] = {0};
// control[0] = 0x04;
// control[1] = 0x00;
// control[2] = LOOPCH01;
// control[3] = 0x00;
// control[4] = 0x02;
// control[5] = 0x00;
// DevActionCtrl(control, 6);
Ele_Ctrl_OpenClose(0x02);//ȡ<><C8A1> <20><>
// Dbg_Println(DBG_BIT_NET_STATUS_bit,"Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>:%d", DevAddrCtr(NULL, control, 6)); //ȡ<><C8A1> <20><>
break;
case 0x05: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n ");
break;
case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD>б<EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n ");
MQTT_CMD_A7(S, topic);
return;
case 0x07: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ָ<EFBFBD><EFBFBD><EEB6A8>
break;
}
MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_SUCCESS); //ָ<><D6B8>ִ<EFBFBD>гɹ<D0B3>
break;
case 0xA3: //RCU<43><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT_Device_Control");
MQTT_Dev_Ctrl(&data[1+CmdID_LEN+DeviceID_LEN+UTCTime_LEN]);
MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_SUCCESS); //ָ<><D6B8>ִ<EFBFBD>гɹ<D0B3>
break;
case 0xA4: //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT Door Lock transport");
{
uint8_t WxLockSendLen;
WxLockSendLen = datalen - (1+CmdID_LEN+DeviceID_LEN+UTCTime_LEN)-0x01;
// if(WxLockSendLen == Server_Datahex[1+CmdID_LEN+DeviceID_LEN+UTCTime_LEN]) //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>ж<EFBFBD>
{
data[1+CmdID_LEN+DeviceID_LEN+UTCTime_LEN] = WxLockSendLen;
MQTT_WxLock_Ctrl(&data[1+CmdID_LEN+DeviceID_LEN+UTCTime_LEN]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_SUCCESS); //ָ<><D6B8>ִ<EFBFBD>гɹ<D0B3>
}//
break;
default:
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT cmd err");
MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_HEAD_ERROR); //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
else
{
// MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_DEC_ERROR);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DeviceID err");
}
}
else
{
// MQTT_CMD_A5(S, topic, data[CMD_PKT], &data[CMDID_PKT], CMD_CRC_ERROR);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT crc ERR<52><52>%X CRC_168:%X", data[datalen-1], CRC_168(data, datalen-1));
}
#endif
}
/**
* @name MQTT΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* buf һ<EFBFBD>δ<EFBFBD>4<EFBFBD><EFBFBD><EFBFBD>ֽڹ<EFBFBD><EFBFBD><EFBFBD>
* @retval 0x00 <EFBFBD><EFBFBD>ʾʧ<EFBFBD><EFBFBD> 0x01 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD>
* @attention <EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* [0] N
*/
uint8_t MQTT_WxLock_Ctrl(uint8_t *buf)
{
uint8_t Ret = 0x00;
#if MQTT_EN
Device_Public_Information_G BUS_Public;
RS485_WxLock_INFO Rs485WxLockInfo;
uint32_t dev_addr;
if(buf[0] > WXLOCKDOWNMESSAGELEN) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
{
return Ret;
}
if(NULL == DevActionGlobal.DevLockAddr)//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
{
return Ret;
}
Ret = 0x01;
dev_addr = DevActionGlobal.DevLockAddr;
// Rs485WxLockInfo = HostRunInfo.CfgDevAddWxLock->DevDataStruct;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
Rs485WxLockInfo.WeixinDownSendFlag = 0x01; //<2F>·<EFBFBD><C2B7><EFBFBD>־<EFBFBD><D6BE>λ
Rs485WxLockInfo.WeixinDownSendCnt = WxLockCtrlSendMax;
Rs485WxLockInfo.WeixinDownMessageLen = buf[0];
memcpy(Rs485WxLockInfo.WeixinDownMessage, &buf[1], Rs485WxLockInfo.WeixinDownMessageLen); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485WxLockInfo, sizeof(RS485_WxLock_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485WxLockInfo,sizeof(RS485_WxLock_INFO),dev_addr+Dev_Privately);
#endif
return Ret ;
}
/*******************************************************************************
* Function Name : MQTT_Receive_Processing
* Description : MQTT<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>մ<EFBFBD><EFBFBD><EFBFBD>
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void MQTT_Receive_Processing(void)
{
#if MQTT_EN
if(0x01 != mqtt_info.con_flag)
{
// Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT Con Faild");
return ;
}
if(0x01 != mqtt_info.sub_flag)
{
// Dbg_Println(DBG_BIT_NET_STATUS_bit,"MQTT Sub Faild");
return ;
}
MQTT_CoreData_Up(); //<2F><><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MQTT_NoramlData_Up(); //ÿ<>ζ<EFBFBD><CEB6><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>жϣ<D0B6><CFA3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϱ<EFBFBD>
if(mqtt_info.Sram_read_addr != mqtt_info.Sram_write_addr)
{
int DataLen = SRAM_Read_Word(mqtt_info.Sram_read_addr);
uint8_t* Data = malloc(DataLen);
if(Data == NULL) return;
SRAM_Read_Buff(Data, DataLen, mqtt_info.Sram_read_addr +2);
// MQTT_Publish(mqtt_info.mqtt_socket, mqtt_info.pub_topic, Data, DataLen, 0);
FREEG_Data_Processing(mqtt_info.mqtt_socket, mqtt_info.pub_topic, Data, DataLen, 0);
free(Data);
mqtt_info.Sram_read_addr += SRAM_MQTT_RECEIVE_LEN;
if(mqtt_info.Sram_read_addr >= SRAM_MQTT_RECEIVE_END)
{
mqtt_info.Sram_read_addr = SRAM_MQTT_RECEIVE_START;
}
}
#endif
}
#endif
#if MQTT_NORMALDATA_UP_FLAG
/**
* @name MQTT<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>ʱ<EFBFBD>ϱ<EFBFBD>
* @para <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
* @brief ÿ<EFBFBD><EFBFBD>ֻ<EFBFBD>ϱ<EFBFBD>һ<EFBFBD><EFBFBD>״̬
* @attention <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
*/
uint8_t MQTT_NoramlData_Up(void)
{
uint8_t Ret = 0x00;
// if(0x01 == MQTT_CMD_A8())
// {
// Ret = 0x01;
// }else
if(0x01 == MQTT_CMD_A6())
{
Ret = 0x01;
}
// else if(0x01 == MQTT_CMD_A9())
// {
// Ret = 0x01;
// }
return Ret;
}
#endif
/*********************************** endfile **********************************/