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 04:02:41 2015 +0000
Revision:
3:90ea1b8b2621
Parent:
2:f8e393a81c25
Child:
4:7388451219ee
Bug Fix

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