ex
Fork of mbed-os-example-mbed5-blinky by
Embed:
(wiki syntax)
Show/hide line numbers
baidu_ca_scheduler.h
00001 // Copyright 2017 Baidu Inc. All Rights Reserved. 00002 // Author: Su Hao (suhao@baidu.com) 00003 // 00004 // Description: Scheduler 00005 00006 #ifndef BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H 00007 #define BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H 00008 00009 #include "rtos.h" 00010 #include "baidu_ca.h" 00011 #include "baidu_ca_handler.h" 00012 #include "baidu_ca_network_socket.h" 00013 #include "baidu_util_list.h" 00014 #include "baidu_ca_object.h" 00015 00016 namespace duer { 00017 00018 class Scheduler : public Handler::OnMessageListener { 00019 public: 00020 00021 /** 00022 * @brief Scheduler 的事件回调接口 00023 */ 00024 class IOnEvent { 00025 public: 00026 /** 00027 * @brief Scheduler 在启动时的回调函数接口 00028 */ 00029 virtual int on_start() = 0; 00030 /** 00031 * @brief Scheduler 在停止时的回调函数接口 00032 */ 00033 virtual int on_stop() = 0; 00034 /** 00035 * @brief Scheduler 在有数据通信时的回调函数接口 00036 */ 00037 virtual int on_action(const char* action) = 0; 00038 00039 }; 00040 /** 00041 * @brief 获取 Scheduler 的唯一单例引用 00042 */ 00043 static Scheduler& instance(); 00044 /** 00045 * @brief 注册 Scheduler 的事件回调接口 00046 * @param[in] listener 事件回调接口 00047 * @return 0 00048 */ 00049 int set_on_event_listener(IOnEvent* listener); 00050 /** 00051 * @brief 添加控制点 00052 * @param[in] list_res 待注册的控制点数组 00053 * @param[in] list_res_size 控制点数组长度 00054 * @return 0 00055 */ 00056 int add_controll_points(const bca_res_t list_res[], bca_size_t list_res_size); 00057 /** 00058 * @brief 启动 Scheduler 00059 * @return 0 00060 */ 00061 int start(); 00062 /** 00063 * @brief 停止 Scheduler 00064 * @return 0 00065 */ 00066 int stop(); 00067 /** 00068 * @brief 上报数据 json格式 00069 * @param[in] data 具体的数据内容 00070 * @return 0 00071 */ 00072 int report(const Object& data); 00073 /** 00074 * @brief 上报数据 json格式 00075 * @param[in] data 数据内容 00076 * @param[in] size 数据长度 00077 * @return 0 00078 */ 00079 int report(const void* data, size_t size); 00080 /** 00081 * @brief 回复对端的请求 00082 * @param[in] req 请求 00083 * @param[in] msg_code 回复的code 00084 * @param[in] payload 回复的内容 00085 * @return 0 00086 */ 00087 int response(const bca_msg_t* req, int msg_code, const char* payload); 00088 /** 00089 * @brief 上报语音数据 00090 * @param[in] data 语音数据 00091 * @param[in] size 语音数据长度 00092 * @param[in] eof 是否最后一个数据包 00093 * @return 0 00094 */ 00095 int send_content(const void* data, size_t size, bool eof); 00096 /** 00097 * @brief 清除待处理传输数据 00098 * @return 0 00099 */ 00100 int clear_content(); 00101 /** 00102 * @brief handler回调接口 00103 * @param[in] message 需要处理的消息 00104 * @return true 00105 */ 00106 virtual bool on_message(Message& message); 00107 00108 private: 00109 00110 Scheduler(); 00111 00112 virtual ~Scheduler(); 00113 00114 void data_available(const bca_addr_t* addr); 00115 00116 int start_handle(); 00117 00118 int stop_handle(); 00119 00120 int report_handle(Message& message); 00121 00122 int data_available_handle(Message& message); 00123 00124 void keep_alive_handle(); 00125 00126 void timer_callback(); 00127 00128 int report_list_clear(); 00129 00130 int on_start(int status); 00131 00132 int on_stop(); 00133 00134 int on_action(const char* action); 00135 00136 static bca_status_t play_uri(bca_context ctx, bca_msg_t* msg, bca_addr_t* addr); 00137 00138 static bca_status_t update_package(bca_context ctx, 00139 bca_msg_t* msg, 00140 bca_addr_t* addr); 00141 00142 static bca_status_t output_result(bca_context ctx, 00143 bca_msg_t* msg, 00144 bca_addr_t* addr); 00145 00146 IOnEvent* _on_event_listener; 00147 00148 Handler _event_handler; 00149 00150 bca_handler _handler; 00151 00152 int _state; 00153 00154 rtos::Mutex _mutex; 00155 00156 rtos::RtosTimer _timer; 00157 00158 unsigned int _start_timeout; 00159 00160 duer::SocketAdapter::Callback _on_read_callback; 00161 00162 bu_list_t _send_list; 00163 00164 mbed::Timer _stop_timer; 00165 00166 unsigned int _stop_timeout; 00167 00168 int _topic_id; 00169 bool _enable_ota; 00170 00171 static Scheduler _s_scheduler; 00172 }; 00173 00174 } // namespace duer 00175 00176 #endif // BAIDU_IOT_TINYDU_IOT_OS_SRC_IOT_BAIDU_CA_SCHEDULER_BAIDU_CA_SCHEDULER_H
Generated on Tue Jul 12 2022 16:28:52 by
1.7.2
