Givelink 接入
接入介绍
针对一些带网关型或无法直接连接网络的设备,格物云定义了一套 Givelink 协议。
设备使用透传型通讯模块或网关,将基于 Givelink 协议的数据包,通过 TCP/UDP 与格物云进行交互。
接入方案
初始化 Givelink
#include "givelink.h"
char product_key[] = "you_product_key";
char device_token[] = "you_device_token";
givelink_init(product_key, device_token);
givelink_t * data = givelink_new();
uint16_t id = 0;
接收数据包
通过 givelink_recv
来接收来自 uart
/tcp
/udp
/bluetooth
的数据;
uint8_t payload[200];
uint16_t len = 0;
while(true) {
// read from uart or tcp or udp or bluetooth or others
uint8_t c = some_read();
if (givelink_recv(payload, &len, c)) {
break;
} }
处理接收到的数据包
当接收到数据包后,使用 givelink_from_binary
进行处理。
givelink_from_binary(data, payload, len);
注册设备
SDK 需要注册来获取地址码
发送 AUTHREQ
数据包,成功后接收到 AUTHRES
数据包,失败接收到 ERROR
数据包。
if (!givelink_authed()) {
givelink_reset(data);
givelink_set_type(data, AUTHREQ);
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
while(true) {
// read from uart or tcp or udp or bluetooth or others
uint8_t c = some_read();
if (givelink_recv(payload, &len, c)) {
givelink_from_binary(data, payload, len);if (data -> type == AUTHRES) {
uint8_t addr = data -> data;
break;
}if (data -> type == ERROR) {
// do error
break;
}
}
} }
处理请求数据包
当接收到 REQUEST
数据包, 必须反馈 RESPONSE
数据包
if (data -> type == REQUEST) {
givelink_reset(data);
givelink_set_type(data, RESPONSE);"{\"\result": \"OK\"}", 16);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data)); }
发布实时数据
发送 TELEMETRY
数据包,成功后接收到 SUCCESS
数据包,失败接收到 ERROR
数据包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, TELEMETRY);"{\"temperature\": 20.7}", 21);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
发布实时属性
发送 ATTRIBUTE
数据包,成功后接收到 SUCCESS
数据包,失败接收到 ERROR
数据包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, ATTRIBUTE);"{\"switch_1_state\": true}", 24);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
发布心跳包
发送 PING
数据包,成功后接收到 SUCCESS
数据包,失败接收到 ERROR
数据包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, PING);
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));