文件.\src\sdk-impl\impl_linkkit.c
IOT_Linkkit_Open()创建设备id
int IOT_Linkkit_Open(iotx_linkkit_dev_type_t dev_type, iotx_linkkit_dev_meta_info_t *meta_info)
- 输入:设备类型(主设备或从设备)、设备四元组信息,
- 一般是创建主设备,创建成功返回IOTX_DM_LOCAL_NODE_DEVID(0)。
int IOT_Linkkit_Open(iotx_linkkit_dev_type_t dev_type, iotx_linkkit_dev_meta_info_t *meta_info)
{
int res = 0;
if (dev_type < 0 || dev_type >= IOTX_LINKKIT_DEV_TYPE_MAX || meta_info == NULL) {
sdk_err("Invalid Parameter");
return FAIL_RETURN;
}
switch (dev_type) {
case IOTX_LINKKIT_DEV_TYPE_MASTER: {
res = _iotx_linkkit_master_open(meta_info);
if (res == SUCCESS_RETURN) {
res = IOTX_DM_LOCAL_NODE_DEVID;
IOT_RegisterCallback(ITE_REDIRECT, user_redirect_event_handler);
}
}
break;
case IOTX_LINKKIT_DEV_TYPE_SLAVE: {
#ifdef DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_slave_open(meta_info);
#else
res = FAIL_RETURN;
#endif
}
break;
default: {
sdk_err("Unknown Device Type");
res = FAIL_RETURN;
}
break;
}
return res;
}
//进一步调用关系:
static int _iotx_linkkit_master_open(iotx_linkkit_dev_meta_info_t *meta_info)
//包含ALCS、SHADOW、OTA、MESSAGE_CACHE、IPC、设备管理(dm_mgr_init())等初始化工作。
int iotx_dm_open(void)
{
dm_msg_init(); //消息初始化
dm_mgr_init(); //插入设备列表
dm_client_open(); //采用COAP或MQTT连云,目前采用MQTT
}
IOT_Linkkit_Connect(int devid)
- 输入:设备类型(主设备或从设备)、设备四元组信息,
- 一般是创建主设备,创建成功返回IOTX_DM_LOCAL_NODE_DEVID(0)。
int IOT_Linkkit_Connect(int devid)
{
bk_printf("====%s(), devid=%d\n",__func__,devid);
int res = 0;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (devid < 0) {
sdk_err("Invalid Parameter");
return FAIL_RETURN;
}
if (ctx->is_opened == 0) {
return FAIL_RETURN;
}
_iotx_linkkit_mutex_lock();
if (devid == IOTX_DM_LOCAL_NODE_DEVID) {
res = _iotx_linkkit_master_connect();
bk_printf("====%s(),_iotx_linkkit_master_connect ret=%d\n",__func__,res);
} else {
#ifdef DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_subdev_connect(devid, iotx_dm_subdev_connect, NULL, 0);
#else
res = FAIL_RETURN;
#endif
}
_iotx_linkkit_mutex_unlock();
return res;
}
static int _iotx_linkkit_master_connect(void)
{
int res = 0;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
iotx_dm_init_params_t dm_init_params;
if (ctx->is_connected) {
return FAIL_RETURN;
}
ctx->is_connected = 1;
memset(&dm_init_params, 0, sizeof(iotx_dm_init_params_t));
dm_init_params.event_callback = _iotx_linkkit_event_callback;
res = iotx_dm_subscribe(IOTX_DM_LOCAL_NODE_DEVID);
if (res != SUCCESS_RETURN) {
sdk_err("DM Subscribe Failed");
ctx->is_connected = 0;
return FAIL_RETURN;
}
res = iotx_dm_connect(&dm_init_params);
if (res != SUCCESS_RETURN) {
sdk_err("DM Start Failed"); //show err
ctx->is_connected = 0;
return FAIL_RETURN;
}
//Let user event handle at last
iotx_dm_event_types_t type = IOTX_DM_EVENT_INITIALIZED;
_iotx_linkkit_event_callback(type, "{\"devid\":0}");
return SUCCESS_RETURN;
}