ex

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

Committer:
TMBOY
Date:
Tue Jul 18 16:54:45 2017 +0800
Revision:
47:9e361da97763
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMBOY 47:9e361da97763 1 // Copyright 2017 Baidu Inc. All Rights Reserved.
TMBOY 47:9e361da97763 2 // Author: Su Hao (suhao@baidu.com)
TMBOY 47:9e361da97763 3 //
TMBOY 47:9e361da97763 4 // Description: Scheduler
TMBOY 47:9e361da97763 5
TMBOY 47:9e361da97763 6 #ifndef BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H
TMBOY 47:9e361da97763 7 #define BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H
TMBOY 47:9e361da97763 8
TMBOY 47:9e361da97763 9 #include "rtos.h"
TMBOY 47:9e361da97763 10 #include "baidu_ca.h"
TMBOY 47:9e361da97763 11 #include "baidu_ca_handler.h"
TMBOY 47:9e361da97763 12 #include "baidu_ca_network_socket.h"
TMBOY 47:9e361da97763 13 #include "baidu_util_list.h"
TMBOY 47:9e361da97763 14 #include "baidu_ca_object.h"
TMBOY 47:9e361da97763 15
TMBOY 47:9e361da97763 16 namespace duer {
TMBOY 47:9e361da97763 17
TMBOY 47:9e361da97763 18 class Scheduler : public Handler::OnMessageListener {
TMBOY 47:9e361da97763 19 public:
TMBOY 47:9e361da97763 20
TMBOY 47:9e361da97763 21 /**
TMBOY 47:9e361da97763 22 * @brief Scheduler 的事件回调接口
TMBOY 47:9e361da97763 23 */
TMBOY 47:9e361da97763 24 class IOnEvent {
TMBOY 47:9e361da97763 25 public:
TMBOY 47:9e361da97763 26 /**
TMBOY 47:9e361da97763 27 * @brief Scheduler 在启动时的回调函数接口
TMBOY 47:9e361da97763 28 */
TMBOY 47:9e361da97763 29 virtual int on_start() = 0;
TMBOY 47:9e361da97763 30 /**
TMBOY 47:9e361da97763 31 * @brief Scheduler 在停止时的回调函数接口
TMBOY 47:9e361da97763 32 */
TMBOY 47:9e361da97763 33 virtual int on_stop() = 0;
TMBOY 47:9e361da97763 34 /**
TMBOY 47:9e361da97763 35 * @brief Scheduler 在有数据通信时的回调函数接口
TMBOY 47:9e361da97763 36 */
TMBOY 47:9e361da97763 37 virtual int on_action(const char* action) = 0;
TMBOY 47:9e361da97763 38
TMBOY 47:9e361da97763 39 };
TMBOY 47:9e361da97763 40 /**
TMBOY 47:9e361da97763 41 * @brief 获取 Scheduler 的唯一单例引用
TMBOY 47:9e361da97763 42 */
TMBOY 47:9e361da97763 43 static Scheduler& instance();
TMBOY 47:9e361da97763 44 /**
TMBOY 47:9e361da97763 45 * @brief 注册 Scheduler 的事件回调接口
TMBOY 47:9e361da97763 46 * @param[in] listener 事件回调接口
TMBOY 47:9e361da97763 47 * @return 0
TMBOY 47:9e361da97763 48 */
TMBOY 47:9e361da97763 49 int set_on_event_listener(IOnEvent* listener);
TMBOY 47:9e361da97763 50 /**
TMBOY 47:9e361da97763 51 * @brief 添加控制点
TMBOY 47:9e361da97763 52 * @param[in] list_res 待注册的控制点数组
TMBOY 47:9e361da97763 53 * @param[in] list_res_size 控制点数组长度
TMBOY 47:9e361da97763 54 * @return 0
TMBOY 47:9e361da97763 55 */
TMBOY 47:9e361da97763 56 int add_controll_points(const bca_res_t list_res[], bca_size_t list_res_size);
TMBOY 47:9e361da97763 57 /**
TMBOY 47:9e361da97763 58 * @brief 启动 Scheduler
TMBOY 47:9e361da97763 59 * @return 0
TMBOY 47:9e361da97763 60 */
TMBOY 47:9e361da97763 61 int start();
TMBOY 47:9e361da97763 62 /**
TMBOY 47:9e361da97763 63 * @brief 停止 Scheduler
TMBOY 47:9e361da97763 64 * @return 0
TMBOY 47:9e361da97763 65 */
TMBOY 47:9e361da97763 66 int stop();
TMBOY 47:9e361da97763 67 /**
TMBOY 47:9e361da97763 68 * @brief 上报数据 json格式
TMBOY 47:9e361da97763 69 * @param[in] data 具体的数据内容
TMBOY 47:9e361da97763 70 * @return 0
TMBOY 47:9e361da97763 71 */
TMBOY 47:9e361da97763 72 int report(const Object& data);
TMBOY 47:9e361da97763 73 /**
TMBOY 47:9e361da97763 74 * @brief 上报数据 json格式
TMBOY 47:9e361da97763 75 * @param[in] data 数据内容
TMBOY 47:9e361da97763 76 * @param[in] size 数据长度
TMBOY 47:9e361da97763 77 * @return 0
TMBOY 47:9e361da97763 78 */
TMBOY 47:9e361da97763 79 int report(const void* data, size_t size);
TMBOY 47:9e361da97763 80 /**
TMBOY 47:9e361da97763 81 * @brief 回复对端的请求
TMBOY 47:9e361da97763 82 * @param[in] req 请求
TMBOY 47:9e361da97763 83 * @param[in] msg_code 回复的code
TMBOY 47:9e361da97763 84 * @param[in] payload 回复的内容
TMBOY 47:9e361da97763 85 * @return 0
TMBOY 47:9e361da97763 86 */
TMBOY 47:9e361da97763 87 int response(const bca_msg_t* req, int msg_code, const char* payload);
TMBOY 47:9e361da97763 88 /**
TMBOY 47:9e361da97763 89 * @brief 上报语音数据
TMBOY 47:9e361da97763 90 * @param[in] data 语音数据
TMBOY 47:9e361da97763 91 * @param[in] size 语音数据长度
TMBOY 47:9e361da97763 92 * @param[in] eof 是否最后一个数据包
TMBOY 47:9e361da97763 93 * @return 0
TMBOY 47:9e361da97763 94 */
TMBOY 47:9e361da97763 95 int send_content(const void* data, size_t size, bool eof);
TMBOY 47:9e361da97763 96 /**
TMBOY 47:9e361da97763 97 * @brief 清除待处理传输数据
TMBOY 47:9e361da97763 98 * @return 0
TMBOY 47:9e361da97763 99 */
TMBOY 47:9e361da97763 100 int clear_content();
TMBOY 47:9e361da97763 101 /**
TMBOY 47:9e361da97763 102 * @brief handler回调接口
TMBOY 47:9e361da97763 103 * @param[in] message 需要处理的消息
TMBOY 47:9e361da97763 104 * @return true
TMBOY 47:9e361da97763 105 */
TMBOY 47:9e361da97763 106 virtual bool on_message(Message& message);
TMBOY 47:9e361da97763 107
TMBOY 47:9e361da97763 108 private:
TMBOY 47:9e361da97763 109
TMBOY 47:9e361da97763 110 Scheduler();
TMBOY 47:9e361da97763 111
TMBOY 47:9e361da97763 112 virtual ~Scheduler();
TMBOY 47:9e361da97763 113
TMBOY 47:9e361da97763 114 void data_available(const bca_addr_t* addr);
TMBOY 47:9e361da97763 115
TMBOY 47:9e361da97763 116 int start_handle();
TMBOY 47:9e361da97763 117
TMBOY 47:9e361da97763 118 int stop_handle();
TMBOY 47:9e361da97763 119
TMBOY 47:9e361da97763 120 int report_handle(Message& message);
TMBOY 47:9e361da97763 121
TMBOY 47:9e361da97763 122 int data_available_handle(Message& message);
TMBOY 47:9e361da97763 123
TMBOY 47:9e361da97763 124 void keep_alive_handle();
TMBOY 47:9e361da97763 125
TMBOY 47:9e361da97763 126 void timer_callback();
TMBOY 47:9e361da97763 127
TMBOY 47:9e361da97763 128 int report_list_clear();
TMBOY 47:9e361da97763 129
TMBOY 47:9e361da97763 130 int on_start(int status);
TMBOY 47:9e361da97763 131
TMBOY 47:9e361da97763 132 int on_stop();
TMBOY 47:9e361da97763 133
TMBOY 47:9e361da97763 134 int on_action(const char* action);
TMBOY 47:9e361da97763 135
TMBOY 47:9e361da97763 136 static bca_status_t play_uri(bca_context ctx, bca_msg_t* msg, bca_addr_t* addr);
TMBOY 47:9e361da97763 137
TMBOY 47:9e361da97763 138 static bca_status_t update_package(bca_context ctx,
TMBOY 47:9e361da97763 139 bca_msg_t* msg,
TMBOY 47:9e361da97763 140 bca_addr_t* addr);
TMBOY 47:9e361da97763 141
TMBOY 47:9e361da97763 142 static bca_status_t output_result(bca_context ctx,
TMBOY 47:9e361da97763 143 bca_msg_t* msg,
TMBOY 47:9e361da97763 144 bca_addr_t* addr);
TMBOY 47:9e361da97763 145
TMBOY 47:9e361da97763 146 IOnEvent* _on_event_listener;
TMBOY 47:9e361da97763 147
TMBOY 47:9e361da97763 148 Handler _event_handler;
TMBOY 47:9e361da97763 149
TMBOY 47:9e361da97763 150 bca_handler _handler;
TMBOY 47:9e361da97763 151
TMBOY 47:9e361da97763 152 int _state;
TMBOY 47:9e361da97763 153
TMBOY 47:9e361da97763 154 rtos::Mutex _mutex;
TMBOY 47:9e361da97763 155
TMBOY 47:9e361da97763 156 rtos::RtosTimer _timer;
TMBOY 47:9e361da97763 157
TMBOY 47:9e361da97763 158 unsigned int _start_timeout;
TMBOY 47:9e361da97763 159
TMBOY 47:9e361da97763 160 duer::SocketAdapter::Callback _on_read_callback;
TMBOY 47:9e361da97763 161
TMBOY 47:9e361da97763 162 bu_list_t _send_list;
TMBOY 47:9e361da97763 163
TMBOY 47:9e361da97763 164 mbed::Timer _stop_timer;
TMBOY 47:9e361da97763 165
TMBOY 47:9e361da97763 166 unsigned int _stop_timeout;
TMBOY 47:9e361da97763 167
TMBOY 47:9e361da97763 168 int _topic_id;
TMBOY 47:9e361da97763 169 bool _enable_ota;
TMBOY 47:9e361da97763 170
TMBOY 47:9e361da97763 171 static Scheduler _s_scheduler;
TMBOY 47:9e361da97763 172 };
TMBOY 47:9e361da97763 173
TMBOY 47:9e361da97763 174 } // namespace duer
TMBOY 47:9e361da97763 175
TMBOY 47:9e361da97763 176 #endif // BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H