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.
MuRata.cpp
- Committer:
- yangcq88517
- Date:
- 2015-02-08
- Revision:
- 7:a71d7c24afc0
- Parent:
- 6:2efbb7a3ca36
- Child:
- 8:5856c23794b1
File content as of revision 7:a71d7c24afc0:
#include "MuRata.h" using namespace SmartLabMuRata; MuRata::MuRata(PinName tx, PinName rx) { serial = new Serial(tx,rx); serial->format(); serial->baud(DEFAULT_BAUDRATE ); } MuRata::MuRata(PinName tx, PinName rx, int baudrate ,int bits, Serial::Parity parity, int stop_bits) { serial = new Serial(tx,rx); serial->format(bits, parity, stop_bits); serial->baud(baudrate ); } SSIDRecordIndication * MuRata::Get_ScanResultIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_SCAN_RESULT_IND) return new SSIDRecordIndication(&_payload); return NULL; } WIFIConnectionIndication * MuRata::Get_WiFiStatusIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_NETWORK_STATUS_IND) return new WIFIConnectionIndication(&_payload); return NULL; } PowerUpIndication * MuRata::Get_PowerUpIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_PWR_UP_IND) return new PowerUpIndication(&_payload); return NULL; } TCPStatusIndication * MuRata::Get_TcpConnectionStatusIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_TCP_CONNECTION_STATUS_IND) return new TCPStatusIndication(&_payload); return NULL; } SocketReceiveInidcation * MuRata::Get_SocketReceiveIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CONNECTION_RECV_IND) return new SocketReceiveInidcation(&_payload); return NULL; } UDPReceivedIndication * MuRata::Get_UDPReceiveIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_RECV_IND) return new UDPReceivedIndication(&_payload); return NULL; } HTTPResponseIndication * MuRata::Get_HTTPResponseIndication() { while (FrameReceive()) if (_payload.GetResponseFlag() == Request_Indication && _frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_HTTP_RSP_IND) return new HTTPResponseIndication(&_payload); return NULL; } void MuRata::Send() { _frame.SetACKRequired(false); _payload.SetResponseFlag(Request_Indication); serial->putc(UARTFrame::SOM); serial->putc(_frame.GetL0() | 0x80); serial->putc(_frame.GetL1() | 0x80 | (_frame.GetACKRequired() ? 0x40 : 0x00)); serial->putc(_frame.GetCommandID() | 0x80); for (int i = 0; i < _payload.GetPosition(); i++) serial->putc(_payload.GetData()[i]); serial->putc(_frame.GetChecksum() | 0x80); serial->putc(UARTFrame::EOM); } bool MuRata::FrameReceive() { int value = serial->getc(); while (value != UARTFrame::SOM) value = serial->getc(); _frame.SetL0(serial->getc()); _frame.SetL1(serial->getc()); _frame.SetCommandID(serial->getc()); int _size = _frame.GetPayloadLength(); _payload.Allocate(_size); while (_payload.GetPosition() < _size) _payload.SetContent(serial->getc()); _frame.SetChecksum(serial->getc()); if (serial->getc() == UARTFrame::EOM && _frame.VerifyChecksum()) return true; else return false; } VersionInfoResponse * MuRata::GEN_GetFirmwareVersionInfo() { _payload.Rewind(); _payload.SetSubCommandID(GEN_FW_VER_GET_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_GEN); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_FW_VER_GET_REQ) return new VersionInfoResponse(&_payload); return NULL; } CMDCode MuRata::GEN_RestoreNVMtoFactoryDefault() { _payload.Rewind(); _payload.SetSubCommandID(GEN_RESTORE_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_GEN); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_RESTORE_REQ) return (CMDCode)_payload.GetData()[2]; return GEN_NORESPONSE; } CMDCode MuRata::GEN_SoftReset() { _payload.Rewind(); _payload.SetSubCommandID(GEN_RESET_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_GEN); _frame.SetPayload(&_payload); Send(); 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) { _payload.Rewind(); _payload.SetSubCommandID(GEN_UART_CFG_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(config.GetValue(), 0, 6); _frame.SetCommandID(CMD_ID_GEN); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_UART_CFG_REQ) return (CMDCode)_payload.GetData()[2]; return GEN_NORESPONSE; } WIFICode MuRata::WIFI_TurnOn() { _payload.Rewind(); _payload.SetSubCommandID(WIFI_ON_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); /* * Country code is a 2-character ASCII string. E.g., “US” = the United States. For the complete list, see Appendix A. The default country code is “US”, which is one of the startup parameters in NVM. If the WIFI_ON_REQ has no intention of changing the country code, put 0x0000 in the two-byte Country code, so that the firmware will use the country code configured in NVM. */ _payload.SetContent(0x00); _payload.SetContent(0x00); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_ON_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFICode MuRata::WIFI_TurnOff() { _payload.Rewind(); _payload.SetSubCommandID(WIFI_OFF_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_OFF_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFICode MuRata::WIFI_SoftAPControl(SoftAPConfig * config) { _payload.Rewind(); _payload.SetSubCommandID(WIFI_AP_CTRL_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(config->GetOnOffStatus()); _payload.SetContent(config->GetPersistency()); if (config->GetOnOffStatus() == 0x02) { int length = strlen(config->GetSSID()); _payload.SetContent(config->GetSSID(), 0 , length); _payload.SetContent(0x00); } _payload.SetContent(config->GetChannel()); _payload.SetContent(config->GetSecurityMode()); int keyLength = strlen(config->GetSecurityKey()); _payload.SetContent(keyLength); if (config->GetSecurityMode() != WIFI_SECURITY_OPEN && keyLength > 0) _payload.SetContent(config->GetSecurityKey(), 0 , keyLength); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_AP_CTRL_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFICode MuRata::WIFI_AssociateNetwork(WIFINetwork * AP) { _payload.Rewind(); _payload.SetSubCommandID(WIFI_JOIN_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(AP->GetSSID(), 0, strlen(AP->GetSSID())); _payload.SetContent(0x00); _payload.SetContent(AP->GetSecurityMode()); int keyLength = strlen(AP->GetSecurityKey()); _payload.SetContent(keyLength); if (keyLength > 0) _payload.SetContent(AP->GetSecurityKey(), 0, keyLength); if (AP->GetBSSID() != NULL) { _payload.SetContent(AP->GetChannel()); _payload.SetContent(AP->GetBSSID(), 0, 6); } _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_JOIN_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFICode MuRata::WIFI_DisconnectNetwork() { _payload.Rewind(); _payload.SetSubCommandID(WIFI_DISCONNECT_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_DISCONNECT_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFIStatusResponse * MuRata::WIFI_GetStatus(const WIFIInterface WiFiInterface) { _payload.Rewind(); _payload.SetSubCommandID(WIFI_GET_STATUS_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(WiFiInterface); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STATUS_REQ) return new WIFIStatusResponse(&_payload); return NULL; } int MuRata::WIFI_GetRSSI() { _payload.Rewind(); _payload.SetSubCommandID(WIFI_GET_STA_RSSI_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (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; } return 127; } WIFICode MuRata::WIFI_StartWPSProcess(const WPSMode mode, const char * pin, int pinLength) { _payload.Rewind(); _payload.SetSubCommandID(WIFI_WPS_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(mode); if (mode == Pin) { if (Pin == NULL) return WIFI_NORESPONSE; _payload.SetContent(pin, 0 , pinLength); _payload.SetContent(0x00); } _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_WPS_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } WIFICode MuRata::WIFI_ScanNetworks(const ScanType scan, const BSSType bss) { /* * This command instructs the module to scan available networks. Parameters are as follows: * UINT8 Request Sequence * UINT8 Scan Type * UINT8 BSS Type * UINT8 BSSID [6] * UINT8 Channel list [] * UINT8 SSID[] * BSSID, Channel List, and SSID are optional fields. All 0’s for BSSID, Channel list or SSID indicates it is not present. * - Scan Type: 0 = Active scan, 1= Passive scan * - BSS Type: 0 = Infrastructure, 1 = ad hoc, 2 = any * - BSSID: 6 bytes MAC address of the AP or STA. 6 bytes of 0’s indicates it is not present. * - Channel list: 0 terminated array, up to 10 array elements. * - SSID: 0 terminated string for the AP or STA SSID, up to 33 bytes including NUL-termination. */ _payload.Rewind(); _payload.SetSubCommandID(WIFI_SCAN_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(scan); _payload.SetContent(bss); for (int i = 0; i < 8; i++) _payload.SetContent(0x00); _frame.SetCommandID(CMD_ID_WIFI); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_SCAN_REQ) return (WIFICode)_payload.GetData()[2]; return WIFI_NORESPONSE; } InitializationResponse * MuRata::SNIC_Initialization(int receiveBufferSize) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_INIT_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(receiveBufferSize >> 8); _payload.SetContent(receiveBufferSize); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_INIT_REQ) return new InitializationResponse(&_payload); return NULL; } SNICCode MuRata::SNIC_Cleanup() { _payload.Rewind(); _payload.SetSubCommandID(SNIC_CLEANUP_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLEANUP_REQ) return (SNICCode)_payload.GetData()[2]; return SNIC_NORESPONSE; } SendFromSocketResponse * MuRata::SNIC_SendFromSocket(const char SocketID, const SocketSentOption option, const char * payload, int offset, int length) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_SEND_FROM_SOCKET_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(SocketID); _payload.SetContent(option); _payload.SetContent(length >> 8); _payload.SetContent(length); _payload.SetContent(payload, offset, length); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_SEND_FROM_SOCKET_REQ) return new SendFromSocketResponse(&_payload); return NULL; } SNICCode MuRata::SNIC_SloseSocket(const char SocketID) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_CLOSE_SOCKET_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(SocketID); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLOSE_SOCKET_REQ) return (SNICCode)_payload.GetData()[2]; return SNIC_NORESPONSE; } DHCPInfoResponse * MuRata::SNIC_GetDHCPInfo(const WIFIInterface wifiInterface) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_GET_DHCP_INFO_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(wifiInterface); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_GET_DHCP_INFO_REQ) return new DHCPInfoResponse(&_payload); return NULL; } bool MuRata::SNIC_ResolveHostName(const char * host, IPAddress * ip) { int hostLength = strlen(host); _payload.Rewind(); _payload.SetSubCommandID(SNIC_RESOLVE_NAME_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(STA); _payload.SetContent(hostLength); _payload.SetContent(host, 0, hostLength); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); 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; } return false; } SNICCode MuRata::SNIC_ConfigureDHCPorStaticIP(DHCPConfig * config) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_IP_CONFIG_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(config->GetInterface()); _payload.SetContent(config->GetDHCPMode()); if (config->GetDHCPMode() != dynamic_IP) { _payload.SetContent(config->GetLocalIP()->GetValue(), 0, 4); _payload.SetContent(config->GetNetmask()->GetValue(), 0, 4); _payload.SetContent(config->GetGatewayIP()->GetValue(), 0, 4); } if (config->GetDHCPMode() == soft_AP) { _payload.SetContent(config->GetIPRangeFirst()->GetValue(), 0, 4); _payload.SetContent(config->GetIPRangeLast()->GetValue(), 0, 4); } _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_IP_CONFIG_REQ) return (SNICCode)_payload.GetData()[2]; return SNIC_NORESPONSE; } SocketStartReceiveResponse * MuRata::SNIC_ConnectTCPServer(const char SocketID, IPAddress * remoteIP, const int remotePort, const char timeout, const int receiveBufferSize) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_TCP_CONNECT_TO_SERVER_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(SocketID); _payload.SetContent(remoteIP->GetValue(), 0, 4); _payload.SetContent((remotePort >> 8)); _payload.SetContent(remotePort); _payload.SetContent((receiveBufferSize >> 8)); _payload.SetContent(receiveBufferSize); _payload.SetContent(timeout); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_TCP_CONNECT_TO_SERVER_REQ) return new SocketStartReceiveResponse(&_payload); return NULL; } CreateSocketResponse * MuRata::SNIC_CreateTCPSocket(const bool bind, IPAddress * localIP, const int localPort) { return SNIC_CreateSocket(SNIC_TCP_CREATE_SOCKET_REQ, bind, localIP, localPort); } CreateSocketResponse * MuRata::SNIC_CreateUDPSocket(const bool bind, IPAddress * localIP, const int localPort) { return SNIC_CreateSocket(SNIC_UDP_CREATE_SOCKET_REQ, bind, localIP, localPort); } CreateSocketResponse * MuRata::SNIC_CreateSocket(const SubCommandID subID, const bool bind, IPAddress * localIP, const int localPort) { _payload.Rewind(); _payload.SetSubCommandID(subID); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(bind ? 0x01 : 0x00); if (bind) { if (localIP != NULL) _payload.SetContent(localIP->GetValue(), 0, 4); else { _payload.SetContent(0x00); _payload.SetContent(0x00); _payload.SetContent(0x00); _payload.SetContent(0x00); } _payload.SetContent(localPort >> 8); _payload.SetContent(localPort); } _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == subID) return new CreateSocketResponse(&_payload); return NULL; } SocketStartReceiveResponse * MuRata::SNIC_StartUDPReceive(const char SocketID, const int receiveBufferSize) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_UDP_START_RECV_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(SocketID); _payload.SetContent(receiveBufferSize >> 8); _payload.SetContent(receiveBufferSize); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_START_RECV_REQ) return new SocketStartReceiveResponse(&_payload); return NULL; } SendFromSocketResponse * MuRata::SNIC_SendUDPPacket(IPAddress * remoteIP, const int remotePort, const char * payload, int offset, int length) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_UDP_SIMPLE_SEND_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(remoteIP->GetValue(), 0 ,4); _payload.SetContent(remotePort >> 8); _payload.SetContent(remotePort); _payload.SetContent(length >> 8); _payload.SetContent(length); _payload.SetContent(payload, offset, length); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SIMPLE_SEND_REQ) return new SendFromSocketResponse(&_payload); return NULL; } SendFromSocketResponse * MuRata::SNIC_SendUDPFromSocket(IPAddress * remoteIP, const int remotePort, const char SocketID, const bool connectServer, const char * payload, int offset, int length) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_UDP_SEND_FROM_SOCKET_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(remoteIP->GetValue(),0, 4); _payload.SetContent(remotePort >> 8); _payload.SetContent(remotePort); _payload.SetContent(SocketID); _payload.SetContent(connectServer ? 0x01 : 0x00); _payload.SetContent(length >> 8); _payload.SetContent(length); _payload.SetContent(payload, offset, length); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SEND_FROM_SOCKET_REQ) return new SendFromSocketResponse(&_payload); return NULL; } HTTPResponse * MuRata::SNIC_SendHTTPRequest(HTTPContent * content, const bool isHTTPS, const bool chunked) { SubCommandID _id = (isHTTPS == true) ? SNIC_HTTPS_REQ: SNIC_HTTP_REQ; _payload.Rewind(); _payload.SetSubCommandID(_id); _payload.SetFrameID(_payload.GetFrameID() + 1); _payload.SetContent(content->GetRemotePort() >> 8); _payload.SetContent(content->GetRemotePort()); _payload.SetContent(content->GetMethod()); _payload.SetContent(content->GetTimeout()); _payload.SetContent(content->GetRemoteHost(), 0, strlen(content->GetRemoteHost())); _payload.SetContent(0x00); _payload.SetContent(content->GetURI(), 0, strlen(content->GetURI())); _payload.SetContent(0x00); _payload.SetContent(content->GetContentType(), 0, strlen(content->GetContentType())); _payload.SetContent(0x00); string _others; content->GetOtherHeaders(&_others); _payload.SetContent(_others.c_str(), 0, _others.length()); _payload.SetContent(0x00); if (content->GetMethod() == POST) { int length = content->GetContentLength(); char msb = length >> 8; if (chunked) msb |= 0x80; else msb &= 0x7F; _payload.SetContent(msb); _payload.SetContent(length); if (length > 0) _payload.SetContent(content->GetBody(), 0, length); } _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == _id) return new HTTPResponse(&_payload); return NULL; } HTTPResponse * MuRata::SNIC_SendHTTPMoreRequest(HTTPContent * content, const bool chunked) { _payload.Rewind(); _payload.SetSubCommandID(SNIC_HTTP_MORE_REQ); _payload.SetFrameID(_payload.GetFrameID() + 1); int length = content->GetContentLength(); char msb = length; if (chunked) msb |= 0x80; else msb &= 0x7F; _payload.SetContent(msb); _payload.SetContent(length); if (length > 0) _payload.SetContent(content->GetBody(), 0, length); _frame.SetCommandID(CMD_ID_SNIC); _frame.SetPayload(&_payload); Send(); if (chunked) return NULL; while (FrameReceive()) if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_HTTP_MORE_REQ) return new HTTPResponse(&_payload); return NULL; } CreateSocketResponse * MuRata::SNIC_CreateAdvancedTLSTCP(const bool bind, IPAddress * localIP, const int localPort) { return SNIC_CreateSocket(SNIC_TCP_CREATE_ADV_TLS_SOCKET_REQ, bind, localIP, localPort); } CreateSocketResponse * MuRata::SNIC_CreateSimpleTLSTCP(const bool bind, IPAddress * localIP, const int localPort) { return SNIC_CreateSocket(SNIC_TCP_CREAET_SIMPLE_TLS_SOCKET_REQ, bind, localIP, localPort); }