ex

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers baidu_ca_scheduler.h Source File

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