Murata RF modules are designed to simplify wireless development and certification by minimizing the amount of RF expertise you need to wirelessly enable a wide range of applications.
Diff: MuRata.cpp
- Revision:
- 9:0ce800923eda
- Parent:
- 8:5856c23794b1
--- a/MuRata.cpp Mon Feb 15 15:17:50 2016 +0000 +++ b/MuRata.cpp Wed Mar 16 15:04:46 2016 +0000 @@ -3,6 +3,9 @@ using namespace SmartLabMuRata; MuRata::MuRata(PinName tx, PinName rx) + : _SSIDRecordIndication(NULL),_WIFIConnectionIndication(NULL),_TCPStatusIndication(NULL),_SocketReceiveInidcation(NULL), + _UDPReceivedIndication(NULL),_HTTPResponseIndication(NULL), + _WIFIStatusResponse(NULL),_InitializationResponse(NULL),_SendFromSocketResponse(NULL),_DHCPInfoResponse(NULL),_SocketStartReceiveResponse(NULL),_CreateSocketResponse(NULL),_HTTPResponse(NULL) { serial = new Serial(tx,rx); serial->format(); @@ -10,10 +13,13 @@ } MuRata::MuRata(PinName tx, PinName rx, int baudrate ,int bits, Serial::Parity parity, int stop_bits) + : _SSIDRecordIndication(NULL),_WIFIConnectionIndication(NULL),_TCPStatusIndication(NULL),_SocketReceiveInidcation(NULL), + _UDPReceivedIndication(NULL),_HTTPResponseIndication(NULL), + _WIFIStatusResponse(NULL),_InitializationResponse(NULL),_SendFromSocketResponse(NULL),_DHCPInfoResponse(NULL),_SocketStartReceiveResponse(NULL),_CreateSocketResponse(NULL),_HTTPResponse(NULL) { serial = new Serial(tx,rx); serial->format(bits, parity, stop_bits); - serial->baud(baudrate ); + serial->baud(baudrate); } SSIDRecordIndication * MuRata::Get_ScanResultIndication() @@ -21,8 +27,10 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_WIFI - && _payload.GetSubCommandID() == WIFI_SCAN_RESULT_IND) - return new SSIDRecordIndication(&_payload); + && _payload.GetSubCommandID() == WIFI_SCAN_RESULT_IND) { + _SSIDRecordIndication.SetPayload(&_payload); + return &_SSIDRecordIndication; + } return NULL; } @@ -32,21 +40,23 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_WIFI - && _payload.GetSubCommandID() == WIFI_NETWORK_STATUS_IND) - return new WIFIConnectionIndication(&_payload); + && _payload.GetSubCommandID() == WIFI_NETWORK_STATUS_IND) { + _WIFIConnectionIndication.SetPayload(&_payload); + return &_WIFIConnectionIndication; + } return NULL; } -PowerUpIndication * MuRata::Get_PowerUpIndication() +ResetCode MuRata::Get_PowerUpIndication() { if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_PWR_UP_IND) - return new PowerUpIndication(&_payload); + return (ResetCode)(_payload.GetData()[2] << 8 | _payload.GetData()[3]); - return NULL; + return N0_Indication; } TCPStatusIndication * MuRata::Get_TcpConnectionStatusIndication() @@ -54,8 +64,10 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC - && _payload.GetSubCommandID() == SNIC_TCP_CONNECTION_STATUS_IND) - return new TCPStatusIndication(&_payload); + && _payload.GetSubCommandID() == SNIC_TCP_CONNECTION_STATUS_IND) { + _TCPStatusIndication.SetPayload(&_payload); + return &_TCPStatusIndication; + } return NULL; } @@ -65,8 +77,10 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC - && _payload.GetSubCommandID() == SNIC_CONNECTION_RECV_IND) - return new SocketReceiveInidcation(&_payload); + && _payload.GetSubCommandID() == SNIC_CONNECTION_RECV_IND) { + _SocketReceiveInidcation.SetPayload(&_payload); + return &_SocketReceiveInidcation; + } return NULL; } @@ -76,8 +90,10 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC - && _payload.GetSubCommandID() == SNIC_UDP_RECV_IND) - return new UDPReceivedIndication(&_payload); + && _payload.GetSubCommandID() == SNIC_UDP_RECV_IND) { + _UDPReceivedIndication.SetPayload(&_payload); + return &_UDPReceivedIndication; + } return NULL; } @@ -87,8 +103,10 @@ if (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC - && _payload.GetSubCommandID() == SNIC_HTTP_RSP_IND) - return new HTTPResponseIndication(&_payload); + && _payload.GetSubCommandID() == SNIC_HTTP_RSP_IND) { + _HTTPResponseIndication.SetPayload(&_payload); + return &_HTTPResponseIndication; + } return NULL; } @@ -116,20 +134,16 @@ { timer.reset(); timer.start(); - - while (serial->readable() <= 0) - { - if (timer.read_ms() > 1000) - { + + while (serial->readable() <= 0) { + if (timer.read_ms() > 1000) { timer.stop(); return false; } } - timer.stop(); - + int value = serial->getc(); - while (value != UARTFrame::SOM) value = serial->getc(); @@ -151,7 +165,7 @@ else return false; } -VersionInfoResponse * MuRata::GEN_GetFirmwareVersionInfo() +const char * MuRata::GEN_GetFirmwareVersionInfo() { _payload.Rewind(); _payload.SetSubCommandID(GEN_FW_VER_GET_REQ); @@ -162,10 +176,15 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_FW_VER_GET_REQ) - return new VersionInfoResponse(&_payload); - + while (FrameReceive()) { + if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_FW_VER_GET_REQ) { + if (_payload.GetData()[2] == GEN_SUCCESS) { + // set the null for the string + _payload.GetData()[4 + _payload.GetData()[3]] = 0x00; + return _payload.GetData() + 4; + } + } + } return NULL; } @@ -180,7 +199,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_RESTORE_REQ) return (CMDCode)_payload.GetData()[2]; @@ -198,26 +217,26 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_RESET_REQ) return (CMDCode)_payload.GetData()[2]; return GEN_NORESPONSE; } -CMDCode MuRata::GEN_UARTConfiguration(UARTConfig & config) +CMDCode MuRata::GEN_UARTConfiguration(UARTConfig * config) { _payload.Rewind(); _payload.SetSubCommandID(GEN_UART_CFG_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); - _payload.SetContent(config.GetValue(), 0, 6); + _payload.SetContent(config->GetValue(), 0, 6); _frame.SetCommandID(CMD_ID_GEN); _frame.SetPayload(&_payload); Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_UART_CFG_REQ) return (CMDCode)_payload.GetData()[2]; @@ -241,7 +260,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_ON_REQ) return (WIFICode)_payload.GetData()[2]; @@ -259,13 +278,28 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_OFF_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } +/* + * Parameters are as follows: + * UINT8 Request Sequence + * UINT8 Onoff + * UINT8 Persistency + * UINT8 SSID [up to 33] + * UINT8 Channel + * UINT8 Security mode + * UINT8 Security key length (0-64) + * … Security key [ ] + * OnOff = 0 indicates AP is to be turned off. The rest of the parameters are ignored. + * OnOff = 1 indicates turning on soft AP using existing NVM parameters, + * OnOff = 2 indicates turning on AP with the parameters provided. If the soft AP is already on, it is first turned off. + * Persistency=1 indicates the soft AP’s on/off state and parameters (if OnOff = 2) will be saved in NVM. For example, if OnOff =0 and Persistency=1, the soft AP will not be turned on after a reset. + */ WIFICode MuRata::WIFI_SoftAPControl(SoftAPConfig * config) { _payload.Rewind(); @@ -274,25 +308,30 @@ _payload.SetContent(config->GetOnOffStatus()); _payload.SetContent(config->GetPersistency()); - if (config->GetOnOffStatus() == 0x02) { - int length = strlen(config->GetSSID()); - _payload.SetContent(config->GetSSID(), 0 , length); + if (config->GetOnOffStatus() == SoftAPConfig::ON_PARAMETERS) { + const char * ssid = config->GetSSID(); + int length = strlen(ssid); + _payload.SetContent(ssid, 0 , length); _payload.SetContent(0x00); } _payload.SetContent(config->GetChannel()); _payload.SetContent(config->GetSecurityMode()); - int keyLength = strlen(config->GetSecurityKey()); + const char * key = config->GetSecurityKey(); + int keyLength = 0; + if (key != NULL) + keyLength = strlen(key); + _payload.SetContent(keyLength); if (config->GetSecurityMode() != WIFI_SECURITY_OPEN && keyLength > 0) - _payload.SetContent(config->GetSecurityKey(), 0 , keyLength); + _payload.SetContent(key, 0 , keyLength); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_AP_CTRL_REQ) return (WIFICode)_payload.GetData()[2]; @@ -324,7 +363,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_JOIN_REQ) return (WIFICode)_payload.GetData()[2]; @@ -342,7 +381,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_DISCONNECT_REQ) return (WIFICode)_payload.GetData()[2]; @@ -360,14 +399,16 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STATUS_REQ) - return new WIFIStatusResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STATUS_REQ) { + _WIFIStatusResponse.SetPayload(&_payload); + return &_WIFIStatusResponse; + } return NULL; } -int MuRata::WIFI_GetRSSI() +int8_t MuRata::WIFI_GetRSSI() { _payload.Rewind(); _payload.SetSubCommandID(WIFI_GET_STA_RSSI_REQ); @@ -378,15 +419,9 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STA_RSSI_REQ) { - char value = _payload.GetData()[2]; - - if (value >> 7 == 0x01) - return (~(_payload.GetData()[2] - 1) & 0x7F) * -1; - - return value; - } + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STA_RSSI_REQ) + return _payload.GetData()[2]; return 127; } @@ -411,7 +446,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_WPS_REQ) return (WIFICode)_payload.GetData()[2]; @@ -470,9 +505,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_INIT_REQ) - return new InitializationResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_INIT_REQ) { + _InitializationResponse.SetPayload(&_payload); + return &_InitializationResponse; + } return NULL; } @@ -488,7 +525,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLEANUP_REQ) return (SNICCode)_payload.GetData()[2]; @@ -513,9 +550,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_SEND_FROM_SOCKET_REQ) - return new SendFromSocketResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_SEND_FROM_SOCKET_REQ) { + _SendFromSocketResponse.SetPayload(&_payload); + return &_SendFromSocketResponse; + } return NULL; } @@ -532,7 +571,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLOSE_SOCKET_REQ) return (SNICCode)_payload.GetData()[2]; @@ -551,14 +590,16 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_GET_DHCP_INFO_REQ) - return new DHCPInfoResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_GET_DHCP_INFO_REQ) { + _DHCPInfoResponse.SetPayload(&_payload); + return &_DHCPInfoResponse; + } return NULL; } -bool MuRata::SNIC_ResolveHostName(const char * host, IPAddress * ip) +IPAddress * MuRata::SNIC_ResolveHostName(const char * host) { int hostLength = strlen(host); @@ -574,14 +615,14 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_RESOLVE_NAME_REQ) if ((SNICCode)_payload.GetData()[2] == SNIC_SUCCESS) { - ip->SetValue(_payload.GetData(), 3); - return true; + ip.SetValue(_payload.GetData(), 3); + return &ip; } - return false; + return NULL; } SNICCode MuRata::SNIC_ConfigureDHCPorStaticIP(DHCPConfig * config) @@ -608,7 +649,7 @@ Send(); - if (FrameReceive()) + while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_IP_CONFIG_REQ) return (SNICCode)_payload.GetData()[2]; @@ -633,9 +674,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_TCP_CONNECT_TO_SERVER_REQ) - return new SocketStartReceiveResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_TCP_CONNECT_TO_SERVER_REQ) { + _SocketStartReceiveResponse.SetPayload(&_payload); + return &_SocketStartReceiveResponse; + } return NULL; } @@ -676,9 +719,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == subID) - return new CreateSocketResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == subID) { + _CreateSocketResponse.SetPayload(&_payload); + return &_CreateSocketResponse; + } return NULL; } @@ -697,9 +742,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_START_RECV_REQ) - return new SocketStartReceiveResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_START_RECV_REQ) { + _SocketStartReceiveResponse.SetPayload(&_payload); + return &_SocketStartReceiveResponse; + } return NULL; } @@ -721,9 +768,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SIMPLE_SEND_REQ) - return new SendFromSocketResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SIMPLE_SEND_REQ) { + _SendFromSocketResponse.SetPayload(&_payload); + return &_SendFromSocketResponse; + } return NULL; } @@ -747,9 +796,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SEND_FROM_SOCKET_REQ) - return new SendFromSocketResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SEND_FROM_SOCKET_REQ) { + _SendFromSocketResponse.SetPayload(&_payload); + return &_SendFromSocketResponse; + } return NULL; } @@ -780,7 +831,7 @@ _payload.SetContent(_others.c_str(), 0, _others.length()); _payload.SetContent(0x00); - if (content->GetMethod() == POST) { + while (content->GetMethod() == POST) { int length = content->GetContentLength(); char msb = length >> 8; @@ -800,9 +851,11 @@ Send(); - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == _id) - return new HTTPResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == _id) { + _HTTPResponse.SetPayload(&_payload); + return &_HTTPResponse; + } return NULL; } @@ -833,9 +886,11 @@ if (chunked) return NULL; - if (FrameReceive()) - if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_HTTP_MORE_REQ) - return new HTTPResponse(&_payload); + while (FrameReceive()) + if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_HTTP_MORE_REQ) { + _HTTPResponse.SetPayload(&_payload); + return &_HTTPResponse; + } return NULL; }