ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Revision:
47:9e361da97763
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DuerOS-Light-SDK-v1.1.0/duer-os-light/src/iot-baidu-ca-scheduler/baidu_ca_scheduler.h	Tue Jul 18 16:54:45 2017 +0800
@@ -0,0 +1,176 @@
+// Copyright 2017 Baidu Inc. All Rights Reserved.
+// Author: Su Hao (suhao@baidu.com)
+//
+// Description: Scheduler
+
+#ifndef BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H
+#define BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H
+
+#include "rtos.h"
+#include "baidu_ca.h"
+#include "baidu_ca_handler.h"
+#include "baidu_ca_network_socket.h"
+#include "baidu_util_list.h"
+#include "baidu_ca_object.h"
+
+namespace duer {
+
+class Scheduler : public Handler::OnMessageListener {
+public:
+
+    /**
+     * @brief Scheduler 的事件回调接口
+     */
+    class IOnEvent {
+    public:
+        /**
+         * @brief Scheduler 在启动时的回调函数接口
+         */
+        virtual int on_start() = 0;
+        /**
+         * @brief Scheduler 在停止时的回调函数接口
+         */
+        virtual int on_stop() = 0;
+        /**
+         * @brief Scheduler 在有数据通信时的回调函数接口
+         */
+        virtual int on_action(const char* action) = 0;
+
+    };
+    /**
+     * @brief 获取 Scheduler 的唯一单例引用
+     */
+    static Scheduler& instance();
+    /**
+     * @brief 注册 Scheduler 的事件回调接口
+     * @param[in] listener 事件回调接口
+     * @return 0
+     */
+    int set_on_event_listener(IOnEvent* listener);
+    /**
+     * @brief 添加控制点
+     * @param[in] list_res 待注册的控制点数组
+     * @param[in] list_res_size 控制点数组长度
+     * @return 0
+     */
+    int add_controll_points(const bca_res_t list_res[], bca_size_t list_res_size);
+    /**
+     * @brief 启动 Scheduler
+     * @return 0
+     */
+    int start();
+    /**
+     * @brief 停止 Scheduler
+     * @return 0
+     */
+    int stop();
+    /**
+     * @brief 上报数据 json格式
+     * @param[in] data 具体的数据内容
+     * @return 0
+     */
+    int report(const Object& data);
+    /**
+     * @brief 上报数据 json格式
+     * @param[in] data 数据内容
+     * @param[in] size 数据长度
+     * @return 0
+     */
+    int report(const void* data, size_t size);
+    /**
+     * @brief 回复对端的请求
+     * @param[in] req 请求
+     * @param[in] msg_code 回复的code
+     * @param[in] payload 回复的内容
+     * @return 0
+     */
+    int response(const bca_msg_t* req, int msg_code, const char* payload);
+    /**
+     * @brief 上报语音数据
+     * @param[in] data 语音数据
+     * @param[in] size 语音数据长度
+     * @param[in] eof  是否最后一个数据包
+     * @return 0
+     */
+    int send_content(const void* data, size_t size, bool eof);
+    /**
+     * @brief 清除待处理传输数据
+     * @return 0
+     */
+    int clear_content();
+    /**
+     * @brief handler回调接口
+     * @param[in] message 需要处理的消息
+     * @return true
+     */
+    virtual bool on_message(Message& message);
+
+private:
+
+    Scheduler();
+
+    virtual ~Scheduler();
+
+    void data_available(const bca_addr_t* addr);
+
+    int start_handle();
+
+    int stop_handle();
+
+    int report_handle(Message& message);
+
+    int data_available_handle(Message& message);
+
+    void keep_alive_handle();
+
+    void timer_callback();
+
+    int report_list_clear();
+
+    int on_start(int status);
+
+    int on_stop();
+
+    int on_action(const char* action);
+
+    static bca_status_t play_uri(bca_context ctx, bca_msg_t* msg, bca_addr_t* addr);
+
+    static bca_status_t update_package(bca_context ctx,
+                                       bca_msg_t* msg,
+                                       bca_addr_t* addr);
+
+    static bca_status_t output_result(bca_context ctx,
+                                      bca_msg_t* msg,
+                                      bca_addr_t* addr);
+
+    IOnEvent*           _on_event_listener;
+
+    Handler             _event_handler;
+
+    bca_handler         _handler;
+
+    int                 _state;
+
+    rtos::Mutex         _mutex;
+
+    rtos::RtosTimer     _timer;
+
+    unsigned int        _start_timeout;
+
+    duer::SocketAdapter::Callback  _on_read_callback;
+
+    bu_list_t           _send_list;
+
+    mbed::Timer         _stop_timer;
+
+    unsigned int        _stop_timeout;
+
+    int                 _topic_id;
+    bool                _enable_ota;
+
+    static Scheduler    _s_scheduler;
+};
+
+} // namespace duer
+
+#endif // BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H