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:
Mon Feb 15 15:17:50 2016 +0000
Revision:
8:5856c23794b1
Parent:
7:a71d7c24afc0
Child:
9:0ce800923eda
update

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