Skip to content

Commit 77791b5

Browse files
committed
cc3200: Improve usability and robustness of the servers.
1 parent c1c23e2 commit 77791b5

7 files changed

Lines changed: 90 additions & 75 deletions

File tree

cc3200/ftp/ftp.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@
6666
#define FTP_UNIX_TIME_20000101 946684800
6767
#define FTP_UNIX_TIME_20150101 1420070400
6868
#define FTP_UNIX_SECONDS_180_DAYS 15552000
69-
#define FTP_DATA_TIMEOUT_MS 5000 // 5 seconds
70-
#define FTP_CMD_TIMEOUT_MS 120000 // 2 minutes
69+
#define FTP_DATA_TIMEOUT_MS 5000 // 5 seconds
70+
#define FTP_CMD_TIMEOUT_MS 300000 // 5 minutes
7171
#define FTP_SOCKETFIFO_ELEMENTS_MAX 4
7272
#define FTP_CYCLE_TIME_MS (SERVERS_CYCLE_TIME_MS * 2)
7373

@@ -119,14 +119,14 @@ typedef enum {
119119

120120
typedef struct {
121121
uint8_t *dBuffer;
122+
uint32_t ctimeout;
122123
union {
123124
DIR dp;
124125
FIL fp;
125126
};
126127
int16_t lc_sd;
127128
int16_t ld_sd;
128129
int16_t c_sd;
129-
int16_t ctimeout;
130130
int16_t d_sd;
131131
int16_t dtimeout;
132132
ftp_state_t state;
@@ -212,7 +212,6 @@ static void ftp_process_cmd (void);
212212
static void ftp_close_files (void);
213213
static void ftp_close_filesystem_on_error (void);
214214
static void ftp_close_cmd_data (void);
215-
static void ftp_reset (void);
216215
static ftp_cmd_index_t ftp_pop_command (char **str);
217216
static void ftp_pop_param (char **str, char *param);
218217
static int ftp_print_eplf_item (char *dest, uint32_t destsize, FILINFO *fno);
@@ -406,6 +405,16 @@ void ftp_disable (void) {
406405
ftp_data.state = E_FTP_STE_DISABLED;
407406
}
408407

408+
void ftp_reset (void) {
409+
// close all connections and start all over again
410+
servers_close_socket(&ftp_data.lc_sd);
411+
servers_close_socket(&ftp_data.ld_sd);
412+
ftp_close_cmd_data();
413+
ftp_data.state = E_FTP_STE_START;
414+
ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
415+
SOCKETFIFO_Flush();
416+
}
417+
409418
/******************************************************************************
410419
DEFINE PRIVATE FUNCTIONS
411420
******************************************************************************/
@@ -848,16 +857,6 @@ static void ftp_close_cmd_data (void) {
848857
ftp_close_filesystem_on_error ();
849858
}
850859

851-
static void ftp_reset (void) {
852-
// close all connections and start all over again
853-
servers_close_socket(&ftp_data.lc_sd);
854-
servers_close_socket(&ftp_data.ld_sd);
855-
ftp_close_cmd_data();
856-
ftp_data.state = E_FTP_STE_START;
857-
ftp_data.substate.data = E_FTP_STE_SUB_DISCONNECTED;
858-
SOCKETFIFO_Flush();
859-
}
860-
861860
static ftp_cmd_index_t ftp_pop_command (char **str) {
862861
char _cmd[FTP_CMD_SIZE_MAX];
863862
ftp_pop_param (str, _cmd);

cc3200/ftp/ftp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ extern void ftp_init (void);
3434
extern void ftp_run (void);
3535
extern void ftp_enable (void);
3636
extern void ftp_disable (void);
37+
extern void ftp_reset (void);
38+
3739
#endif /* FTP_H_ */

cc3200/mods/modwlan.c

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,22 @@ typedef enum{
7878
}e_StatusBits;
7979

8080
typedef struct _wlan_obj_t {
81-
mp_obj_base_t base;
82-
SlWlanMode_t mode;
83-
uint32_t status;
81+
mp_obj_base_t base;
82+
SlWlanMode_t mode;
83+
uint32_t status;
8484

85-
uint32_t ip;
86-
uint32_t gateway;
87-
uint32_t dns;
85+
uint32_t ip;
86+
uint32_t gateway;
87+
uint32_t dns;
8888

8989
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
90-
bool servers_enabled;
90+
bool servers_enabled;
9191
#endif
92-
uint8_t security;
93-
uint8_t mac[SL_MAC_ADDR_LEN];
94-
uint8_t ssid[33];
95-
uint8_t bssid[6];
92+
uint8_t security;
93+
uint8_t mac[SL_MAC_ADDR_LEN];
94+
uint8_t ssid[33];
95+
uint8_t bssid[6];
96+
volatile uint8_t stasconnected;
9697

9798
} wlan_obj_t;
9899

@@ -162,6 +163,7 @@ STATIC wlan_obj_t wlan_obj = {
162163
.ssid = {0},
163164
.bssid = {0},
164165
.mac = {0},
166+
.stasconnected = 0,
165167
};
166168

167169
STATIC const mp_cb_methods_t wlan_cb_methods;
@@ -193,7 +195,7 @@ STATIC void wlan_lpds_callback_disable (mp_obj_t self_in);
193195
//*****************************************************************************
194196
void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
195197
{
196-
if(!pWlanEvent) {
198+
if (!pWlanEvent) {
197199
return;
198200
}
199201

@@ -202,44 +204,34 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
202204
case SL_WLAN_CONNECT_EVENT:
203205
{
204206
SET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION);
205-
//
206-
// Information about the connected AP (like name, MAC etc) will be
207-
// available in 'slWlanConnectAsyncResponse_t'-Applications
208-
// can use it if required
209-
//
207+
210208
slWlanConnectAsyncResponse_t *pEventData = &pWlanEvent->EventData.STAandP2PModeWlanConnected;
211209

212-
// Copy new connection SSID and BSSID to global parameters
210+
// copy the new connection data
213211
memcpy(wlan_obj.ssid, pEventData->ssid_name, pEventData->ssid_len);
214212
memcpy(wlan_obj.bssid, pEventData->bssid, SL_BSSID_LENGTH);
215213
}
216214
break;
217215
case SL_WLAN_DISCONNECT_EVENT:
218216
{
219-
slWlanConnectAsyncResponse_t* pEventData = NULL;
220-
221217
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION);
222218
CLR_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED);
223219

224-
pEventData = &pWlanEvent->EventData.STAandP2PModeDisconnected;
225-
226-
// If the user has initiated the 'Disconnect' request,
227-
//'reason_code' is SL_USER_INITIATED_DISCONNECTION
228-
if (SL_USER_INITIATED_DISCONNECTION == pEventData->reason_code) {
229-
// TODO ...
230-
}
231-
else {
232-
// TODO: Maybe trow an exception?
233-
}
234220
memset(wlan_obj.ssid, 0, sizeof(wlan_obj.ssid));
235221
memset(wlan_obj.bssid, 0, sizeof(wlan_obj.bssid));
236222
}
237223
break;
238224
case SL_WLAN_STA_CONNECTED_EVENT:
239-
// TODO
225+
wlan_obj.stasconnected++;
240226
break;
241227
case SL_WLAN_STA_DISCONNECTED_EVENT:
242-
// TODO
228+
if (wlan_obj.stasconnected > 0) {
229+
if (--wlan_obj.stasconnected == 0) {
230+
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
231+
servers_reset();
232+
#endif
233+
}
234+
}
243235
break;
244236
case SL_WLAN_P2P_DEV_FOUND_EVENT:
245237
// TODO

cc3200/serverstask.c

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,13 @@ typedef struct {
5454
volatile bool enabled;
5555
volatile bool do_disable;
5656
volatile bool do_enable;
57+
volatile bool do_reset;
5758
}servers_Data_t;
5859

5960
/******************************************************************************
6061
DECLARE PRIVATE DATA
6162
******************************************************************************/
62-
static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false};
63+
static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false, .do_reset = false};
6364

6465
/******************************************************************************
6566
DECLARE PRIVATE FUNCTIONS
@@ -74,7 +75,6 @@ char *servers_pass;
7475
/******************************************************************************
7576
DECLARE PUBLIC FUNCTIONS
7677
******************************************************************************/
77-
7878
void TASK_Servers (void *pvParameters) {
7979

8080
bool cycle = false;
@@ -91,14 +91,21 @@ void TASK_Servers (void *pvParameters) {
9191

9292
if (servers_data.enabled) {
9393
if (servers_data.do_disable) {
94-
servers_data.do_disable = false;
95-
// disable all net processes
94+
// disable network services
9695
telnet_disable();
9796
ftp_disable();
98-
99-
// now clear the flag
97+
// now clear the flags
98+
servers_data.do_disable = false;
99+
servers_data.do_reset = false;
100100
servers_data.enabled = false;
101101
}
102+
else if (servers_data.do_reset) {
103+
// reset network services
104+
telnet_reset();
105+
ftp_reset();
106+
// clear the flag
107+
servers_data.do_reset = false;
108+
}
102109
else {
103110
if (cycle) {
104111
telnet_run();
@@ -109,15 +116,15 @@ void TASK_Servers (void *pvParameters) {
109116
}
110117
}
111118
else if (servers_data.do_enable) {
112-
servers_data.do_enable = false;
113-
119+
// enable network services
114120
telnet_enable();
115121
ftp_enable();
116-
117-
// now set the flag
122+
// now set/clear the flags
118123
servers_data.enabled = true;
124+
servers_data.do_enable = false;
119125
}
120126

127+
// move to the next cycle
121128
cycle = cycle ? false : true;
122129
HAL_Delay(SERVERS_CYCLE_TIME_MS);
123130
// set the alive flag for the wdt
@@ -130,12 +137,18 @@ void servers_start (void) {
130137
servers_data.do_enable = true;
131138
}
132139

140+
void servers_reset (void) {
141+
servers_data.do_reset = true;
142+
}
143+
133144
void servers_stop (void) {
134145
servers_data.do_enable = false;
135146
servers_data.do_disable = true;
136147
do {
137148
HAL_Delay (SERVERS_CYCLE_TIME_MS);
138149
} while (servers_are_enabled());
150+
// clear the last command line
151+
telnet_reset();
139152
}
140153

141154
bool servers_are_enabled (void) {

cc3200/serverstask.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ extern char *servers_pass;
6161
******************************************************************************/
6262
extern void TASK_Servers (void *pvParameters);
6363
extern void servers_start (void);
64+
extern void servers_reset (void);
6465
extern void servers_stop (void);
6566
extern bool servers_are_enabled (void);
6667
extern void servers_close_socket (int16_t *sd);

0 commit comments

Comments
 (0)