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:
Tue Feb 03 21:24:15 2015 +0000
Revision:
0:8e83b9448758
Child:
1:fd19bd683e90
MuRata WiFi Module

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