NB-IOT移植移动onenet基础通信套件之Object_ID,实例ID,资源ID

1. 访问是按照分层的,Object_ID/实例ID/资源ID,对应每一层ID的数据类型,目前是分为3层,一个实例下面可以有多个实例id,对下面的数据结构来说,如果是资源ID的话,类型只能是asBuffer,asBoolean,asInteger,asFloat,如果是实例ID的话,则是asChildren的类型,这个asChildren是个数据,包含实例ID下面所有的资源ID。

struct st_cis_data
{
    uint16_t             id;
    cis_datatype_t      type;
    struct
    {
        uint32_t    length;
        uint8_t*    buffer;
    }asBuffer;
    union
    {
        bool            asBoolean;
        int64_t         asInteger;
        double          asFloat;
        struct
        {
            uint32_t    count;
            struct st_cis_data* array;
        }asChildren;
        struct
        {
            cis_oid_t     objectId;
            cis_iid_t     instId;
        }asObjLink;
    } value;
} ;

2. 结构体,其中flag代表,后面的3个数据那个是有的,比如flag = 0x110,就是有object ID和实例ID,在大部分情况下,假如某个为0的话(假如实例ID为0),就是指该object ID下面所有的实例ID。

struct st_uri
{
    uint8_t      flag;           // indicates which segments are set
    cis_oid_t    objectId;
    cis_iid_t    instanceId;
    cis_rid_t    resourceId;
};

3. 按照上面的,我的代码并没有实现吗,该指令是一个读取请求消息,如果资源ID,resourceid =‘-1’,则该指令会携带count,代表需要读取该instance下的所有资源,假设是工作服务器的读操作,那么AT+MIPLREADRSP指令里面的值要怎么填写,对AT来说就是字符串,那么指令需要去解析,但是目前根据文档,就是说如果服务下发的是读取实例下面的所有资源,那么这个指令将无法去上传,只能一次一个资源。算了,先按照3级全部在的情况搞吧。

< valuetype >:发送的数据类型
发送的数据类型要求如下:
string =1,//字符串型
opaque=2,//不透明类型
integer=3,//整型
float=4,//浮点型
bool=5,//布尔型
<len>:读取的数据长度
<value>:发送的数据值

4. 在此厘清楚object ID,实例ID,资源ID这三个的关系,object ID是分类,比如温度传感器,电池电量,就是两个不同的object ID,然后有2个温度传感器,那么温度传感器A和温度传感器B就是2个实例,资源就是传感器的数据和状态等。object ID,实例ID这两者有点像JAVA语言里面的类和对象。如下是国际组织定义好的object ID。

5. 如下是国际组织定义好的资源 ID。实例ID这个就是第几个设备的编号,按数量就行,不需要定义的。

原文地址:https://www.cnblogs.com/429512065qhq/p/8317232.html