cc3200: Add method to configure the servers timeout.
With network.server_timeout(secs) the timeout can be changed. The default value is 300 secs. Minimmum accpeted is 5 secs. Without params the function returns the current configured timeout.
This commit is contained in:
parent
a546acda8c
commit
cc20482aa9
@ -68,7 +68,6 @@
|
||||
#define FTP_UNIX_TIME_20150101 1420070400
|
||||
#define FTP_UNIX_SECONDS_180_DAYS 15552000
|
||||
#define FTP_DATA_TIMEOUT_MS 5000 // 5 seconds
|
||||
#define FTP_CMD_TIMEOUT_MS 120000 // 2 minutes
|
||||
#define FTP_SOCKETFIFO_ELEMENTS_MAX 4
|
||||
#define FTP_CYCLE_TIME_MS (SERVERS_CYCLE_TIME_MS * 2)
|
||||
|
||||
@ -253,7 +252,7 @@ void ftp_run (void) {
|
||||
ftp_wait_for_enabled();
|
||||
break;
|
||||
case E_FTP_STE_START:
|
||||
if (ftp_create_listening_socket(&ftp_data.lc_sd, FTP_CMD_PORT, FTP_CMD_CLIENTS_MAX )) {
|
||||
if (wlan_is_connected() && ftp_create_listening_socket(&ftp_data.lc_sd, FTP_CMD_PORT, FTP_CMD_CLIENTS_MAX)) {
|
||||
ftp_data.state = E_FTP_STE_READY;
|
||||
}
|
||||
break;
|
||||
@ -838,7 +837,7 @@ static void ftp_process_cmd (void) {
|
||||
}
|
||||
}
|
||||
else if (result == E_FTP_RESULT_CONTINUE) {
|
||||
if (ftp_data.ctimeout++ > (FTP_CMD_TIMEOUT_MS / FTP_CYCLE_TIME_MS)) {
|
||||
if (ftp_data.ctimeout++ > (servers_get_timeout() / FTP_CYCLE_TIME_MS)) {
|
||||
ftp_send_reply(221, NULL);
|
||||
}
|
||||
}
|
||||
|
@ -37,36 +37,54 @@
|
||||
|
||||
/// \module network - network configuration
|
||||
///
|
||||
/// This module provides network drivers and routing configuration.
|
||||
/// This module provides network drivers and server configuration.
|
||||
|
||||
void mod_network_init0(void) {
|
||||
}
|
||||
|
||||
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
|
||||
STATIC mp_obj_t network_server_start(void) {
|
||||
STATIC mp_obj_t network_server_running(mp_uint_t n_args, const mp_obj_t *args) {
|
||||
if (n_args > 0) {
|
||||
// set
|
||||
if (mp_obj_is_true(args[0])) {
|
||||
servers_start();
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_server_start_obj, network_server_start);
|
||||
|
||||
STATIC mp_obj_t network_server_stop(void) {
|
||||
} else {
|
||||
servers_stop();
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_server_stop_obj, network_server_stop);
|
||||
|
||||
STATIC mp_obj_t network_server_running(void) {
|
||||
} else {
|
||||
// get
|
||||
return MP_BOOL(servers_are_enabled());
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_server_running_obj, network_server_running);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(network_server_running_obj, 0, 1, network_server_running);
|
||||
|
||||
STATIC mp_obj_t network_server_login(mp_obj_t user, mp_obj_t pass) {
|
||||
const char *_user = mp_obj_str_get_str(user);
|
||||
const char *_pass = mp_obj_str_get_str(pass);
|
||||
if (strlen(user) > SERVERS_USER_PASS_LEN_MAX || strlen(pass) > SERVERS_USER_PASS_LEN_MAX) {
|
||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
|
||||
}
|
||||
servers_set_login ((char *)_user, (char *)_pass);
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(network_server_login_obj, network_server_login);
|
||||
|
||||
// timeout value given in seconds
|
||||
STATIC mp_obj_t network_server_timeout(mp_uint_t n_args, const mp_obj_t *args) {
|
||||
if (n_args > 0) {
|
||||
uint32_t _timeout = mp_obj_get_int(args[0]);
|
||||
if (!servers_set_timeout(_timeout * 1000)) {
|
||||
// timeout is too low
|
||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
|
||||
}
|
||||
return mp_const_none;
|
||||
} else {
|
||||
// get
|
||||
return mp_obj_new_int(servers_get_timeout() / 1000);
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(network_server_timeout_obj, 0, 1, network_server_timeout);
|
||||
#endif
|
||||
|
||||
STATIC const mp_map_elem_t mp_module_network_globals_table[] = {
|
||||
@ -74,10 +92,9 @@ STATIC const mp_map_elem_t mp_module_network_globals_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_WLAN), (mp_obj_t)&mod_network_nic_type_wlan },
|
||||
|
||||
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_start_server), (mp_obj_t)&network_server_start_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_stop_server), (mp_obj_t)&network_server_stop_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_server_running), (mp_obj_t)&network_server_running_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_server_login), (mp_obj_t)&network_server_login_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_server_timeout), (mp_obj_t)&network_server_timeout_obj },
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -193,7 +193,6 @@ STATIC void wlan_reenable (SlWlanMode_t mode);
|
||||
STATIC void wlan_servers_start (void);
|
||||
STATIC void wlan_servers_stop (void);
|
||||
STATIC void wlan_get_sl_mac (void);
|
||||
STATIC bool wlan_is_connected (void);
|
||||
STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, const char* bssid, uint8_t sec,
|
||||
const char* key, uint32_t key_len, uint32_t timeout);
|
||||
STATIC void wlan_lpds_callback_enable (mp_obj_t self_in);
|
||||
@ -224,6 +223,11 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
|
||||
memcpy(wlan_obj.ssid_o, pEventData->ssid_name, pEventData->ssid_len);
|
||||
wlan_obj.ssid_o[pEventData->ssid_len] = '\0';
|
||||
SET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION);
|
||||
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
|
||||
// we must reset the servers in case that the last connection
|
||||
// was lost without any notification being received
|
||||
servers_reset();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case SL_WLAN_DISCONNECT_EVENT:
|
||||
@ -241,6 +245,11 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent) {
|
||||
memcpy(wlan_obj.ssid_o, pEventData->go_peer_device_name, pEventData->go_peer_device_name_len);
|
||||
wlan_obj.ssid_o[pEventData->go_peer_device_name_len] = '\0';
|
||||
wlan_obj.staconnected = true;
|
||||
#if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP)
|
||||
// we must reset the servers in case that the last connection
|
||||
// was lost without any notification being received
|
||||
servers_reset();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case SL_WLAN_STA_DISCONNECTED_EVENT:
|
||||
@ -547,12 +556,17 @@ void wlan_get_ip (uint32_t *ip) {
|
||||
}
|
||||
}
|
||||
|
||||
bool wlan_is_connected (void) {
|
||||
return ((GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION) &&
|
||||
GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED)) || wlan_obj.staconnected);
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// DEFINE STATIC FUNCTIONS
|
||||
//*****************************************************************************
|
||||
|
||||
STATIC void wlan_initialize_data (void) {
|
||||
wlan_obj.status = 0;
|
||||
CLR_STATUS_BIT_ALL(wlan_obj.status);
|
||||
wlan_obj.dns = 0;
|
||||
wlan_obj.gateway = 0;
|
||||
wlan_obj.ip = 0;
|
||||
@ -567,7 +581,8 @@ STATIC void wlan_reenable (SlWlanMode_t mode) {
|
||||
// stop and start again
|
||||
sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER);
|
||||
sl_Stop(SL_STOP_TIMEOUT);
|
||||
wlan_obj.status = 0;
|
||||
CLR_STATUS_BIT_ALL(wlan_obj.status);
|
||||
wlan_obj.staconnected = false;
|
||||
wlan_obj.mode = sl_Start(0, 0, 0);
|
||||
sl_LockObjUnlock (&wlan_LockObj);
|
||||
ASSERT (wlan_obj.mode == mode);
|
||||
@ -620,11 +635,6 @@ STATIC void wlan_get_sl_mac (void) {
|
||||
sl_NetCfgGet(SL_MAC_ADDRESS_GET, NULL, &macAddrLen, wlan_obj.mac);
|
||||
}
|
||||
|
||||
STATIC bool wlan_is_connected (void) {
|
||||
return ((GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_CONNECTION) &&
|
||||
GET_STATUS_BIT(wlan_obj.status, STATUS_BIT_IP_ACQUIRED)) || wlan_obj.staconnected);
|
||||
}
|
||||
|
||||
/// \method init(mode, ssid=None, *, security=wlan.OPEN, key=None, channel=5)
|
||||
///
|
||||
/// Initialise the WLAN engine with the given parameters:
|
||||
|
@ -62,6 +62,7 @@ extern void wlan_stop (uint32_t timeout);
|
||||
extern void wlan_start (void);
|
||||
extern void wlan_get_mac (uint8_t *macAddress);
|
||||
extern void wlan_get_ip (uint32_t *ip);
|
||||
extern bool wlan_is_connected (void);
|
||||
|
||||
extern int wlan_gethostbyname(const char *name, mp_uint_t len, uint8_t *out_ip, uint8_t family);
|
||||
extern int wlan_socket_socket(mod_network_socket_obj_t *s, int *_errno);
|
||||
|
@ -237,10 +237,9 @@ Q(IPPROTO_RAW)
|
||||
|
||||
// for network class
|
||||
Q(network)
|
||||
Q(start_server)
|
||||
Q(stop_server)
|
||||
Q(server_running)
|
||||
Q(server_login)
|
||||
Q(server_timeout)
|
||||
|
||||
// for WLAN class
|
||||
Q(WLAN)
|
||||
|
@ -45,21 +45,25 @@
|
||||
|
||||
#define SERVERS_DEF_USER "micro"
|
||||
#define SERVERS_DEF_PASS "python"
|
||||
#define SERVERS_DEF_TIMEOUT_MS 300000 // 5 minutes
|
||||
#define SERVERS_MIN_TIMEOUT_MS 5000 // 5 seconds
|
||||
|
||||
/******************************************************************************
|
||||
DEFINE PRIVATE TYPES
|
||||
******************************************************************************/
|
||||
typedef struct {
|
||||
volatile bool enabled;
|
||||
volatile bool do_disable;
|
||||
volatile bool do_enable;
|
||||
volatile bool do_reset;
|
||||
}servers_Data_t;
|
||||
uint32_t timeout;
|
||||
bool enabled;
|
||||
bool do_disable;
|
||||
bool do_enable;
|
||||
bool do_reset;
|
||||
} servers_data_t;
|
||||
|
||||
/******************************************************************************
|
||||
DECLARE PRIVATE DATA
|
||||
******************************************************************************/
|
||||
static servers_Data_t servers_data = {.enabled = false, .do_disable = false, .do_enable = false, .do_reset = false};
|
||||
static servers_data_t servers_data = {.timeout = SERVERS_DEF_TIMEOUT_MS, .enabled = false, .do_disable = false,
|
||||
.do_enable = false, .do_reset = false};
|
||||
static volatile bool sleep_sockets = false;
|
||||
|
||||
/******************************************************************************
|
||||
@ -103,8 +107,7 @@ void TASK_Servers (void *pvParameters) {
|
||||
servers_data.do_disable = false;
|
||||
servers_data.enabled = false;
|
||||
}
|
||||
|
||||
if (servers_data.do_reset) {
|
||||
else if (servers_data.do_reset && servers_data.enabled) {
|
||||
telnet_reset();
|
||||
ftp_reset();
|
||||
servers_data.do_reset = false;
|
||||
@ -112,14 +115,13 @@ void TASK_Servers (void *pvParameters) {
|
||||
// and we should also close all user sockets
|
||||
modusocket_close_all_user_sockets();
|
||||
}
|
||||
else {
|
||||
|
||||
if (cycle) {
|
||||
telnet_run();
|
||||
}
|
||||
else {
|
||||
ftp_run();
|
||||
}
|
||||
}
|
||||
|
||||
if (sleep_sockets) {
|
||||
sleep_sockets = false;
|
||||
@ -176,6 +178,18 @@ void servers_set_login (char *user, char *pass) {
|
||||
memcpy(servers_pass, pass, SERVERS_USER_PASS_LEN_MAX);
|
||||
}
|
||||
|
||||
bool servers_set_timeout (uint32_t timeout) {
|
||||
if (timeout < SERVERS_MIN_TIMEOUT_MS) {
|
||||
return false;
|
||||
}
|
||||
servers_data.timeout = timeout;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t servers_get_timeout (void) {
|
||||
return servers_data.timeout;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
DEFINE PRIVATE FUNCTIONS
|
||||
******************************************************************************/
|
||||
|
@ -61,5 +61,7 @@ extern bool servers_are_enabled (void);
|
||||
extern void servers_close_socket (int16_t *sd);
|
||||
extern void servers_set_login (char *user, char *pass);
|
||||
extern void server_sleep_sockets (void);
|
||||
extern bool servers_set_timeout (uint32_t timeout);
|
||||
extern uint32_t servers_get_timeout (void);
|
||||
|
||||
#endif /* SERVERSTASK_H_ */
|
||||
|
@ -49,7 +49,6 @@
|
||||
#define TELNET_TX_RETRIES_MAX 25
|
||||
#define TELNET_WAIT_TIME_MS 5
|
||||
#define TELNET_LOGIN_RETRIES_MAX 3
|
||||
#define TELNET_TIMEOUT_MS 300000 // 5 minutes
|
||||
#define TELNET_CYCLE_TIME_MS (SERVERS_CYCLE_TIME_MS * 2)
|
||||
|
||||
/******************************************************************************
|
||||
@ -151,7 +150,7 @@ void telnet_run (void) {
|
||||
telnet_wait_for_enabled();
|
||||
break;
|
||||
case E_TELNET_STE_START:
|
||||
if (telnet_create_socket()) {
|
||||
if (wlan_is_connected() && telnet_create_socket()) {
|
||||
telnet_data.state = E_TELNET_STE_LISTEN;
|
||||
}
|
||||
break;
|
||||
@ -237,7 +236,7 @@ void telnet_run (void) {
|
||||
}
|
||||
|
||||
if (telnet_data.state >= E_TELNET_STE_CONNECTED) {
|
||||
if (telnet_data.timeout++ > (TELNET_TIMEOUT_MS / TELNET_CYCLE_TIME_MS)) {
|
||||
if (telnet_data.timeout++ > (servers_get_timeout() / TELNET_CYCLE_TIME_MS)) {
|
||||
telnet_reset();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user