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.

Committer:
yangcq88517
Date:
Thu Feb 05 17:43:18 2015 +0000
Revision:
4:7388451219ee
Parent:
3:90ea1b8b2621
Child:
6:2efbb7a3ca36
Bug Fix, Payload SetContent

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:8e83b9448758 1 #include "MuRata.h"
yangcq88517 0:8e83b9448758 2
yangcq88517 0:8e83b9448758 3 using namespace SmartLabMuRata;
yangcq88517 0:8e83b9448758 4
yangcq88517 0:8e83b9448758 5 MuRata::MuRata(PinName tx, PinName rx)
yangcq88517 0:8e83b9448758 6 {
yangcq88517 0:8e83b9448758 7 serial = new Serial(tx,rx);
yangcq88517 0:8e83b9448758 8 serial->format();
yangcq88517 0:8e83b9448758 9 serial->baud(DEFAULT_BAUDRATE );
yangcq88517 0:8e83b9448758 10 }
yangcq88517 0:8e83b9448758 11
yangcq88517 0:8e83b9448758 12 MuRata::MuRata(PinName tx, PinName rx, int baudrate ,int bits, Serial::Parity parity, int stop_bits)
yangcq88517 0:8e83b9448758 13 {
yangcq88517 0:8e83b9448758 14 serial = new Serial(tx,rx);
yangcq88517 0:8e83b9448758 15 serial->format(bits, parity, stop_bits);
yangcq88517 0:8e83b9448758 16 serial->baud(baudrate );
yangcq88517 0:8e83b9448758 17 }
yangcq88517 0:8e83b9448758 18
yangcq88517 0:8e83b9448758 19 SSIDRecordIndication * MuRata::Get_ScanResultIndication()
yangcq88517 0:8e83b9448758 20 {
yangcq88517 4:7388451219ee 21 while (FrameReceive())
yangcq88517 4:7388451219ee 22 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 23 && _frame.GetCommandID() == CMD_ID_WIFI
yangcq88517 4:7388451219ee 24 && _payload.GetSubCommandID() == WIFI_SCAN_RESULT_IND)
yangcq88517 4:7388451219ee 25 return new SSIDRecordIndication(&_payload);
yangcq88517 0:8e83b9448758 26
yangcq88517 0:8e83b9448758 27 return NULL;
yangcq88517 0:8e83b9448758 28 }
yangcq88517 0:8e83b9448758 29
yangcq88517 0:8e83b9448758 30 WIFIConnectionIndication * MuRata::Get_WiFiStatusIndication()
yangcq88517 0:8e83b9448758 31 {
yangcq88517 4:7388451219ee 32 while (FrameReceive())
yangcq88517 4:7388451219ee 33 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 34 && _frame.GetCommandID() == CMD_ID_WIFI
yangcq88517 4:7388451219ee 35 && _payload.GetSubCommandID() == WIFI_NETWORK_STATUS_IND)
yangcq88517 4:7388451219ee 36 return new WIFIConnectionIndication(&_payload);
yangcq88517 0:8e83b9448758 37
yangcq88517 0:8e83b9448758 38 return NULL;
yangcq88517 0:8e83b9448758 39 }
yangcq88517 0:8e83b9448758 40
yangcq88517 1:fd19bd683e90 41 PowerUpIndication * MuRata::Get_PowerUpIndication()
yangcq88517 1:fd19bd683e90 42 {
yangcq88517 4:7388451219ee 43 while (FrameReceive())
yangcq88517 4:7388451219ee 44 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 45 && _frame.GetCommandID() == CMD_ID_GEN
yangcq88517 4:7388451219ee 46 && _payload.GetSubCommandID() == GEN_PWR_UP_IND)
yangcq88517 4:7388451219ee 47 return new PowerUpIndication(&_payload);
yangcq88517 1:fd19bd683e90 48
yangcq88517 1:fd19bd683e90 49 return NULL;
yangcq88517 1:fd19bd683e90 50 }
yangcq88517 1:fd19bd683e90 51
yangcq88517 1:fd19bd683e90 52 TCPStatusIndication * MuRata::Get_TcpConnectionStatusIndication()
yangcq88517 1:fd19bd683e90 53 {
yangcq88517 4:7388451219ee 54 while (FrameReceive())
yangcq88517 4:7388451219ee 55 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 56 && _frame.GetCommandID() == CMD_ID_SNIC
yangcq88517 4:7388451219ee 57 && _payload.GetSubCommandID() == SNIC_TCP_CONNECTION_STATUS_IND)
yangcq88517 4:7388451219ee 58 return new TCPStatusIndication(&_payload);
yangcq88517 1:fd19bd683e90 59
yangcq88517 1:fd19bd683e90 60 return NULL;
yangcq88517 1:fd19bd683e90 61 }
yangcq88517 1:fd19bd683e90 62
yangcq88517 1:fd19bd683e90 63 SocketReceiveInidcation * MuRata::Get_SocketReceiveIndication()
yangcq88517 1:fd19bd683e90 64 {
yangcq88517 4:7388451219ee 65 while (FrameReceive())
yangcq88517 4:7388451219ee 66 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 67 && _frame.GetCommandID() == CMD_ID_SNIC
yangcq88517 4:7388451219ee 68 && _payload.GetSubCommandID() == SNIC_CONNECTION_RECV_IND)
yangcq88517 4:7388451219ee 69 return new SocketReceiveInidcation(&_payload);
yangcq88517 1:fd19bd683e90 70
yangcq88517 1:fd19bd683e90 71 return NULL;
yangcq88517 1:fd19bd683e90 72 }
yangcq88517 1:fd19bd683e90 73
yangcq88517 1:fd19bd683e90 74 UDPReceivedIndication * MuRata::Get_UDPReceiveIndication()
yangcq88517 1:fd19bd683e90 75 {
yangcq88517 4:7388451219ee 76 while (FrameReceive())
yangcq88517 4:7388451219ee 77 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 78 && _frame.GetCommandID() == CMD_ID_SNIC
yangcq88517 4:7388451219ee 79 && _payload.GetSubCommandID() == SNIC_UDP_RECV_IND)
yangcq88517 4:7388451219ee 80 return new UDPReceivedIndication(&_payload);
yangcq88517 1:fd19bd683e90 81
yangcq88517 1:fd19bd683e90 82 return NULL;
yangcq88517 1:fd19bd683e90 83 }
yangcq88517 1:fd19bd683e90 84
yangcq88517 1:fd19bd683e90 85 HTTPResponseIndication * MuRata::Get_HTTPResponseIndication()
yangcq88517 1:fd19bd683e90 86 {
yangcq88517 4:7388451219ee 87 while (FrameReceive())
yangcq88517 4:7388451219ee 88 if (_payload.GetResponseFlag() == Request_Indication
yangcq88517 4:7388451219ee 89 && _frame.GetCommandID() == CMD_ID_SNIC
yangcq88517 4:7388451219ee 90 && _payload.GetSubCommandID() == SNIC_HTTP_RSP_IND)
yangcq88517 4:7388451219ee 91 return new HTTPResponseIndication(&_payload);
yangcq88517 1:fd19bd683e90 92
yangcq88517 1:fd19bd683e90 93 return NULL;
yangcq88517 1:fd19bd683e90 94 }
yangcq88517 1:fd19bd683e90 95
yangcq88517 0:8e83b9448758 96 void MuRata::Send()
yangcq88517 0:8e83b9448758 97 {
yangcq88517 0:8e83b9448758 98 _payload.SetResponseFlag(Request_Indication);
yangcq88517 0:8e83b9448758 99 serial->putc(UARTFrame::SOM);
yangcq88517 0:8e83b9448758 100
yangcq88517 0:8e83b9448758 101 serial->putc(_frame.GetL0() | 0x80);
yangcq88517 0:8e83b9448758 102 serial->putc(_frame.GetL1() | 0x80 | (_frame.GetACKRequired() ? 0x40 : 0x00));
yangcq88517 0:8e83b9448758 103
yangcq88517 0:8e83b9448758 104 serial->putc(_frame.GetCommandID() | 0x80);
yangcq88517 0:8e83b9448758 105
yangcq88517 0:8e83b9448758 106 for (int i = 0; i < _payload.GetPosition(); i++)
yangcq88517 0:8e83b9448758 107 serial->putc(_payload.GetData()[i]);
yangcq88517 0:8e83b9448758 108
yangcq88517 0:8e83b9448758 109 serial->putc(_frame.GetChecksum() | 0x80);
yangcq88517 0:8e83b9448758 110
yangcq88517 0:8e83b9448758 111 serial->putc(UARTFrame::EOM);
yangcq88517 0:8e83b9448758 112 }
yangcq88517 0:8e83b9448758 113
yangcq88517 0:8e83b9448758 114 bool MuRata::FrameReceive()
yangcq88517 0:8e83b9448758 115 {
yangcq88517 0:8e83b9448758 116 int value = serial->getc();
yangcq88517 0:8e83b9448758 117
yangcq88517 0:8e83b9448758 118 while (value != UARTFrame::SOM)
yangcq88517 0:8e83b9448758 119 value = serial->getc();
yangcq88517 0:8e83b9448758 120
yangcq88517 0:8e83b9448758 121 _frame.SetL0(serial->getc());
yangcq88517 0:8e83b9448758 122 _frame.SetL1(serial->getc());
yangcq88517 0:8e83b9448758 123
yangcq88517 0:8e83b9448758 124 _frame.SetCommandID(serial->getc());
yangcq88517 0:8e83b9448758 125
yangcq88517 0:8e83b9448758 126 int _size = _frame.GetPayloadLength();
yangcq88517 0:8e83b9448758 127
yangcq88517 0:8e83b9448758 128 _payload.Allocate(_size);
yangcq88517 0:8e83b9448758 129 while (_payload.GetPosition() < _size)
yangcq88517 0:8e83b9448758 130 _payload.SetContent(serial->getc());
yangcq88517 0:8e83b9448758 131
yangcq88517 0:8e83b9448758 132 _frame.SetChecksum(serial->getc());
yangcq88517 0:8e83b9448758 133
yangcq88517 0:8e83b9448758 134 if (serial->getc() == UARTFrame::EOM && _frame.VerifyChecksum())
yangcq88517 0:8e83b9448758 135 return true;
yangcq88517 0:8e83b9448758 136 else return false;
yangcq88517 0:8e83b9448758 137 }
yangcq88517 0:8e83b9448758 138
yangcq88517 0:8e83b9448758 139 VersionInfoResponse * MuRata::GEN_GetFirmwareVersionInfo()
yangcq88517 0:8e83b9448758 140 {
yangcq88517 0:8e83b9448758 141 _payload.Rewind();
yangcq88517 0:8e83b9448758 142 _payload.SetSubCommandID(GEN_FW_VER_GET_REQ);
yangcq88517 0:8e83b9448758 143 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 144
yangcq88517 0:8e83b9448758 145 _frame.SetCommandID(CMD_ID_GEN);
yangcq88517 0:8e83b9448758 146 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 147
yangcq88517 0:8e83b9448758 148 Send();
yangcq88517 0:8e83b9448758 149
yangcq88517 1:fd19bd683e90 150 while (FrameReceive())
yangcq88517 1:fd19bd683e90 151 if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_FW_VER_GET_REQ)
yangcq88517 1:fd19bd683e90 152 return new VersionInfoResponse(&_payload);
yangcq88517 1:fd19bd683e90 153
yangcq88517 1:fd19bd683e90 154 return NULL;
yangcq88517 0:8e83b9448758 155 }
yangcq88517 0:8e83b9448758 156
yangcq88517 0:8e83b9448758 157 CMDCode MuRata::GEN_RestoreNVMtoFactoryDefault()
yangcq88517 0:8e83b9448758 158 {
yangcq88517 0:8e83b9448758 159 _payload.Rewind();
yangcq88517 0:8e83b9448758 160 _payload.SetSubCommandID(GEN_RESTORE_REQ);
yangcq88517 0:8e83b9448758 161 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 162
yangcq88517 0:8e83b9448758 163 _frame.SetCommandID(CMD_ID_GEN);
yangcq88517 0:8e83b9448758 164 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 165
yangcq88517 0:8e83b9448758 166 Send();
yangcq88517 0:8e83b9448758 167
yangcq88517 1:fd19bd683e90 168 while (FrameReceive())
yangcq88517 1:fd19bd683e90 169 if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_RESTORE_REQ)
yangcq88517 1:fd19bd683e90 170 return (CMDCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 171
yangcq88517 1:fd19bd683e90 172 return GEN_NORESPONSE;
yangcq88517 0:8e83b9448758 173 }
yangcq88517 0:8e83b9448758 174
yangcq88517 0:8e83b9448758 175 CMDCode MuRata::GEN_SoftReset()
yangcq88517 0:8e83b9448758 176 {
yangcq88517 0:8e83b9448758 177 _payload.Rewind();
yangcq88517 0:8e83b9448758 178 _payload.SetSubCommandID(GEN_RESET_REQ);
yangcq88517 0:8e83b9448758 179 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 180
yangcq88517 0:8e83b9448758 181 _frame.SetCommandID(CMD_ID_GEN);
yangcq88517 0:8e83b9448758 182 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 183
yangcq88517 0:8e83b9448758 184 Send();
yangcq88517 0:8e83b9448758 185
yangcq88517 1:fd19bd683e90 186 while (FrameReceive())
yangcq88517 1:fd19bd683e90 187 if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_RESET_REQ)
yangcq88517 1:fd19bd683e90 188 return (CMDCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 189
yangcq88517 1:fd19bd683e90 190 return GEN_NORESPONSE;
yangcq88517 0:8e83b9448758 191 }
yangcq88517 0:8e83b9448758 192
yangcq88517 0:8e83b9448758 193 CMDCode MuRata::GEN_UARTConfiguration(UARTConfig & config)
yangcq88517 0:8e83b9448758 194 {
yangcq88517 0:8e83b9448758 195 _payload.Rewind();
yangcq88517 0:8e83b9448758 196 _payload.SetSubCommandID(GEN_UART_CFG_REQ);
yangcq88517 0:8e83b9448758 197 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 198 _payload.SetContent(config.GetValue(), 0, 6);
yangcq88517 0:8e83b9448758 199
yangcq88517 0:8e83b9448758 200 _frame.SetCommandID(CMD_ID_GEN);
yangcq88517 0:8e83b9448758 201 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 202
yangcq88517 0:8e83b9448758 203 Send();
yangcq88517 0:8e83b9448758 204
yangcq88517 1:fd19bd683e90 205 while (FrameReceive())
yangcq88517 1:fd19bd683e90 206 if (_frame.GetCommandID() == CMD_ID_GEN && _payload.GetSubCommandID() == GEN_UART_CFG_REQ)
yangcq88517 1:fd19bd683e90 207 return (CMDCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 208
yangcq88517 1:fd19bd683e90 209 return GEN_NORESPONSE;
yangcq88517 0:8e83b9448758 210 }
yangcq88517 0:8e83b9448758 211
yangcq88517 0:8e83b9448758 212
yangcq88517 0:8e83b9448758 213 WIFICode MuRata::WIFI_TurnOn()
yangcq88517 0:8e83b9448758 214 {
yangcq88517 0:8e83b9448758 215 _payload.Rewind();
yangcq88517 0:8e83b9448758 216 _payload.SetSubCommandID(WIFI_ON_REQ);
yangcq88517 0:8e83b9448758 217 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 218 /*
yangcq88517 0:8e83b9448758 219 * 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.
yangcq88517 0:8e83b9448758 220 */
yangcq88517 0:8e83b9448758 221 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 222 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 223
yangcq88517 0:8e83b9448758 224 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 225 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 226
yangcq88517 0:8e83b9448758 227 Send();
yangcq88517 0:8e83b9448758 228
yangcq88517 1:fd19bd683e90 229 while (FrameReceive())
yangcq88517 1:fd19bd683e90 230 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_ON_REQ)
yangcq88517 1:fd19bd683e90 231 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 232
yangcq88517 1:fd19bd683e90 233 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 234 }
yangcq88517 0:8e83b9448758 235
yangcq88517 0:8e83b9448758 236 WIFICode MuRata::WIFI_TurnOff()
yangcq88517 0:8e83b9448758 237 {
yangcq88517 0:8e83b9448758 238 _payload.Rewind();
yangcq88517 0:8e83b9448758 239 _payload.SetSubCommandID(WIFI_OFF_REQ);
yangcq88517 0:8e83b9448758 240 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 241
yangcq88517 0:8e83b9448758 242 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 243 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 244
yangcq88517 0:8e83b9448758 245 Send();
yangcq88517 0:8e83b9448758 246
yangcq88517 1:fd19bd683e90 247 while (FrameReceive())
yangcq88517 1:fd19bd683e90 248 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_OFF_REQ)
yangcq88517 1:fd19bd683e90 249 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 250
yangcq88517 1:fd19bd683e90 251 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 252 }
yangcq88517 0:8e83b9448758 253
yangcq88517 0:8e83b9448758 254 WIFICode MuRata::WIFI_SoftAPControl(SoftAPConfig * config)
yangcq88517 0:8e83b9448758 255 {
yangcq88517 0:8e83b9448758 256 _payload.Rewind();
yangcq88517 0:8e83b9448758 257 _payload.SetSubCommandID(WIFI_AP_CTRL_REQ);
yangcq88517 0:8e83b9448758 258 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 259
yangcq88517 0:8e83b9448758 260 _payload.SetContent(config->GetOnOffStatus());
yangcq88517 0:8e83b9448758 261 _payload.SetContent(config->GetPersistency());
yangcq88517 0:8e83b9448758 262 if (config->GetOnOffStatus() == 0x02) {
yangcq88517 1:fd19bd683e90 263 int length = strlen(config->GetSSID());
yangcq88517 1:fd19bd683e90 264 _payload.SetContent(config->GetSSID(), 0 , length);
yangcq88517 0:8e83b9448758 265 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 266 }
yangcq88517 0:8e83b9448758 267 _payload.SetContent(config->GetChannel());
yangcq88517 0:8e83b9448758 268 _payload.SetContent((char)config->GetSecurityMode());
yangcq88517 0:8e83b9448758 269
yangcq88517 1:fd19bd683e90 270 int keyLength = strlen(config->GetSecurityKey());
yangcq88517 0:8e83b9448758 271 _payload.SetContent(keyLength);
yangcq88517 0:8e83b9448758 272 if (config->GetSecurityMode() != WIFI_SECURITY_OPEN && keyLength > 0)
yangcq88517 1:fd19bd683e90 273 _payload.SetContent(config->GetSecurityKey(), 0 , keyLength);
yangcq88517 0:8e83b9448758 274
yangcq88517 0:8e83b9448758 275 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 276 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 277
yangcq88517 0:8e83b9448758 278 Send();
yangcq88517 0:8e83b9448758 279
yangcq88517 1:fd19bd683e90 280 while (FrameReceive())
yangcq88517 1:fd19bd683e90 281 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_AP_CTRL_REQ)
yangcq88517 1:fd19bd683e90 282 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 283
yangcq88517 1:fd19bd683e90 284 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 285 }
yangcq88517 0:8e83b9448758 286
yangcq88517 0:8e83b9448758 287 WIFICode MuRata::WIFI_AssociateNetwork(WIFINetwork * AP)
yangcq88517 0:8e83b9448758 288 {
yangcq88517 0:8e83b9448758 289 _payload.Rewind();
yangcq88517 0:8e83b9448758 290 _payload.SetSubCommandID(WIFI_JOIN_REQ);
yangcq88517 0:8e83b9448758 291 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 1:fd19bd683e90 292 _payload.SetContent(AP->GetSSID(), 0, strlen(AP->GetSSID()));
yangcq88517 0:8e83b9448758 293 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 294
yangcq88517 0:8e83b9448758 295 _payload.SetContent((char)AP->GetSecurityMode());
yangcq88517 0:8e83b9448758 296
yangcq88517 1:fd19bd683e90 297 int keyLength = strlen(AP->GetSecurityKey());
yangcq88517 0:8e83b9448758 298 _payload.SetContent(keyLength);
yangcq88517 0:8e83b9448758 299 if (keyLength > 0)
yangcq88517 1:fd19bd683e90 300 _payload.SetContent(AP->GetSecurityKey(), 0, keyLength);
yangcq88517 0:8e83b9448758 301
yangcq88517 0:8e83b9448758 302 if (AP->GetBSSID() != NULL) {
yangcq88517 0:8e83b9448758 303 _payload.SetContent(AP->GetChannel());
yangcq88517 0:8e83b9448758 304 _payload.SetContent(AP->GetBSSID(), 0, 6);
yangcq88517 0:8e83b9448758 305 }
yangcq88517 0:8e83b9448758 306
yangcq88517 0:8e83b9448758 307 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 308 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 309
yangcq88517 0:8e83b9448758 310 Send();
yangcq88517 0:8e83b9448758 311
yangcq88517 1:fd19bd683e90 312 while (FrameReceive())
yangcq88517 1:fd19bd683e90 313 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_JOIN_REQ)
yangcq88517 1:fd19bd683e90 314 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 315
yangcq88517 1:fd19bd683e90 316 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 317 }
yangcq88517 0:8e83b9448758 318
yangcq88517 0:8e83b9448758 319 WIFICode MuRata::WIFI_DisconnectNetwork()
yangcq88517 0:8e83b9448758 320 {
yangcq88517 0:8e83b9448758 321 _payload.Rewind();
yangcq88517 0:8e83b9448758 322 _payload.SetSubCommandID(WIFI_DISCONNECT_REQ);
yangcq88517 0:8e83b9448758 323 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 324
yangcq88517 0:8e83b9448758 325 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 326 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 327
yangcq88517 0:8e83b9448758 328 Send();
yangcq88517 0:8e83b9448758 329
yangcq88517 1:fd19bd683e90 330 while (FrameReceive())
yangcq88517 1:fd19bd683e90 331 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_DISCONNECT_REQ)
yangcq88517 1:fd19bd683e90 332 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 333
yangcq88517 1:fd19bd683e90 334 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 335 }
yangcq88517 0:8e83b9448758 336 WIFIStatusResponse * MuRata::WIFI_GetStatus(const WIFIInterface WiFiInterface)
yangcq88517 0:8e83b9448758 337 {
yangcq88517 0:8e83b9448758 338 _payload.Rewind();
yangcq88517 0:8e83b9448758 339 _payload.SetSubCommandID(WIFI_GET_STATUS_REQ);
yangcq88517 0:8e83b9448758 340 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 341 _payload.SetContent((char)WiFiInterface);
yangcq88517 0:8e83b9448758 342
yangcq88517 0:8e83b9448758 343 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 344 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 345
yangcq88517 0:8e83b9448758 346 Send();
yangcq88517 0:8e83b9448758 347
yangcq88517 1:fd19bd683e90 348 while (FrameReceive())
yangcq88517 1:fd19bd683e90 349 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STATUS_REQ)
yangcq88517 1:fd19bd683e90 350 return new WIFIStatusResponse(&_payload);
yangcq88517 1:fd19bd683e90 351
yangcq88517 1:fd19bd683e90 352 return NULL;
yangcq88517 0:8e83b9448758 353 }
yangcq88517 0:8e83b9448758 354
yangcq88517 0:8e83b9448758 355 int MuRata::WIFI_GetRSSI()
yangcq88517 0:8e83b9448758 356 {
yangcq88517 0:8e83b9448758 357 _payload.Rewind();
yangcq88517 0:8e83b9448758 358 _payload.SetSubCommandID(WIFI_GET_STA_RSSI_REQ);
yangcq88517 0:8e83b9448758 359 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 360
yangcq88517 0:8e83b9448758 361 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 362 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 363
yangcq88517 0:8e83b9448758 364 Send();
yangcq88517 0:8e83b9448758 365
yangcq88517 1:fd19bd683e90 366 while (FrameReceive())
yangcq88517 1:fd19bd683e90 367 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_GET_STA_RSSI_REQ) {
yangcq88517 1:fd19bd683e90 368 char value = _payload.GetData()[2];
yangcq88517 0:8e83b9448758 369
yangcq88517 1:fd19bd683e90 370 if (value >> 7 == 0x01)
yangcq88517 1:fd19bd683e90 371 return (~(_payload.GetData()[2] - 1) & 0x7F) * -1;
yangcq88517 0:8e83b9448758 372
yangcq88517 1:fd19bd683e90 373 return value;
yangcq88517 1:fd19bd683e90 374 }
yangcq88517 1:fd19bd683e90 375
yangcq88517 1:fd19bd683e90 376 return 127;
yangcq88517 0:8e83b9448758 377 }
yangcq88517 0:8e83b9448758 378
yangcq88517 0:8e83b9448758 379 WIFICode MuRata::WIFI_StartWPSProcess(const WPSMode mode, const char * pin, int pinLength)
yangcq88517 0:8e83b9448758 380 {
yangcq88517 0:8e83b9448758 381 _payload.Rewind();
yangcq88517 0:8e83b9448758 382 _payload.SetSubCommandID(WIFI_WPS_REQ);
yangcq88517 0:8e83b9448758 383 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 384 _payload.SetContent((char)mode);
yangcq88517 0:8e83b9448758 385
yangcq88517 0:8e83b9448758 386 if (mode == Pin) {
yangcq88517 0:8e83b9448758 387 if (Pin == NULL)
yangcq88517 0:8e83b9448758 388 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 389
yangcq88517 0:8e83b9448758 390 _payload.SetContent(pin, 0 , pinLength);
yangcq88517 0:8e83b9448758 391 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 392 }
yangcq88517 0:8e83b9448758 393
yangcq88517 0:8e83b9448758 394 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 395 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 396
yangcq88517 0:8e83b9448758 397 Send();
yangcq88517 0:8e83b9448758 398
yangcq88517 1:fd19bd683e90 399 while (FrameReceive())
yangcq88517 1:fd19bd683e90 400 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_WPS_REQ)
yangcq88517 1:fd19bd683e90 401 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 402
yangcq88517 1:fd19bd683e90 403 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 404 }
yangcq88517 0:8e83b9448758 405
yangcq88517 0:8e83b9448758 406 WIFICode MuRata::WIFI_ScanNetworks(const ScanType scan, const BSSType bss)
yangcq88517 0:8e83b9448758 407 {
yangcq88517 0:8e83b9448758 408 /*
yangcq88517 0:8e83b9448758 409 * This command instructs the module to scan available networks. Parameters are as follows:
yangcq88517 0:8e83b9448758 410 * UINT8 Request Sequence
yangcq88517 0:8e83b9448758 411 * UINT8 Scan Type
yangcq88517 0:8e83b9448758 412 * UINT8 BSS Type
yangcq88517 0:8e83b9448758 413 * UINT8 BSSID [6]
yangcq88517 0:8e83b9448758 414 * UINT8 Channel list []
yangcq88517 0:8e83b9448758 415 * UINT8 SSID[]
yangcq88517 0:8e83b9448758 416 * BSSID, Channel List, and SSID are optional fields. All 0’s for BSSID, Channel list or SSID indicates it is not present.
yangcq88517 0:8e83b9448758 417 * - Scan Type: 0 = Active scan, 1= Passive scan
yangcq88517 0:8e83b9448758 418 * - BSS Type: 0 = Infrastructure, 1 = ad hoc, 2 = any
yangcq88517 0:8e83b9448758 419 * - BSSID: 6 bytes MAC address of the AP or STA. 6 bytes of 0’s indicates it is not present.
yangcq88517 0:8e83b9448758 420 * - Channel list: 0 terminated array, up to 10 array elements.
yangcq88517 0:8e83b9448758 421 * - SSID: 0 terminated string for the AP or STA SSID, up to 33 bytes including NUL-termination.
yangcq88517 0:8e83b9448758 422 */
yangcq88517 0:8e83b9448758 423
yangcq88517 0:8e83b9448758 424 _payload.Rewind();
yangcq88517 0:8e83b9448758 425 _payload.SetSubCommandID(WIFI_SCAN_REQ);
yangcq88517 0:8e83b9448758 426 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 427 _payload.SetContent((char)scan);
yangcq88517 0:8e83b9448758 428 _payload.SetContent((char)bss);
yangcq88517 0:8e83b9448758 429
yangcq88517 0:8e83b9448758 430 for (int i = 0; i < 8; i++)
yangcq88517 0:8e83b9448758 431 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 432
yangcq88517 0:8e83b9448758 433 _frame.SetCommandID(CMD_ID_WIFI);
yangcq88517 0:8e83b9448758 434 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 435
yangcq88517 0:8e83b9448758 436 Send();
yangcq88517 0:8e83b9448758 437
yangcq88517 1:fd19bd683e90 438 while (FrameReceive())
yangcq88517 1:fd19bd683e90 439 if (_frame.GetCommandID() == CMD_ID_WIFI && _payload.GetSubCommandID() == WIFI_SCAN_REQ)
yangcq88517 1:fd19bd683e90 440 return (WIFICode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 441
yangcq88517 1:fd19bd683e90 442 return WIFI_NORESPONSE;
yangcq88517 0:8e83b9448758 443 }
yangcq88517 0:8e83b9448758 444
yangcq88517 0:8e83b9448758 445 InitializationResponse * MuRata::SNIC_Initialization(int receiveBufferSize)
yangcq88517 0:8e83b9448758 446 {
yangcq88517 0:8e83b9448758 447 _payload.Rewind();
yangcq88517 0:8e83b9448758 448 _payload.SetSubCommandID(SNIC_INIT_REQ);
yangcq88517 0:8e83b9448758 449 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 450 _payload.SetContent(receiveBufferSize >> 8);
yangcq88517 0:8e83b9448758 451 _payload.SetContent(receiveBufferSize);
yangcq88517 0:8e83b9448758 452
yangcq88517 0:8e83b9448758 453 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 454 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 455
yangcq88517 0:8e83b9448758 456 Send();
yangcq88517 0:8e83b9448758 457
yangcq88517 1:fd19bd683e90 458 while (FrameReceive())
yangcq88517 1:fd19bd683e90 459 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_INIT_REQ)
yangcq88517 1:fd19bd683e90 460 return new InitializationResponse(&_payload);
yangcq88517 1:fd19bd683e90 461
yangcq88517 1:fd19bd683e90 462 return NULL;
yangcq88517 0:8e83b9448758 463 }
yangcq88517 0:8e83b9448758 464
yangcq88517 0:8e83b9448758 465 SNICCode MuRata::SNIC_Cleanup()
yangcq88517 0:8e83b9448758 466 {
yangcq88517 0:8e83b9448758 467 _payload.Rewind();
yangcq88517 0:8e83b9448758 468 _payload.SetSubCommandID(SNIC_CLEANUP_REQ);
yangcq88517 0:8e83b9448758 469 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 470
yangcq88517 0:8e83b9448758 471 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 472 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 473
yangcq88517 0:8e83b9448758 474 Send();
yangcq88517 0:8e83b9448758 475
yangcq88517 1:fd19bd683e90 476 while (FrameReceive())
yangcq88517 1:fd19bd683e90 477 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLEANUP_REQ)
yangcq88517 1:fd19bd683e90 478 return (SNICCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 479
yangcq88517 1:fd19bd683e90 480 return SNIC_NORESPONSE;
yangcq88517 0:8e83b9448758 481
yangcq88517 0:8e83b9448758 482 }
yangcq88517 0:8e83b9448758 483
yangcq88517 0:8e83b9448758 484
yangcq88517 0:8e83b9448758 485 SendFromSocketResponse * MuRata::SNIC_SendFromSocket(const char SocketID, const SocketSentOption option, const char * payload, int offset, int length)
yangcq88517 0:8e83b9448758 486 {
yangcq88517 0:8e83b9448758 487 _payload.Rewind();
yangcq88517 0:8e83b9448758 488 _payload.SetSubCommandID(SNIC_SEND_FROM_SOCKET_REQ);
yangcq88517 0:8e83b9448758 489 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 490 _payload.SetContent(SocketID);
yangcq88517 0:8e83b9448758 491 _payload.SetContent((char)option);
yangcq88517 0:8e83b9448758 492 _payload.SetContent(length >> 8);
yangcq88517 0:8e83b9448758 493 _payload.SetContent(length);
yangcq88517 0:8e83b9448758 494 _payload.SetContent(payload, offset, length);
yangcq88517 0:8e83b9448758 495
yangcq88517 0:8e83b9448758 496 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 497 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 498
yangcq88517 0:8e83b9448758 499 Send();
yangcq88517 0:8e83b9448758 500
yangcq88517 1:fd19bd683e90 501 while (FrameReceive())
yangcq88517 1:fd19bd683e90 502 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_SEND_FROM_SOCKET_REQ)
yangcq88517 1:fd19bd683e90 503 return new SendFromSocketResponse(&_payload);
yangcq88517 1:fd19bd683e90 504
yangcq88517 1:fd19bd683e90 505 return NULL;
yangcq88517 0:8e83b9448758 506 }
yangcq88517 0:8e83b9448758 507
yangcq88517 0:8e83b9448758 508 SNICCode MuRata::SNIC_SloseSocket(const char SocketID)
yangcq88517 0:8e83b9448758 509 {
yangcq88517 0:8e83b9448758 510 _payload.Rewind();
yangcq88517 0:8e83b9448758 511 _payload.SetSubCommandID(SNIC_CLOSE_SOCKET_REQ);
yangcq88517 0:8e83b9448758 512 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 513 _payload.SetContent(SocketID);
yangcq88517 0:8e83b9448758 514
yangcq88517 0:8e83b9448758 515 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 516 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 517
yangcq88517 0:8e83b9448758 518 Send();
yangcq88517 0:8e83b9448758 519
yangcq88517 1:fd19bd683e90 520 while (FrameReceive())
yangcq88517 1:fd19bd683e90 521 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_CLOSE_SOCKET_REQ)
yangcq88517 1:fd19bd683e90 522 return (SNICCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 523
yangcq88517 1:fd19bd683e90 524 return SNIC_NORESPONSE;
yangcq88517 0:8e83b9448758 525 }
yangcq88517 0:8e83b9448758 526
yangcq88517 0:8e83b9448758 527 DHCPInfoResponse * MuRata::SNIC_GetDHCPInfo(const WIFIInterface wifiInterface)
yangcq88517 0:8e83b9448758 528 {
yangcq88517 0:8e83b9448758 529 _payload.Rewind();
yangcq88517 0:8e83b9448758 530 _payload.SetSubCommandID(SNIC_GET_DHCP_INFO_REQ);
yangcq88517 0:8e83b9448758 531 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 532 _payload.SetContent((char)wifiInterface);
yangcq88517 0:8e83b9448758 533
yangcq88517 0:8e83b9448758 534 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 535 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 536
yangcq88517 0:8e83b9448758 537 Send();
yangcq88517 0:8e83b9448758 538
yangcq88517 1:fd19bd683e90 539 while (FrameReceive())
yangcq88517 1:fd19bd683e90 540 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_GET_DHCP_INFO_REQ)
yangcq88517 1:fd19bd683e90 541 return new DHCPInfoResponse(&_payload);
yangcq88517 1:fd19bd683e90 542
yangcq88517 1:fd19bd683e90 543 return NULL;
yangcq88517 0:8e83b9448758 544 }
yangcq88517 0:8e83b9448758 545
yangcq88517 1:fd19bd683e90 546 bool MuRata::SNIC_ResolveHostName(const char * host, IPAddress * ip)
yangcq88517 0:8e83b9448758 547 {
yangcq88517 1:fd19bd683e90 548 int hostLength = strlen(host);
yangcq88517 1:fd19bd683e90 549
yangcq88517 0:8e83b9448758 550 _payload.Rewind();
yangcq88517 0:8e83b9448758 551 _payload.SetSubCommandID(SNIC_RESOLVE_NAME_REQ);
yangcq88517 0:8e83b9448758 552 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 553 _payload.SetContent((char)STA);
yangcq88517 1:fd19bd683e90 554 _payload.SetContent(hostLength);
yangcq88517 1:fd19bd683e90 555 _payload.SetContent(host, 0, hostLength);
yangcq88517 0:8e83b9448758 556
yangcq88517 0:8e83b9448758 557 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 558 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 559
yangcq88517 0:8e83b9448758 560 Send();
yangcq88517 0:8e83b9448758 561
yangcq88517 1:fd19bd683e90 562 while (FrameReceive())
yangcq88517 1:fd19bd683e90 563 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_RESOLVE_NAME_REQ)
yangcq88517 1:fd19bd683e90 564 if ((SNICCode)_payload.GetData()[2] == SNIC_SUCCESS) {
yangcq88517 1:fd19bd683e90 565 ip->SetValue(_payload.GetData(), 3);
yangcq88517 1:fd19bd683e90 566 return true;
yangcq88517 1:fd19bd683e90 567 }
yangcq88517 0:8e83b9448758 568
yangcq88517 1:fd19bd683e90 569 return false;
yangcq88517 0:8e83b9448758 570 }
yangcq88517 0:8e83b9448758 571
yangcq88517 0:8e83b9448758 572 SNICCode MuRata::SNIC_ConfigureDHCPorStaticIP(DHCPConfig * config)
yangcq88517 0:8e83b9448758 573 {
yangcq88517 0:8e83b9448758 574 _payload.Rewind();
yangcq88517 0:8e83b9448758 575 _payload.SetSubCommandID(SNIC_IP_CONFIG_REQ);
yangcq88517 0:8e83b9448758 576 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 577 _payload.SetContent((char)config->GetInterface());
yangcq88517 0:8e83b9448758 578 _payload.SetContent((char)config->GetDHCPMode());
yangcq88517 0:8e83b9448758 579
yangcq88517 0:8e83b9448758 580 if (config->GetDHCPMode() != dynamic_IP) {
yangcq88517 0:8e83b9448758 581 _payload.SetContent(config->GetLocalIP()->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 582 _payload.SetContent(config->GetNetmask()->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 583 _payload.SetContent(config->GetGatewayIP()->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 584 }
yangcq88517 0:8e83b9448758 585
yangcq88517 0:8e83b9448758 586 if (config->GetDHCPMode() == soft_AP) {
yangcq88517 0:8e83b9448758 587 _payload.SetContent(config->GetIPRangeFirst()->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 588 _payload.SetContent(config->GetIPRangeLast()->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 589 }
yangcq88517 0:8e83b9448758 590
yangcq88517 0:8e83b9448758 591 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 592 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 593
yangcq88517 0:8e83b9448758 594 Send();
yangcq88517 0:8e83b9448758 595
yangcq88517 1:fd19bd683e90 596 while (FrameReceive())
yangcq88517 1:fd19bd683e90 597 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_IP_CONFIG_REQ)
yangcq88517 1:fd19bd683e90 598 return (SNICCode)_payload.GetData()[2];
yangcq88517 1:fd19bd683e90 599
yangcq88517 1:fd19bd683e90 600 return SNIC_NORESPONSE;
yangcq88517 0:8e83b9448758 601 }
yangcq88517 0:8e83b9448758 602
yangcq88517 0:8e83b9448758 603 SocketStartReceiveResponse * MuRata::SNIC_ConnectTCPServer(const char SocketID, IPAddress * remoteIP, const int remotePort, const char timeout, const int receiveBufferSize)
yangcq88517 0:8e83b9448758 604 {
yangcq88517 0:8e83b9448758 605 _payload.Rewind();
yangcq88517 0:8e83b9448758 606 _payload.SetSubCommandID(SNIC_TCP_CONNECT_TO_SERVER_REQ);
yangcq88517 0:8e83b9448758 607 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 608 _payload.SetContent(SocketID);
yangcq88517 0:8e83b9448758 609 _payload.SetContent(remoteIP->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 610 _payload.SetContent((char)(remotePort >> 8));
yangcq88517 0:8e83b9448758 611 _payload.SetContent((char)remotePort);
yangcq88517 0:8e83b9448758 612 _payload.SetContent((char)(receiveBufferSize >> 8));
yangcq88517 0:8e83b9448758 613 _payload.SetContent((char)receiveBufferSize);
yangcq88517 0:8e83b9448758 614 _payload.SetContent(timeout);
yangcq88517 0:8e83b9448758 615
yangcq88517 0:8e83b9448758 616 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 617 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 618
yangcq88517 0:8e83b9448758 619 Send();
yangcq88517 0:8e83b9448758 620
yangcq88517 1:fd19bd683e90 621 while (FrameReceive())
yangcq88517 1:fd19bd683e90 622 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_TCP_CONNECT_TO_SERVER_REQ)
yangcq88517 1:fd19bd683e90 623 return new SocketStartReceiveResponse(&_payload);
yangcq88517 1:fd19bd683e90 624
yangcq88517 1:fd19bd683e90 625 return NULL;
yangcq88517 0:8e83b9448758 626 }
yangcq88517 0:8e83b9448758 627
yangcq88517 0:8e83b9448758 628 CreateSocketResponse * MuRata::SNIC_CreateTCPSocket(const bool bind, IPAddress * localIP, const int localPort)
yangcq88517 0:8e83b9448758 629 {
yangcq88517 0:8e83b9448758 630 return SNIC_CreateSocket(SNIC_TCP_CREATE_SOCKET_REQ, bind, localIP, localPort);
yangcq88517 0:8e83b9448758 631 }
yangcq88517 0:8e83b9448758 632
yangcq88517 0:8e83b9448758 633 CreateSocketResponse * MuRata::SNIC_CreateUDPSocket(const bool bind, IPAddress * localIP, const int localPort)
yangcq88517 0:8e83b9448758 634 {
yangcq88517 0:8e83b9448758 635 return SNIC_CreateSocket(SNIC_UDP_CREATE_SOCKET_REQ, bind, localIP, localPort);
yangcq88517 0:8e83b9448758 636 }
yangcq88517 0:8e83b9448758 637
yangcq88517 0:8e83b9448758 638 CreateSocketResponse * MuRata::SNIC_CreateSocket(const SubCommandID subID, const bool bind, IPAddress * localIP, const int localPort)
yangcq88517 0:8e83b9448758 639 {
yangcq88517 0:8e83b9448758 640 _payload.Rewind();
yangcq88517 0:8e83b9448758 641 _payload.SetSubCommandID(subID);
yangcq88517 0:8e83b9448758 642 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 643 _payload.SetContent((char)(bind ? 0x01 : 0x00));
yangcq88517 0:8e83b9448758 644
yangcq88517 0:8e83b9448758 645 if (bind) {
yangcq88517 0:8e83b9448758 646 if (localIP != NULL)
yangcq88517 0:8e83b9448758 647 _payload.SetContent(localIP->GetValue(), 0, 4);
yangcq88517 0:8e83b9448758 648 else {
yangcq88517 0:8e83b9448758 649 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 650 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 651 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 652 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 653 }
yangcq88517 0:8e83b9448758 654
yangcq88517 0:8e83b9448758 655 _payload.SetContent((char)(localPort >> 8));
yangcq88517 0:8e83b9448758 656 _payload.SetContent((char)localPort);
yangcq88517 0:8e83b9448758 657 }
yangcq88517 0:8e83b9448758 658
yangcq88517 0:8e83b9448758 659 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 660 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 661
yangcq88517 0:8e83b9448758 662 Send();
yangcq88517 0:8e83b9448758 663
yangcq88517 1:fd19bd683e90 664 while (FrameReceive())
yangcq88517 1:fd19bd683e90 665 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == subID)
yangcq88517 1:fd19bd683e90 666 return new CreateSocketResponse(&_payload);
yangcq88517 1:fd19bd683e90 667
yangcq88517 1:fd19bd683e90 668 return NULL;
yangcq88517 0:8e83b9448758 669 }
yangcq88517 0:8e83b9448758 670
yangcq88517 0:8e83b9448758 671 SocketStartReceiveResponse * MuRata::SNIC_StartUDPReceive(const char SocketID, const int receiveBufferSize)
yangcq88517 0:8e83b9448758 672 {
yangcq88517 0:8e83b9448758 673 _payload.Rewind();
yangcq88517 0:8e83b9448758 674 _payload.SetSubCommandID(SNIC_UDP_START_RECV_REQ);
yangcq88517 0:8e83b9448758 675 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 676 _payload.SetContent(SocketID);
yangcq88517 0:8e83b9448758 677 _payload.SetContent((char)(receiveBufferSize >> 8));
yangcq88517 0:8e83b9448758 678 _payload.SetContent((char)receiveBufferSize);
yangcq88517 0:8e83b9448758 679
yangcq88517 0:8e83b9448758 680 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 681 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 682
yangcq88517 0:8e83b9448758 683 Send();
yangcq88517 0:8e83b9448758 684
yangcq88517 1:fd19bd683e90 685 while (FrameReceive())
yangcq88517 1:fd19bd683e90 686 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_START_RECV_REQ)
yangcq88517 1:fd19bd683e90 687 return new SocketStartReceiveResponse(&_payload);
yangcq88517 1:fd19bd683e90 688
yangcq88517 1:fd19bd683e90 689 return NULL;
yangcq88517 0:8e83b9448758 690 }
yangcq88517 0:8e83b9448758 691
yangcq88517 0:8e83b9448758 692 SendFromSocketResponse * MuRata::SNIC_SendUDPPacket(IPAddress * remoteIP, const int remotePort, const char * payload, int offset, int length)
yangcq88517 0:8e83b9448758 693 {
yangcq88517 0:8e83b9448758 694 _payload.Rewind();
yangcq88517 0:8e83b9448758 695 _payload.SetSubCommandID(SNIC_UDP_SIMPLE_SEND_REQ);
yangcq88517 0:8e83b9448758 696 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 697 _payload.SetContent(remoteIP->GetValue(), 0 ,4);
yangcq88517 0:8e83b9448758 698 _payload.SetContent((char)(remotePort >> 8));
yangcq88517 0:8e83b9448758 699 _payload.SetContent((char)remotePort);
yangcq88517 0:8e83b9448758 700 _payload.SetContent((char)(length >> 8));
yangcq88517 0:8e83b9448758 701 _payload.SetContent((char)length);
yangcq88517 0:8e83b9448758 702 _payload.SetContent(payload, offset, length);
yangcq88517 0:8e83b9448758 703
yangcq88517 0:8e83b9448758 704 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 705 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 706
yangcq88517 0:8e83b9448758 707 Send();
yangcq88517 0:8e83b9448758 708
yangcq88517 1:fd19bd683e90 709 while (FrameReceive())
yangcq88517 1:fd19bd683e90 710 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SIMPLE_SEND_REQ)
yangcq88517 1:fd19bd683e90 711 return new SendFromSocketResponse(&_payload);
yangcq88517 1:fd19bd683e90 712
yangcq88517 1:fd19bd683e90 713 return NULL;
yangcq88517 0:8e83b9448758 714 }
yangcq88517 0:8e83b9448758 715
yangcq88517 0:8e83b9448758 716 SendFromSocketResponse * MuRata::SNIC_SendUDPFromSocket(IPAddress * remoteIP, const int remotePort, const char SocketID, const bool connectServer, const char * payload, int offset, int length)
yangcq88517 0:8e83b9448758 717 {
yangcq88517 0:8e83b9448758 718 _payload.Rewind();
yangcq88517 0:8e83b9448758 719 _payload.SetSubCommandID(SNIC_UDP_SEND_FROM_SOCKET_REQ);
yangcq88517 0:8e83b9448758 720 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 721 _payload.SetContent(remoteIP->GetValue(),0, 4);
yangcq88517 0:8e83b9448758 722 _payload.SetContent((char)(remotePort >> 8));
yangcq88517 0:8e83b9448758 723 _payload.SetContent((char)remotePort);
yangcq88517 0:8e83b9448758 724 _payload.SetContent(SocketID);
yangcq88517 0:8e83b9448758 725 _payload.SetContent((char)(connectServer ? 0x01 : 0x00));
yangcq88517 0:8e83b9448758 726 _payload.SetContent((char)(length >> 8));
yangcq88517 0:8e83b9448758 727 _payload.SetContent((char)length);
yangcq88517 0:8e83b9448758 728 _payload.SetContent(payload, offset, length);
yangcq88517 0:8e83b9448758 729
yangcq88517 0:8e83b9448758 730 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 731 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 732
yangcq88517 0:8e83b9448758 733 Send();
yangcq88517 0:8e83b9448758 734
yangcq88517 1:fd19bd683e90 735 while (FrameReceive())
yangcq88517 1:fd19bd683e90 736 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_UDP_SEND_FROM_SOCKET_REQ)
yangcq88517 1:fd19bd683e90 737 return new SendFromSocketResponse(&_payload);
yangcq88517 1:fd19bd683e90 738
yangcq88517 1:fd19bd683e90 739 return NULL;
yangcq88517 0:8e83b9448758 740 }
yangcq88517 0:8e83b9448758 741
yangcq88517 0:8e83b9448758 742 HTTPResponse * MuRata::SNIC_SendHTTPRequest(HTTPContent * content, const bool isHTTPS, const bool chunked)
yangcq88517 0:8e83b9448758 743 {
yangcq88517 2:f8e393a81c25 744 SubCommandID _id = (isHTTPS == true) ? SNIC_HTTPS_REQ: SNIC_HTTP_REQ;
yangcq88517 1:fd19bd683e90 745
yangcq88517 0:8e83b9448758 746 _payload.Rewind();
yangcq88517 1:fd19bd683e90 747 _payload.SetSubCommandID(_id);
yangcq88517 0:8e83b9448758 748 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 2:f8e393a81c25 749 _payload.SetContent(content->GetRemotePort() >> 8);
yangcq88517 2:f8e393a81c25 750 _payload.SetContent(content->GetRemotePort());
yangcq88517 0:8e83b9448758 751 _payload.SetContent((char)content->GetMethod());
yangcq88517 0:8e83b9448758 752 _payload.SetContent(content->GetTimeout());
yangcq88517 0:8e83b9448758 753
yangcq88517 2:f8e393a81c25 754 _payload.SetContent(content->GetRemoteHost(), 0, strlen(content->GetRemoteHost()));
yangcq88517 0:8e83b9448758 755 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 756
yangcq88517 2:f8e393a81c25 757 _payload.SetContent(content->GetURI(), 0, strlen(content->GetURI()));
yangcq88517 0:8e83b9448758 758 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 759
yangcq88517 2:f8e393a81c25 760 _payload.SetContent(content->GetContentType(), 0, strlen(content->GetContentType()));
yangcq88517 0:8e83b9448758 761 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 762
yangcq88517 2:f8e393a81c25 763 string _others;
yangcq88517 2:f8e393a81c25 764 content->GetOtherHeaders(&_others);
yangcq88517 2:f8e393a81c25 765 _payload.SetContent(_others.c_str(), 0, _others.length());
yangcq88517 0:8e83b9448758 766 _payload.SetContent(0x00);
yangcq88517 0:8e83b9448758 767
yangcq88517 0:8e83b9448758 768 if (content->GetMethod() == POST) {
yangcq88517 0:8e83b9448758 769 int length = content->GetContentLength();
yangcq88517 0:8e83b9448758 770
yangcq88517 3:90ea1b8b2621 771 char msb = length >> 8;
yangcq88517 0:8e83b9448758 772 if (chunked)
yangcq88517 0:8e83b9448758 773 msb |= 0x80;
yangcq88517 0:8e83b9448758 774 else msb &= 0x7F;
yangcq88517 0:8e83b9448758 775
yangcq88517 0:8e83b9448758 776 _payload.SetContent(msb);
yangcq88517 3:90ea1b8b2621 777 _payload.SetContent(length);
yangcq88517 0:8e83b9448758 778
yangcq88517 0:8e83b9448758 779 if (length > 0)
yangcq88517 0:8e83b9448758 780 _payload.SetContent(content->GetBody(), 0, length);
yangcq88517 0:8e83b9448758 781 }
yangcq88517 0:8e83b9448758 782
yangcq88517 0:8e83b9448758 783 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 784 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 785
yangcq88517 0:8e83b9448758 786 Send();
yangcq88517 0:8e83b9448758 787
yangcq88517 1:fd19bd683e90 788 while (FrameReceive())
yangcq88517 1:fd19bd683e90 789 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == _id)
yangcq88517 1:fd19bd683e90 790 return new HTTPResponse(&_payload);
yangcq88517 1:fd19bd683e90 791
yangcq88517 1:fd19bd683e90 792 return NULL;
yangcq88517 0:8e83b9448758 793 }
yangcq88517 0:8e83b9448758 794
yangcq88517 0:8e83b9448758 795 HTTPResponse * MuRata::SNIC_SendHTTPMoreRequest(HTTPContent * content, const bool chunked)
yangcq88517 0:8e83b9448758 796 {
yangcq88517 0:8e83b9448758 797 _payload.Rewind();
yangcq88517 0:8e83b9448758 798 _payload.SetSubCommandID(SNIC_HTTP_MORE_REQ);
yangcq88517 0:8e83b9448758 799 _payload.SetFrameID(_payload.GetFrameID() + 1);
yangcq88517 0:8e83b9448758 800
yangcq88517 0:8e83b9448758 801 int length = content->GetContentLength();
yangcq88517 0:8e83b9448758 802 char msb = (char)(length >> 8);
yangcq88517 0:8e83b9448758 803 if (chunked)
yangcq88517 0:8e83b9448758 804 msb |= 0x80;
yangcq88517 0:8e83b9448758 805 else msb &= 0x7F;
yangcq88517 0:8e83b9448758 806
yangcq88517 0:8e83b9448758 807 _payload.SetContent(msb);
yangcq88517 0:8e83b9448758 808 _payload.SetContent((char)length);
yangcq88517 0:8e83b9448758 809
yangcq88517 0:8e83b9448758 810 if (length > 0)
yangcq88517 0:8e83b9448758 811 _payload.SetContent(content->GetBody(), 0, length);
yangcq88517 0:8e83b9448758 812
yangcq88517 0:8e83b9448758 813 _frame.SetCommandID(CMD_ID_SNIC);
yangcq88517 0:8e83b9448758 814 _frame.SetPayload(&_payload);
yangcq88517 0:8e83b9448758 815
yangcq88517 0:8e83b9448758 816 Send();
yangcq88517 0:8e83b9448758 817
yangcq88517 0:8e83b9448758 818 if (chunked)
yangcq88517 0:8e83b9448758 819 return NULL;
yangcq88517 0:8e83b9448758 820
yangcq88517 1:fd19bd683e90 821 while (FrameReceive())
yangcq88517 1:fd19bd683e90 822 if (_frame.GetCommandID() == CMD_ID_SNIC && _payload.GetSubCommandID() == SNIC_HTTP_MORE_REQ)
yangcq88517 1:fd19bd683e90 823 return new HTTPResponse(&_payload);
yangcq88517 1:fd19bd683e90 824
yangcq88517 1:fd19bd683e90 825 return NULL;
yangcq88517 0:8e83b9448758 826 }
yangcq88517 0:8e83b9448758 827
yangcq88517 0:8e83b9448758 828 CreateSocketResponse * MuRata::SNIC_CreateAdvancedTLSTCP(const bool bind, IPAddress * localIP, const int localPort)
yangcq88517 0:8e83b9448758 829 {
yangcq88517 0:8e83b9448758 830 return SNIC_CreateSocket(SNIC_TCP_CREATE_ADV_TLS_SOCKET_REQ, bind, localIP, localPort);
yangcq88517 0:8e83b9448758 831 }
yangcq88517 0:8e83b9448758 832
yangcq88517 0:8e83b9448758 833 CreateSocketResponse * MuRata::SNIC_CreateSimpleTLSTCP(const bool bind, IPAddress * localIP, const int localPort)
yangcq88517 0:8e83b9448758 834 {
yangcq88517 0:8e83b9448758 835 return SNIC_CreateSocket(SNIC_TCP_CREAET_SIMPLE_TLS_SOCKET_REQ, bind, localIP, localPort);
yangcq88517 4:7388451219ee 836 }