在一般设备的实际开发中,由于资源受限,每个设备网络连接的数目是受限的。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;
}