XIOT SDK C接口开发指南

更新时间:2018-09-17

概述

XIOT SDK C接口为科大讯飞物联网服务的客户端套件接口,用于与讯飞iot服务连接管理。接口采用C语言描述,不限制操作系统,SDK采用单线程运行。

SDK组件

默认支持动态库,也可支持定制静态库。 在linux环境下,文件仅59KB。 运行对线程无特殊要求。

接口

主动调用接口

1.启动

int xiot_start(XIotClient *client);
启动服务。

2.结束

int xiot_end(XIotClient *client);
结束服务

3.设置属性值

int xiot_ set_value( XIotClient *client, const char* pKey, const char* pValue);
设置本地属性值,支持key/value传入方式。

4.获取属性值

int xiot_ get_value( XIotClient *client, const char* pKey, char* pValue);
获取本地属性值

5.阻塞等待

int xiot_ yield(XIotClient *client, int timeout_ms);
阻塞服务等待

6.传输数据到云端

int xiot_post _value( XIotClient *client, XIotType type, cJSON *params, char *event, char *outMid);
向云端设置属性/事件数据,params为属性json数据,event为事件数据,outMid为本次生成的mid。

回调接口

int (*on_ connect)(void *context);
功能:连接成功回调

int (*on_ disconnect)(void *context,void *data);
功能:断网回调

int (*on_ setProperty)(void *context,cJSON *property,char **msg);
功能:云端设置属性回调,云端发起set请求时的回调。
参数:property为云端set的数据。

int (*on_ getProperty)(void *context,cJSON *inParams,cJSON *outParams);
功能:云端获取属性回调,云端发起get请求时的回调。
参数:inParams为请求的json数据;outParams为客户端传送给云端的json数据。

int (*on_ callService)(void *context,cJSON *inParams,cJSON *outParams,char **msg);
功能:云端调用服务回调,云端发起服务时,客户端回到此接口。
参数:inParams云端发起服务的json数据,包括服务名称和输入/输出参数。outParams为客户端执行服务完毕后上传给云端的json数据。

int (*on_ postValue)(void *context,XIotType type,cJSON *data,const char *mid);
功能:客户端上传属性或者事件回调,每执行xiot_post_value 成功后,会回调此接口。
参数:type上传的数据类型,data上传的数据,mid为上传的唯一字符串。

调用流程

  • 1.启动(必要)
    设置初始化,网络连接,回调参数,启动iot连接。

  • 2.设置/获取属性(可选)
    在本地设置属性参数。

  • 3.传输数据到云端(可选)
    向云端上传属性、事件数据。

  • 4.阻塞等待(可选)
    进入阻塞等待状态。

  • 5.结束(必要)
    终结iot连接,释放系统资源。

  • 6.回调(必要) 所有回调请确保同步方式执行,不能长时间阻塞回调。

Sample

    //连接服务host  
    <#define XIOT_MQTT_HOST  "iot.i4box.com"   
    //连接服务端口  
    <#define XIOT_MQTT_PORT  1883   
    //设备名称   
    <#define XIOT_DEVICENAME "XXXXXXXXXX"  
    //产品key  
    <#define XIOT_PRODUCT_KEY "XXXXXXXXXX"  
    //设备秘钥  
    <#define XIOT_DEVICE_SECRET "XXXXXXXXXX"  
    //client id  
    <#define XIOT_MQTT_CLIENT_ID "XXXXXXXXXX"   
    //thine名称,暂无作用  
    <#define XIOT_MY_THING_NAME  "XXXXXXXXXX"   

    //xiot客户端根数据
    XIotClient xIotClientData;

    //设置连接初始化参数
    IOT_INFO("Set Init Params");
    xIotClientData.initParams.pHost = XIOT_MQTT_HOST;
    xIotClientData.initParams.port = XIOT_MQTT_PORT;
    xIotClientData.initParams.pClientCRT = clientCRT;
    xIotClientData.initParams.pClientKey = clientKey;
    xIotClientData.initParams.pRootCA = rootCA;
    //打开断网自动连接
    xIotClientData.initParams.enableAutoReconnect = true;

    //设置网络连接参数
    IOT_INFO("Set Connect Params");
    xIotClientData.connectParams.keepAliveIntervalInSec = 30;//30s
    xIotClientData.connectParams.pMyThingName = XIOT_MY_THING_NAME;
    xIotClientData.connectParams.pMqttClientId = XIOT_MQTT_CLIENT_ID;
    xIotClientData.connectParams.mqttClientIdLen = (uint16_t) strlen(XIOT_MQTT_CLIENT_ID);
    xIotClientData.connectParams.pMqttProductKey = XIOT_PRODUCT_KEY;
    xIotClientData.connectParams.MqttProductKeyLen = (uint16_t) strlen(XIOT_PRODUCT_KEY);
    xIotClientData.connectParams.pDeviceName = XIOT_DEVICENAME;
    xIotClientData.connectParams.deviceNameLen = strlen(XIOT_DEVICENAME);
    xIotClientData.connectParams.pDeviceSecret = XIOT_DEVICE_SECRET;
    xIotClientData.connectParams.deviceSecretLen = strlen(XIOT_DEVICE_SECRET);

    //设置服务回调
    IOT_INFO("Set Callback Params");
    xIotClientData.cb.on_connect = on_connect;
    xIotClientData.cb.on_disconnect = on_disconnect;
    xIotClientData.cb.on_setProperty = on_setProperty;
    xIotClientData.cb.on_getProperty = on_getProperty;
    xIotClientData.cb.on_callService = on_callService;
    xIotClientData.cb.on_postValue = on_postValue;

    //属性sample
    char *key = "color";
    char value[255]={"red"};

    //启动服务
    rc = xiot_start(&xIotClientData);

    //构建属性json数据
    char mid[MID_LEN+1]={0};
     cJSON *propertyJson1 = cJSON_CreateObject();
     cJSON_AddStringToObject(propertyJson1, key, value);

    //上传属性数据
     rc = xiot_post_value(&xIotClientData,xiot_property_type,propertyJson1,NULL,mid);

     IOT_INFO("xiot_post_value rc=%d,mid=%s",rc,mid);

     if(rc != SUCCESS){
        return;
     }

     //构建属性数据
     char *event = "{event.identifier}";

     cJSON *propertyJson2 = cJSON_CreateObject();
     cJSON_AddStringToObject(propertyJson2, key, value);

     //上传事件数据
     rc = xiot_post_value(&xIotClientData,xiot_event_type,propertyJson2,event,mid);

     IOT_INFO("xiot_post_value rc=%d,mid=%s",rc,mid);

     if(rc != SUCCESS){
         return;
     }

     //阻塞等待
     while(1){
        xiot_yield(&xIotClientData,100);
        sleep(1);
    }

    //终结服务
    xiot_end(&xIotClientData);

错误码

错误码 描述 备注
4 网络断开尝试重连 检查网络
0 操作成功 -
-1 操作失败 -
-2 参数不能为空 检查参数
-13 连接失败或连接被关闭 检查产品设备参数、网络状态
-14 网络断开尝试重连超时 检查网络
-15 网络已连接尝试重连 -
-26 MQTT连接错误 -
-28 MQTT请求超时 -
-30 MQTT连接不可用 检查网络
-54 上线认证错误 检查产品或设备参数
-55 下线认证错误 检查产品或设备参数
-56 上线参数错误 检查参数
-57 时间戳错误 -
-58 设备未激活 -
-59 产品或设备不存在 -
-60 签名认证错误 -

results matching ""

    No results matching ""