doubao_chat/lib/net/aliyun/infra/infra_compat.c

288 lines
8.8 KiB
C

#include "infra_config.h"
#ifdef INFRA_COMPAT
#include <string.h>
#include "infra_types.h"
#include "infra_defs.h"
#include "infra_compat.h"
sdk_impl_ctx_t g_sdk_impl_ctx = {0};
#if !defined(INFRA_LOG)
void IOT_SetLogLevel(IOT_LogLevel level) {}
#endif
#ifdef MQTT_COMM_ENABLED
#include "dev_sign_api.h"
#include "mqtt_api.h"
#ifdef INFRA_LOG
#include "infra_log.h"
#define sdk_err(...) log_err("infra_compat", __VA_ARGS__)
#define sdk_info(...) log_info("infra_compat", __VA_ARGS__)
#else
#define sdk_err(...)
#define sdk_info(...)
#endif
void *HAL_Malloc(uint32_t size);
void HAL_Free(void *ptr);
/* global variable for mqtt construction */
static iotx_conn_info_t g_iotx_conn_info = {0};
static char g_empty_string[1] = "";
int IOT_SetupConnInfo(const char *product_key,
const char *device_name,
const char *device_secret,
void **info_ptr)
{
if (product_key == NULL || device_name == NULL || device_secret == NULL ||
strlen(product_key) > IOTX_PRODUCT_KEY_LEN ||
strlen(device_name) > IOTX_DEVICE_NAME_LEN ||
strlen(device_secret) > IOTX_DEVICE_SECRET_LEN) {
return NULL_VALUE_ERROR;
}
if (info_ptr) {
memset(&g_iotx_conn_info, 0, sizeof(iotx_conn_info_t));
g_iotx_conn_info.host_name = g_empty_string;
g_iotx_conn_info.client_id = g_empty_string;
g_iotx_conn_info.username = g_empty_string;
g_iotx_conn_info.password = g_empty_string;
g_iotx_conn_info.pub_key = g_empty_string;
*info_ptr = &g_iotx_conn_info;
}
return SUCCESS_RETURN;
}
#endif /* #ifdef MQTT_COMM_ENABLED */
#if defined(DEVICE_MODEL_ENABLED)
#include "iotx_dm.h"
#endif
#if defined(DEVICE_MODEL_GATEWAY)
extern int iot_linkkit_subdev_query_id(char product_key[IOTX_PRODUCT_KEY_LEN + 1], char device_name[IOTX_DEVICE_NAME_LEN + 1]);
#endif
int IOT_Ioctl(int option, void *data)
{
int res = SUCCESS_RETURN;
sdk_impl_ctx_t *ctx = NULL;
ctx = &g_sdk_impl_ctx;
if (option < 0 || data == NULL) {
return FAIL_RETURN;
}
switch (option) {
case IOTX_IOCTL_SET_REGION: {
ctx->domain_type = *(iotx_mqtt_region_types_t *)data;
/* iotx_guider_set_region(*(int *)data); */
res = SUCCESS_RETURN;
}
break;
case IOTX_IOCTL_GET_REGION: {
*(iotx_mqtt_region_types_t *)data = ctx->domain_type;
res = SUCCESS_RETURN;
}
break;
case IOTX_IOCTL_SET_MQTT_DOMAIN: {
ctx->domain_type = IOTX_CLOUD_REGION_CUSTOM;
if (strlen(data) > IOTX_DOMAIN_MAX_LEN) {
return FAIL_RETURN;
}
memset(ctx->cloud_custom_domain, 0, strlen((char *)data) + 1);
memcpy(ctx->cloud_custom_domain, data, strlen((char *)data));
g_infra_mqtt_domain[IOTX_CLOUD_REGION_CUSTOM] = (const char *)ctx->cloud_custom_domain;
res = SUCCESS_RETURN;
}
break;
case IOTX_IOCTL_SET_HTTP_DOMAIN: {
ctx->domain_type = IOTX_HTTP_REGION_CUSTOM;
if (strlen(data) > IOTX_DOMAIN_MAX_LEN) {
return FAIL_RETURN;
}
memset(ctx->http_custom_domain, 0, strlen((char *)data) + 1);
memcpy(ctx->http_custom_domain, data, strlen((char *)data));
g_infra_http_domain[IOTX_CLOUD_REGION_CUSTOM] = (const char *)ctx->http_custom_domain;
res = SUCCESS_RETURN;
}
break;
case IOTX_IOCTL_SET_DYNAMIC_REGISTER: {
ctx->dynamic_register = *(int *)data;
res = SUCCESS_RETURN;
}
break;
case IOTX_IOCTL_GET_DYNAMIC_REGISTER: {
*(int *)data = ctx->dynamic_register;
res = SUCCESS_RETURN;
}
break;
#if defined(DEVICE_MODEL_ENABLED) && !defined(DEPRECATED_LINKKIT)
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
case IOTX_IOCTL_RECV_EVENT_REPLY:
case IOTX_IOCTL_RECV_PROP_REPLY: {
res = iotx_dm_set_opt(IMPL_LINKKIT_IOCTL_SWITCH_EVENT_POST_REPLY, data);
}
break;
case IOTX_IOCTL_SEND_PROP_SET_REPLY : {
res = iotx_dm_set_opt(IMPL_LINKKIT_IOCTL_SWITCH_PROPERTY_SET_REPLY, data);
}
break;
#endif
case IOTX_IOCTL_SET_SUBDEV_SIGN: {
/* todo */
}
break;
case IOTX_IOCTL_GET_SUBDEV_LOGIN: {
/* todo */
}
break;
#if defined(DEVICE_MODEL_GATEWAY)
#ifdef DEVICE_MODEL_SUBDEV_OTA
case IOTX_IOCTL_SET_OTA_DEV_ID: {
int devid = *(int *)(data);
res = iotx_dm_ota_switch_device(devid);
}
break;
#endif
#endif
#else
case IOTX_IOCTL_RECV_EVENT_REPLY:
case IOTX_IOCTL_RECV_PROP_REPLY:
case IOTX_IOCTL_SEND_PROP_SET_REPLY:
case IOTX_IOCTL_GET_SUBDEV_LOGIN: {
res = SUCCESS_RETURN;
}
break;
#endif
#if defined(DEVICE_MODEL_GATEWAY)
case IOTX_IOCTL_QUERY_DEVID: {
iotx_dev_meta_info_t *dev_info = (iotx_dev_meta_info_t *)data;
res = iot_linkkit_subdev_query_id(dev_info->product_key, dev_info->device_name);
}
break;
#endif
case IOTX_IOCTL_SET_CUSTOMIZE_INFO: {
if (strlen(data) > IOTX_CUSTOMIZE_INFO_LEN) {
return FAIL_RETURN;
}
memset(ctx->mqtt_customzie_info, 0, strlen((char *)data) + 1);
memcpy(ctx->mqtt_customzie_info, data, strlen((char *)data));
res = SUCCESS_RETURN;
}
break;
default: {
res = FAIL_RETURN;
}
break;
}
return res;
}
void IOT_DumpMemoryStats(IOT_LogLevel level)
{
#ifdef INFRA_MEM_STATS
int lvl = (int)level;
if (lvl > LOG_DEBUG_LEVEL) {
lvl = LOG_DEBUG_LEVEL;
HAL_Printf("Invalid input level, using default: %d => %d", level, lvl);
}
LITE_dump_malloc_free_stats(lvl);
#endif
}
static void *g_event_monitor = NULL;
int iotx_event_regist_cb(void (*monitor_cb)(int event))
{
g_event_monitor = (void *)monitor_cb;
return 0;
}
int iotx_event_post(int event)
{
if (g_event_monitor == NULL) {
return -1;
}
((void (*)(int))g_event_monitor)(event);
return 0;
}
typedef struct {
int eventid;
void *callback;
} impl_event_map_t;
static impl_event_map_t g_impl_event_map[] = {
{ITE_AWSS_STATUS, NULL},
{ITE_CONNECT_SUCC, NULL},
{ITE_CONNECT_FAIL, NULL},
{ITE_DISCONNECTED, NULL},
{ITE_RAWDATA_ARRIVED, NULL},
{ITE_SERVICE_REQUEST, NULL},
{ITE_PROPERTY_SET, NULL},
{ITE_PROPERTY_GET, NULL},
#ifdef DEVICE_MODEL_SHADOW
{ITE_PROPERTY_DESIRED_GET_REPLY, NULL},
#endif
{ITE_REPORT_REPLY, NULL},
{ITE_TRIGGER_EVENT_REPLY, NULL},
{ITE_TIMESTAMP_REPLY, NULL},
{ITE_TOPOLIST_REPLY, NULL},
{ITE_PERMIT_JOIN, NULL},
{ITE_INITIALIZE_COMPLETED, NULL},
{ITE_FOTA, NULL},
{ITE_COTA, NULL},
{ITE_MQTT_CONNECT_SUCC, NULL}
};
void *iotx_event_callback(int evt)
{
if (evt < 0 || evt >= sizeof(g_impl_event_map) / sizeof(impl_event_map_t)) {
return NULL;
}
return g_impl_event_map[evt].callback;
}
DEFINE_EVENT_CALLBACK(ITE_AWSS_STATUS, int (*callback)(int))
DEFINE_EVENT_CALLBACK(ITE_CONNECT_SUCC, int (*callback)(void))
DEFINE_EVENT_CALLBACK(ITE_CONNECT_FAIL, int (*callback)(void))
DEFINE_EVENT_CALLBACK(ITE_DISCONNECTED, int (*callback)(void))
DEFINE_EVENT_CALLBACK(ITE_RAWDATA_ARRIVED, int (*callback)(const int, const unsigned char *, const int))
DEFINE_EVENT_CALLBACK(ITE_SERVICE_REQUEST, int (*callback)(const int, const char *, const int, const char *,
const int, char **, int *))
DEFINE_EVENT_CALLBACK(ITE_PROPERTY_SET, int (*callback)(const int, const char *, const int))
#ifdef DEVICE_MODEL_SHADOW
DEFINE_EVENT_CALLBACK(ITE_PROPERTY_DESIRED_GET_REPLY, int (*callback)(const char *, const int))
#endif
DEFINE_EVENT_CALLBACK(ITE_PROPERTY_GET, int (*callback)(const int, const char *, const int, char **, int *))
DEFINE_EVENT_CALLBACK(ITE_REPORT_REPLY, int (*callback)(const int, const int, const int, const char *,
const int))
DEFINE_EVENT_CALLBACK(ITE_TRIGGER_EVENT_REPLY, int (*callback)(const int, const int, const int, const char *,
const int, const char *, const int))
DEFINE_EVENT_CALLBACK(ITE_TIMESTAMP_REPLY, int (*callback)(const char *))
DEFINE_EVENT_CALLBACK(ITE_TOPOLIST_REPLY, int (*callback)(const int, const int, const int, const char *,
const int))
DEFINE_EVENT_CALLBACK(ITE_PERMIT_JOIN, int (*callback)(const char *, int))
DEFINE_EVENT_CALLBACK(ITE_INITIALIZE_COMPLETED, int (*callback)(const int))
DEFINE_EVENT_CALLBACK(ITE_FOTA, int (*callback)(const int, const char *))
DEFINE_EVENT_CALLBACK(ITE_COTA, int (*callback)(const int, const char *, int, const char *,
const char *, const char *, const char *))
DEFINE_EVENT_CALLBACK(ITE_MQTT_CONNECT_SUCC, int (*callback)(void))
#endif