在一般设备的实际开发中,由于资源受限,每个设备网络连接的数目是受限的。DAS充分考虑到这点,在核心层只定义了DAS相关数据的订阅和分发接口,设备可以根据实际的网络会话上对接DAS服务。
初始化核心服务
void* das_init(const char *product_name, const char *device_name);
设置上下行消息主题
const char* das_pub_topic(void *session,const char *topic);
const char* das_sub_topic(void *session, const char *topic);
说明 如果不单独设置主题,DAS使用缺省主题。
配置网络连接
typedef int (*publish_handle_t)(const char *topic,
const uint8_t *message, size_t msg_size,
void *channel);
void das_connection(void *session,
publish_handle_t publish_handle,
void *channel);
更新连接状态
void das_on_connected(void *session);
void das_on_disconnected(void *session);
void das_on_message(void *session, const uint8_t *message, size_t msg_size);
步进驱动取证服务
das_result_t das_stepping(void *session, uint64_t now);
说明 如果适配定时器函数,则DAS服务缺省由定时器任务驱动。
终止核心服务
void das_final(void *session);
综合示例代码
本示例是基于阿里云Link Kit MQTT的代码片段,完整代码见DAS开发库MQTT示例。
#include "iot_import.h"
#define PRODUCT_KEY "demo_das_product"
#define DEVICE_NAME "demo_das_device_1"
static void *session = null;
static int _on_publish( const char *topic, uint8_t *msg, uint32_t size, void *mqtt)
{
iotx_mqtt_topic_info_t topic_msg;
topic_msg.qos = IOTX_MQTT_QOS1;
topic_msg.payload = (void *)message;
topic_msg.payload_len = length;
return IOT_MQTT_Publish( mqtt, topic, &topic_msg);
}
static void on_message( void *handle, void *pclient, iotx_mqtt_event_msg_pt msg)
{
das_on_message( session, msg.payload, msg.payload_len);
}
int main( int argc, const char argv[][])
{
const char *sub_topic;
mqtt = IOT_MQTT_Construct( &mqtt_params);
session = das_init( PRODUCT_KEY, DEVICE_NAME);
das_connection(session, _on_publish, mqtt);
das_on_connected(session);
sub_topic = das_sub_topic(session, NULL);
IOT_MQTT_Subscribe( mqtt,
sub_topic, IOTX_MQTT_QOS1, on_message, session);
while (IOT_MQTT_Yield(mqtt, 200) != IOT_MQTT_DISCONNECTED) {
...
das_stepping(session, time(NULL));
...
}
das_on_disconnected(session);
das_final(session);
return 0;
}