除了显示驱动,其余全部测试通过
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
#include "mqtt_config.h"
|
||||
|
||||
#include "wifi/wifi_connect.h"
|
||||
#include "mbedtls/md.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
static mqtt_config_t mqtt_config;
|
||||
|
||||
|
||||
/*
|
||||
* 生成紧凑MAC == 用户名
|
||||
*
|
||||
* AA:BB:CC:DD:EE:FF -> AABBCCDDEEFF(大写)
|
||||
*/
|
||||
static int make_compact_mac(char *buf, uint32_t len)
|
||||
{
|
||||
uint8_t mac[6];
|
||||
int i;
|
||||
|
||||
if (!buf || len < 13)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (wifi_get_mac(mac))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
sprintf(buf + i * 2, "%02X", mac[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 生成密码
|
||||
*
|
||||
* password = MD5(PRODUCT_SECRET + client_id) 小写hex
|
||||
*/
|
||||
static int make_password(const char *client_id, char *buf, uint32_t len)
|
||||
{
|
||||
char raw[128];
|
||||
unsigned char digest[16];
|
||||
const mbedtls_md_info_t *md_info;
|
||||
int i;
|
||||
|
||||
if (!client_id || !buf || len < 33)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(raw, sizeof(raw), "%s%s", MQTT_PRODUCT_SECRET, client_id);
|
||||
|
||||
md_info = mbedtls_md_info_from_type(MBEDTLS_MD_MD5);
|
||||
if (!md_info ||
|
||||
mbedtls_md(md_info, (const unsigned char *)raw, strlen(raw), digest))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
sprintf(buf + i * 2, "%02x", digest[i]);
|
||||
}
|
||||
buf[32] = '\0';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void mqtt_config_init(void)
|
||||
{
|
||||
char device_name[13];
|
||||
|
||||
memset(
|
||||
&mqtt_config,
|
||||
0,
|
||||
sizeof(mqtt_config)
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* MQTT服务器
|
||||
*/
|
||||
strcpy(
|
||||
mqtt_config.host,
|
||||
MQTT_SERVER_HOST
|
||||
);
|
||||
|
||||
mqtt_config.port = MQTT_SERVER_PORT;
|
||||
|
||||
|
||||
mqtt_config.keepalive = 60;//秒
|
||||
|
||||
|
||||
/*
|
||||
* 设备身份
|
||||
* username = 紧凑MAC
|
||||
* client_id = PRODUCT_KEY_MAC_MODEL
|
||||
* password = MD5(PRODUCT_SECRET + client_id)
|
||||
*
|
||||
*/
|
||||
if (make_compact_mac(device_name, sizeof(device_name))) {
|
||||
strcpy(device_name, "unknown");
|
||||
}
|
||||
|
||||
strcpy(
|
||||
mqtt_config.username,
|
||||
device_name
|
||||
);
|
||||
|
||||
snprintf(
|
||||
mqtt_config.client_id,
|
||||
sizeof(mqtt_config.client_id),
|
||||
"%s_%s_%s",
|
||||
MQTT_PRODUCT_ID,
|
||||
device_name,
|
||||
MQTT_DEVICE_MODEL
|
||||
);
|
||||
|
||||
make_password(
|
||||
mqtt_config.client_id,
|
||||
mqtt_config.password,
|
||||
sizeof(mqtt_config.password)
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* topic
|
||||
*/
|
||||
snprintf(
|
||||
mqtt_config.subscribe_topic,
|
||||
sizeof(mqtt_config.subscribe_topic),
|
||||
"/sys/%s/%s/c/#",
|
||||
MQTT_PRODUCT_ID,
|
||||
device_name
|
||||
);
|
||||
|
||||
snprintf(
|
||||
mqtt_config.publish_topic,
|
||||
sizeof(mqtt_config.publish_topic),
|
||||
"/sys/%s/%s/s/event/property/post",
|
||||
MQTT_PRODUCT_ID,
|
||||
device_name
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
mqtt_config_t *mqtt_config_get(void)
|
||||
{
|
||||
|
||||
return &mqtt_config;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user