This library can be used in mbed driver or mbed OS2. So If you want to use WizFi310 on mbed OS5, You have to use another WizFi310 library(wizfi310-driver). That is git repository for wizfi310-driver. - https://github.com/ARMmbed/wizfi310-driver
Dependents: KT_IoTMakers_WizFi310_Example WizFi310_STATION_HelloWorld WizFi310_DNS_TCP_HelloWorld WizFi310_Ubidots ... more
This library can be used in mbed driver or mbed OS2. So If you want to use WizFi310 on mbed OS5, You have to use another WizFi310 library(wizfi310-driver).
That is git repository for wizfi310-driver. - https://github.com/ARMmbed/wizfi310-driver
Revision 5:72212beb817c, committed 2017-06-26
- Comitter:
- jehoon
- Date:
- Mon Jun 26 00:17:10 2017 +0000
- Parent:
- 4:176b6f3addd6
- Child:
- 6:007cec5e96c0
- Commit message:
- modify message parsing in isr
Changed in this revision
--- a/WizFi310/WizFi310.cpp Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310/WizFi310.cpp Mon Jun 26 00:17:10 2017 +0000
@@ -41,6 +41,7 @@
_reset.output();
setRts(true); // release
+
/*
wait_ms(500);
cmdAT();
--- a/WizFi310/WizFi310.h Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310/WizFi310.h Mon Jun 26 00:17:10 2017 +0000
@@ -54,7 +54,7 @@
class WizFi310
{
public:
-
+
enum AntennaMode{
PCB = 0,
UFL = 1,
@@ -172,9 +172,9 @@
protected:
static WizFi310 * _inst;
-
// Serial _wizfi
RawSerial _wizfi;
+
int _baud;
DigitalIn *_cts;
DigitalOut *_rts;
@@ -211,8 +211,6 @@
int cid;
int n;
CircBuffer<char> *buf;
- char dbgRespBuf[BUF_SIZE];
- //char dummyBuf[BUF_SIZE];
} _state;
@@ -293,8 +291,8 @@
// --------- WizFi2550_util.cpp ---------
- int x2i (char c);
- int i2x (int i);
+ int x2i (char c);
+ int i2x (int i);
// --------- WizFi250_ifc.cpp (For NetworkSocketAPI) ---------
/**
--- a/WizFi310/WizFi310_hal.cpp Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310/WizFi310_hal.cpp Mon Jun 26 00:17:10 2017 +0000
@@ -43,9 +43,8 @@
char c;
c = getUart();
-
+
recvData(c);
- //S_UartPutc(c);
}
int WizFi310::getUart()
--- a/WizFi310/WizFi310_msg.cpp Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310/WizFi310_msg.cpp Mon Jun 26 00:17:10 2017 +0000
@@ -27,18 +27,23 @@
#define WIZ_DBG(x, ...)
#endif
-//daniel
-char g_asyncbuf[256];
+#define RESP_MSG_OK "[OK]"
+#define RESP_MSG_ERROR "[ERROR"
+#define RESP_MSG_CONNECT "[CONNECT "
+#define RESP_MSG_DISCONNECT "[DISCONNECT "
+#define RESP_MSG_LISTEN "[LISTEN "
+#define RESP_MSG_MQTTCON "[MQTT CONNECT]"
+#define RESP_MSG_MQTTDISCON "[MQTT DISCONNECT]"
+
// This function is operating in ISR. So you can't use debug message.
void WizFi310::recvData ( char c )
{
static int cid, sub, len, count;
- static int is_mqtt_data = 0;
- char tbf[10];
+ static int is_mqtt_data = 0;
switch(_state.mode)
- {
+ {
case MODE_COMMAND:
switch(c)
{
@@ -85,124 +90,118 @@
switch(sub)
{
case 0:
- // cid
- if( (c >= '0') && (c <= '9') )
- {
- cid = x2i(c);
- }
- else if ( c == ',' )
- {
- sub++;
- count = 0;
- len = 0;
- }
- //daniel add for mqtt
- else if ( c == 'Q' )
- {
- cid = 0;
- is_mqtt_data = 1;
- }
- //
- else
- {
- _state.mode = MODE_COMMAND;
- }
- break;
+ // cid
+ if( (c >= '0') && (c <= '9') )
+ {
+ cid = x2i(c);
+ }
+ else if ( c == ',' )
+ {
+ sub++;
+ count = 0;
+ len = 0;
+ }
+ //daniel add for mqtt
+ else if ( c == 'Q' )
+ {
+ cid = 0;
+ is_mqtt_data = 1;
+ }
+ //
+ else
+ {
+ _state.mode = MODE_COMMAND;
+ }
+ break;
- case 1:
- // ip
-// if ((c >= '0' && c <= '9') || c == '.')
- if (((c >= '0' && c <= '9') || c == '.') && is_mqtt_data == 0 )
- {
- _con[cid].ip[count] = c;
- count++;
- }
- else if( c == ',' )
- {
- _con[cid].ip[count] = '\0';
- _con[cid].port = 0;
- sub++;
- }
- //daniel for mqtt
- else if( is_mqtt_data == 1)
- {
- rcvd_mqtt_topic[count] = c;
- count++;
- }
-// else
- else if( is_mqtt_data == 0 )
- {
- _state.mode = MODE_COMMAND;
+ case 1:
+ // ip
+ // if ((c >= '0' && c <= '9') || c == '.')
+ if (((c >= '0' && c <= '9') || c == '.') && is_mqtt_data == 0 )
+ {
+ _con[cid].ip[count] = c;
+ count++;
+ }
+ else if( c == ',' )
+ {
+ _con[cid].ip[count] = '\0';
+ _con[cid].port = 0;
+ sub++;
+ }
+ //daniel for mqtt
+ else if( is_mqtt_data == 1)
+ {
+ rcvd_mqtt_topic[count] = c;
+ count++;
+ }
+ // else
+ else if( is_mqtt_data == 0 )
+ {
+ _state.mode = MODE_COMMAND;
+ }
+ break;
+
+ case 2:
+ // port
+ if ( c >= '0' && c <= '9' )
+ {
+ _con[cid].port = (_con[cid].port * 10) + ( c - '0' );
+ }
+ else if( c == ',')
+ {
+ sub++;
+ count = 0;
+ }
+ else
+ {
+ _state.mode = MODE_COMMAND;
+ }
+ break;
+
+ case 3:
+ // data length
+ if ( c >= '0' && c <= '9' )
+ {
+ //_con[cid].recv_length = (_con[cid].recv_length * 10) + (c - '0');
+ len = (len * 10) + (c - '0');
+ }
+ else if( c == '}' )
+ {
+ sub++;
+ count = 0;
+ _con[cid].recv_length = len;
+ }
+ else
+ {
+ _state.mode = MODE_COMMAND;
+ }
+ break;
+
+ default:
+
+ if(_con[cid].buf != NULL)
+ {
+ _con[cid].buf->queue(c);
+ if(_con[cid].buf->available() > CFG_DATA_SIZE - 16 )
+ {
+ setRts(false); // blcok
+ _con[cid].received = true;
+ WIZ_WARN("buf full");
+ }
+ }
+ _con[cid].recv_length--;
+ if(_con[cid].recv_length == 0)
+ {
+ _con[cid].received = true;
+ _state.mode = MODE_COMMAND;
+ }
+ break;
}
break;
-
- case 2:
- // port
- if ( c >= '0' && c <= '9' )
- {
- _con[cid].port = (_con[cid].port * 10) + ( c - '0' );
- }
- else if( c == ',')
- {
- sub++;
- count = 0;
- }
- else
- {
- _state.mode = MODE_COMMAND;
- }
- break;
-
- case 3:
- // data length
- if ( c >= '0' && c <= '9' )
- {
- //_con[cid].recv_length = (_con[cid].recv_length * 10) + (c - '0');
- len = (len * 10) + (c - '0');
- }
- else if( c == '}' )
- {
- sub++;
- count = 0;
- _con[cid].recv_length = len;
- }
- else
- {
- _state.mode = MODE_COMMAND;
- }
- break;
-
- default:
-
- if(_con[cid].buf != NULL)
- {
- _con[cid].buf->queue(c);
- if(_con[cid].buf->available() > CFG_DATA_SIZE - 16 )
- {
- setRts(false); // blcok
- _con[cid].received = true;
- WIZ_WARN("buf full");
- }
- }
- _con[cid].recv_length--;
- if(_con[cid].recv_length == 0)
- {
- //WIZ_DBG("recv cid: %d, count : %d, len : %d",cid, count, len);
- //sprintf(tbf, "recv cid: %d, count : %d, len : %d",cid, count, len);
- //strcat(g_asyncbuf, tbf);
- _con[cid].received = true;
- _state.mode = MODE_COMMAND;
- }
- break;
- }
- break;
}
}
-
-//#define MSG_TABLE_NUM 6
-//daniel
-#define MSG_TABLE_NUM 8
+#define MSG_TABLE_NUM 7
#define RES_TABLE_NUM 7
int WizFi310::parseMessage () {
int i;
@@ -212,15 +211,14 @@
const char msg[24];
void (WizFi310::*func)(const char *);
} msg_table[MSG_TABLE_NUM] = {
- {"[OK]", &WizFi310::msgOk},
- {"[ERROR]", &WizFi310::msgError},
- {"[ERROR:INVALIDINPUT]", &WizFi310::msgError},
- {"[CONNECT ", &WizFi310::msgConnect},
- {"[DISCONNECT ", &WizFi310::msgDisconnect},
- {"[LISTEN ", &WizFi310::msgListen},
- //daniel
- {"[MQTT CONNECT]", &WizFi310::msgMQTTConnect},
- {"[MQTT DISCONNECT]", &WizFi310::msgMQTTDisconnect},
+ {RESP_MSG_OK, &WizFi310::msgOk},
+ {RESP_MSG_ERROR, &WizFi310::msgError},
+// {"[ERROR:INVALIDINPUT]", &WizFi310::msgError},
+ {RESP_MSG_CONNECT, &WizFi310::msgConnect},
+ {RESP_MSG_DISCONNECT, &WizFi310::msgDisconnect},
+ {RESP_MSG_LISTEN, &WizFi310::msgListen},
+ {RESP_MSG_MQTTCON, &WizFi310::msgMQTTConnect},
+ {RESP_MSG_MQTTDISCON, &WizFi310::msgMQTTDisconnect},
};
static const struct RES_TABLE{
const Response res;
@@ -243,16 +241,13 @@
}
buf[i] = '\0';
- //strncpy(_state.dbgRespBuf, buf, sizeof(buf) );
- //WIZ_DBG("%s\r\n",_state.dbgRespBuf);
-
+
if(_state.res != RES_NULL)
{
for( i=0; i<RES_TABLE_NUM; i++)
{
if(res_table[i].res == _state.res)
{
- //WIZ_DBG("parse res %d '%s'\r\n", i, buf);
if(res_table[i].func != NULL)
{
(this->*(res_table[i].func))(buf);
@@ -268,7 +263,6 @@
{
if( strncmp(buf, msg_table[i].msg, strlen(msg_table[i].msg)) == 0 )
{
- //WIZ_DBG("parse msg '%s'\r\n", buf);
if(msg_table[i].func != NULL)
{
(this->*(msg_table[i].func))(buf);
@@ -295,10 +289,11 @@
{
int cid;
- if (buf[9] < '0' || buf[9] > '8' || buf[10] != ']') return;
+ //if (buf[9] < '0' || buf[9] > '8' || buf[10] != ']') return;
+ if( isdigit (buf[9])) return;
cid = x2i(buf[9]);
-
+
initCon(cid, true);
_state.cid = cid;
_con[cid].accept = true;
@@ -309,7 +304,8 @@
{
int cid;
- if(buf[12] < '0' || buf[12] > '8' || buf[13] != ']') return;
+ //if(buf[12] < '0' || buf[12] > '8' || buf[13] != ']') return;
+ if( isdigit (buf[9])) return;
cid = x2i(buf[12]);
_con[cid].connected = false;
@@ -320,9 +316,6 @@
{
int cid = 0;
- //if (buf[9] < '0' || buf[9] > '8' || buf[10] != ']') return;
-
- //cid = x2i(buf[9]);
initCon(cid, true);
_state.cid = cid;
_con[cid].accept = true;
@@ -336,10 +329,6 @@
void WizFi310::msgMQTTDisconnect (const char *buf)
{
int cid = 0;
-
- //if(buf[12] < '0' || buf[12] > '8' || buf[13] != ']') return;
-
- //cid = x2i(buf[12]);
_con[cid].connected = false;
}
@@ -348,7 +337,8 @@
{
int cid;
- if(buf[8] < '0' || buf[8] > '8' || buf[9] != ']') return;
+ //if(buf[8] < '0' || buf[8] > '8' || buf[9] != ']') return;
+ if( isdigit (buf[9])) return;
cid = x2i(buf[8]);
_state.cid = cid;
@@ -362,8 +352,9 @@
_state.mac[17] = 0;
_state.res = RES_NULL;
- if(strncmp(_state.mac,CFG_DEFAULT_MAC,sizeof(CFG_DEFAULT_MAC)) == 0)
+ if(strncmp(_state.mac,CFG_DEFAULT_MAC,sizeof(CFG_DEFAULT_MAC)) == 0){
_state.ok = false;
+ }
_state.ok = true;
}
}
@@ -372,13 +363,10 @@
{
int cid;
- if (buf[0] == '[' && buf[1] == 'O' && buf[2] == 'K' && buf[3] == ']')
- {
+ if( strstr((char*)buf, RESP_MSG_OK) != NULL){
_state.n++;
}
- else if( buf[0] == '[' && buf[1] == 'C' && buf[2] == 'O' && buf[3] == 'N' &&
- buf[4] == 'N' && buf[5] == 'E' && buf[6] == 'C' && buf[7] == 'T')
- {
+ else if( strstr((char*)buf, RESP_MSG_CONNECT) != NULL){
cid = x2i(buf[9]);
_state.cid = cid;
_state.n++;
@@ -421,7 +409,8 @@
int cid, i;
char *c;
- if( (buf[0] < '0' || buf[0] > '8') ) return;
+// if( (buf[0] < '0' || buf[0] > '8') ) return;
+ if( isdigit (buf[9])) return;
cid = x2i(buf[0]);
if( cid != _state.cid ) return;
@@ -456,34 +445,25 @@
void WizFi310::resWSTATUS (const char *buf)
{
- int idx=0,sep_cnt=0;
- int ip_idx=0,gw_idx=0;
-
+ char* idx_ptr;
+
if(_state.n == 0)
{
_state.n++;
}
else if(_state.n == 1)
{
- for(idx=0;buf[idx]!='\r';idx++)
- {
- if(buf[idx] =='/')
- {
- sep_cnt++;
- continue;
- }
+ idx_ptr = strtok((char*)buf, "/"); // Interface STA or AP
+ idx_ptr = strtok( NULL, "/"); // SSID
+ idx_ptr = strtok( NULL, "/"); // IP Addr
+ memset(_state.ip, 0, sizeof(_state.ip));
+ memcpy(_state.ip, idx_ptr, strlen(idx_ptr)+1);
+
+ idx_ptr = strtok( NULL, "/"); // Gateway Addr
+ memset(_state.gateway, 0, sizeof(_state.gateway));
+ memcpy(_state.gateway, idx_ptr, strlen(idx_ptr)+1);
- if( sep_cnt == 2) // IP Address
- {
- _state.ip[ip_idx++] = buf[idx];
- }
- else if(sep_cnt == 3)
- {
- _state.gateway[gw_idx++] = buf[idx];
- }
- }
- _state.ip[ip_idx] = '\0';
- _state.gateway[gw_idx] = '\0';
_state.res = RES_NULL;
}
-}
\ No newline at end of file
+
+}
--- a/WizFi310/WizFi310_sock.cpp Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310/WizFi310_sock.cpp Mon Jun 26 00:17:10 2017 +0000
@@ -67,9 +67,11 @@
{
if( cmdSCON( "O","UCN",ip, remotePort, localPort, "0" ) ) return -1;
}
+
if(_state.cid < 0) return -1;
-
+
initCon(_state.cid, true);
+
cid = _state.cid;
_con[cid].protocol = proto;
_con[cid].type = TYPE_CLIENT;
@@ -218,14 +220,14 @@
bool WizFi310::isConnected (int cid)
{
if ( cid < 0 || cid >=8 ) return false;
- //printf("%d %d\r\n", cid, _con[cid].connected);
+
return _con[cid].connected;
}
int WizFi310::accept (int cid)
{
if(!isConnected(cid)) return -1;
-
+
if(_con[cid].connected && _con[cid].accept)
{
_con[cid].accept = false;
--- a/WizFi310Interface.cpp Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310Interface.cpp Mon Jun 26 00:17:10 2017 +0000
@@ -125,6 +125,7 @@
struct wizfi310_socket *socket = new struct wizfi310_socket;
if (!socket) {
+ delete socket;
return NSAPI_ERROR_NO_SOCKET;
}
@@ -186,6 +187,7 @@
struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
WizFi310::Protocol proto = (socket->proto == NSAPI_UDP) ? WizFi310::PROTO_UDP : WizFi310::PROTO_TCP;
+
if((cid = _wizfi310.open(proto, addr.get_ip_address(), addr.get_port())) == -1 )
{
return NSAPI_ERROR_DEVICE_ERROR;
@@ -205,16 +207,15 @@
int WizFi310Interface::socket_accept(void **handle, void *server)
{
- struct wizfi310_socket *socket = (struct wizfi310_socket *)server;
struct wizfi310_socket *new_socket = new struct wizfi310_socket;
-
+
if( !new_socket )
{
return NSAPI_ERROR_NO_SOCKET;
}
memset(new_socket, 0, sizeof(new_socket));
-
+
for(int cid=0; cid<WIZFI310_SOCKET_COUNT; cid++)
{
if( _wizfi310.accept(cid) != -1 )
@@ -224,10 +225,12 @@
new_socket->connected = true;
*handle = new_socket;
+
+
return 0;
}
}
-
+ delete new_socket;
return NSAPI_ERROR_WOULD_BLOCK;
}
--- a/WizFi310Interface.h Mon Apr 17 06:44:26 2017 +0000
+++ b/WizFi310Interface.h Mon Jun 26 00:17:10 2017 +0000
@@ -64,7 +64,7 @@
{
return &_wizfi310;
}
-
+
protected:
/** Open a socket
* @param handle Handle in which to store new socket
Wiznet Wi-Fi WizFi310