this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ATCmdManager.h Source File

ATCmdManager.h

00001 #ifndef __ATCMD_MANAGER_H__
00002 #define __ATCMD_MANAGER_H__
00003 #include <events/mbed_events.h>
00004 #include <mbed.h>
00005 #include <vector>
00006 #include "ATCmdParser.h"
00007 #include "BleManager.h"
00008 #include "WiFiManager.h"
00009 #include "common_config.h"
00010 
00011 #define NUM_UART_OPTIONS       6
00012 #ifndef UBLOX_ODIN_W2_MISC_TIMEOUT
00013 #define UBLOX_ODIN_W2_MISC_TIMEOUT    2000
00014 #endif
00015 
00016 #define OK_RESP    "\r\nOK\r\n"
00017 #define ERROR_RESP "\r\nERROR\r\n"
00018 #define WIFI_BUSY_RESP "\r\nWIFI BUSY\r\n"
00019 #define UART_TIMEOUT_ERROR "\r\nUART TIMEOUT ERROR\r\n"
00020 #define MEMORY_ALLOCATION_ERROR "\r\nMEMORY ALLOCATION ERROR\r\n"
00021 #define BOX_UBLOX_DEMO_TESTING
00022 //extern void print_memory_info();
00023 //extern void blinkLEDs();
00024 class ATCmdManager {
00025 public:
00026     ATCmdManager(PinName tx, PinName rx, uart_config_t *uart_config, 
00027                  events::EventQueue &event_queue, WiFiManager *wifi, 
00028                  MemoryPool<wifi_cmd_message_t, 16> *aT2WiFimPool, 
00029                  Queue<wifi_cmd_message_t, 16> *aT2WiFiCmdQueue, 
00030                  MemoryPool<at_resp_message_t, 16> *wiFi2ATmPool, 
00031                  Queue<at_resp_message_t, 16> *wiFi2ATCmdQueue, 
00032                  MemoryPool<wifi_data_msg_t, PQDSZ> *aT2WiFiDatamPool, 
00033                  Queue<wifi_data_msg_t, PQDSZ> *aT2WiFiDataQueue, 
00034                  MemoryPool<at_data_msg_t, PQDSZ> *wiFi2ATDatamPool, 
00035                  Queue<at_data_msg_t, PQDSZ> *wiFi2ATDataQueue, 
00036                  MemoryPool<at_ble_msg_t, PQDSZ_BLE> *aT2BleDatamPool, 
00037                  Queue<at_ble_msg_t, PQDSZ_BLE> *aT2BleDataQueue, 
00038                  MemoryPool<ble_at_msg_t, PQDSZ_BLE> *ble2ATDatamPool, 
00039                  Queue<ble_at_msg_t, PQDSZ_BLE> *ble2ATDataQueue, 
00040                  startup_config_t *startup_config, bool debug = false);
00041 public:
00042     void runMain();
00043 
00044 
00045 
00046 private:
00047 // UART settings
00048     UARTSerial _serial;
00049     uart_config_t *uart_config;
00050     Mutex _smutex; // Protect serial port access
00051     Mutex _rmutex; // Reset protection
00052     // define event queue
00053     events::EventQueue &_event_queue;
00054     // AT Command Parser
00055     SMDevicePeripheral *blePeripheral;
00056     WiFiManager *wiFiManager;
00057     at_cmd_resp_t at_resp;
00058     at_data_mode_t dataMode;
00059     uint32_t lastHttpRespTime;
00060     uint8_t lastCloudMsgType;
00061     /*  Queue and memory pool for AT to Wifi commands */
00062     MemoryPool<wifi_cmd_message_t, 16> *_aT2WiFimPool;
00063     Queue<wifi_cmd_message_t, 16> *_aT2WiFiCmdQueue;
00064     
00065     /*  Queue and memory pool for WiFi to AT commands */
00066     MemoryPool<at_resp_message_t, 16> *_wiFi2ATmPool;
00067     Queue<at_resp_message_t, 16> *_wiFi2ATCmdQueue;
00068     
00069     /*  Queue and memory pool for AT to WiFi data */
00070     MemoryPool<wifi_data_msg_t, PQDSZ> *_aT2WiFiDatamPool;
00071     Queue<wifi_data_msg_t, PQDSZ> *_aT2WiFiDataQueue;
00072     
00073     
00074     /*  Queue and memory pool for WiFi to AT data */
00075     MemoryPool<at_data_msg_t, PQDSZ> *_wiFi2ATDatamPool;
00076     Queue<at_data_msg_t, PQDSZ> *_wiFi2ATDataQueue;
00077 
00078     /*  Queue and memory pool for AT to BLE data */
00079     MemoryPool<at_ble_msg_t, PQDSZ_BLE> *_aT2BleDatamPool;
00080     Queue<at_ble_msg_t, PQDSZ_BLE> *_aT2BleDataQueue;
00081     
00082     
00083     /*  Queue and memory pool for BLE to AT data */
00084     MemoryPool<ble_at_msg_t, PQDSZ_BLE> *_ble2ATDatamPool;
00085     Queue<ble_at_msg_t, PQDSZ_BLE> *_ble2ATDataQueue;
00086     ATCmdParser _parser;
00087 
00088     
00089     //pointer to wifi response data - should be deleted after processing
00090     at_data_msg_t *resp_data;
00091     //pointer to ble response data - should be deleted after processing
00092     ble_at_msg_t *ble_resp_data;
00093     edm_header_t   edm_hdr;
00094     uint8_t        *rx_buf_ptr;
00095     startup_config_t *startup_config;
00096     int            debug_flags_map;
00097     at_cmd_resp_t  wifiStateControl;
00098 #ifdef BOX_UBLOX_DEMO_TESTING
00099     bool           check_for_at_cmd;
00100 #endif
00101     
00102     // OOB processing
00103     void _process_oob(uint32_t timeout, bool all);
00104     // OOB message handlers
00105     void _oob_startup_hdlr();
00106     void _oob_ok_hdlr();
00107     void _oob_bleRole_hdlr();
00108     void _oob_enable_wifi();
00109     void _oob_wifiMode_err();
00110     void _oob_conn_already();
00111     void _oob_err();
00112     void _oob_echo_off();
00113     void _oob_uart_setup();
00114     void _oob_echo_on();
00115     void _oob_debug_logs_on();
00116     void _oob_debug_logs_off();
00117     void _oob_set_debug_flag();
00118     void _oob_data_mode();
00119     void _oob_get_mac_addr();
00120     void _oob_get_ble_role();
00121     void _oob_ena_ble_peri();
00122     void _oob_get_ble_name();
00123     void _oob_reboot();
00124     void _oob_get_fw_ver();
00125     void _oob_saveSettings_hdlr();
00126     void _oob_scanWiFiNetworks();
00127     void _oob_WiFiStationConfigAction();
00128     void _oob_disconnectWiFiNetwork();
00129     void _oob_setupInternetConnection();
00130     void _oob_factoryReset();
00131     void _oob_deleteConfiguration();
00132     void _oob_setWiFiSSID();
00133     void _oob_setWiFiPWD();
00134     void _oob_setWiFiSecurity();
00135     void _oob_sendHttpMessage();
00136     void _oob_getNetworkStatus();
00137     void _oob_WiFiNetworkStatus();
00138     wifi_config_t init_wifi_config();
00139     const char * sec2str(nsapi_security_t sec);
00140     bool        queueWiFiCommand(wifi_cmd_t cmd);
00141     bool        dequeueATresponse();
00142     bool        queueWiFiDataRequest(wifi_data_msg_t cmd);
00143     bool        dequeueWiFidataResponse();
00144     void        processResponses();
00145     bool        setNextResponse(at_cmd_resp_t resp);    
00146     int         ReadBytes(uint8_t *buf, int maxBytes);
00147     int         readStringBytes(uint8_t *buf, int maxBytes);
00148     bool        validate(edm_header_t edm_header);
00149     bool        createHttpRequest();
00150     http_method str2HttpMethod(const char * methodStr);
00151     void        return_response(bool download=false); 
00152     void        printBufferInHex(const uint8_t *buf, int pLen);
00153     void        outputEDMdata(const uint8_t *buf, int pLen, 
00154                               edm_msg_id_t identifier, edm_msg_type_t type,
00155                               channel_id_t channel_id);
00156     
00157     void        sendAtConfirmation(const char *buf);
00158     void        sendAtConfirmationFreeMpool(const char *buf);
00159     void        sendConnectIndicationFreeMpool(const char *buf);
00160     void        sendAtEvent(const char *buf);
00161     void        sendConnectEvent(const uint8_t *buf, int len);
00162     int         readAtCommandString(char *strbuf, size_t bufLen);
00163     void        updateWiFiMgrStatus();
00164     void        sendBleDataEvent(const char *buf, int len);
00165     void        sendBleAtEvent(const char *buf, int len);
00166     void        sendBleConnectEvent(const char *buf, int len);
00167     void        sendBleDisconnectEvent();
00168     bool        dequeueBleDataResponse();
00169     bool        queueBleDataRequest(at_ble_msg_t data_req);
00170     void        filterHttpResponse();
00171     int         readEDMmodeBytes(uint8_t *rx_buf_ptr, int pLen);
00172     
00173     /**
00174     * Allows timeout to be changed between commands
00175     *
00176     * @param timeout_ms timeout of the connection
00177     */
00178     void set_timeout(uint32_t timeout_ms =  UBLOX_ODIN_W2_MISC_TIMEOUT);
00179 };
00180 #endif // __ATCMD_MANAGER_H__