Skip to content

Commit

Permalink
pico-w network bug fix
Browse files Browse the repository at this point in the history
 - issue #549
  • Loading branch information
communix committed Jan 16, 2023
1 parent 40043cf commit bc38f08
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src/modules/net/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ class Server extends EventEmitter {
this.emit('connection', client);
}
}
this._dev.bind(this._fd, '127.0.0.1', port, (err) => {
this._dev.bind(this._fd, this._dev.ip, port, (err) => {
if (err) {
this.emit('error', new SystemError(this._dev.errno));
} else {
Expand Down
70 changes: 38 additions & 32 deletions src/modules/pico_cyw43/module_pico_cyw43.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,22 @@ int km_get_socket_fd(void) {
}

void km_cyw43_deinit() {
for (int i = 0; i < KM_MAX_SOCKET_NO; i++) {
if (__socket_info.socket[i].fd >= 0) {
if (__socket_info.socket[i].ptcl == NET_SOCKET_STREAM) {
if (__socket_info.socket[i].tcp_pcb) {
tcp_abort(__socket_info.socket[i].tcp_pcb);
}
if (__socket_info.socket[i].tcp_server_pcb) {
tcp_abort(__socket_info.socket[i].tcp_server_pcb);
}
} else {
if (__socket_info.socket[i].udp_pcb) {
udp_remove(__socket_info.socket[i].udp_pcb);
}
}
}
}
if (__cyw43_drv.status_flag & KM_CYW43_STATUS_INIT) {
cyw43_arch_deinit();
__cyw43_drv.status_flag = KM_CYW43_STATUS_DISABLED;
Expand Down Expand Up @@ -176,17 +192,17 @@ JERRYXX_FUN(pico_cyw43_wifi_reset) {
cyw43_delay_ms(50);
__cyw43_drv.status_flag = KM_CYW43_STATUS_DISABLED;
if (__cyw43_init()) {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
-1);
} else {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
0);
}
if (JERRYXX_HAS_ARG(0)) {
jerry_value_t callback = JERRYXX_GET_ARG(0);
jerry_value_t reset_js_cb = jerry_acquire_value(callback);
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, 0);
jerry_value_t this_val = jerry_create_undefined();
jerry_value_t args_p[1] = {errno};
jerry_call_function(reset_js_cb, this_val, args_p, 1);
Expand Down Expand Up @@ -235,10 +251,10 @@ JERRYXX_FUN(pico_cyw43_wifi_scan) {
cyw43_wifi_scan_options_t scan_opt = {0};
int ret = cyw43_wifi_scan(&cyw43_state, &scan_opt, NULL, __scan_cb);
if (ret < 0) {
jerryxx_set_property_number(JERRYXX_GET_THIS,
MSTR_PICO_CYW43_NETWORK_ERRNO, -1);
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
-1);
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, -1);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, -1);
jerry_value_t this_val = jerry_create_undefined();
jerry_value_t args_p[1] = {errno};
jerry_call_function(scan_js_cb, this_val, args_p, 1);
Expand All @@ -257,8 +273,8 @@ JERRYXX_FUN(pico_cyw43_wifi_scan) {
}
} while (diff < SCAN_TIMEOUT);
__p_scan_result->scanning = false;
jerryxx_set_property_number(JERRYXX_GET_THIS,
MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
0);
jerry_value_t scan_array =
jerry_create_array(__p_scan_result->queue_size);
__scan_queue_t *current = __p_scan_result->p_scan_result_queue;
Expand Down Expand Up @@ -300,7 +316,7 @@ JERRYXX_FUN(pico_cyw43_wifi_scan) {
free(remove);
}
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, 0);
jerry_value_t this_val = jerry_create_undefined();
jerry_value_t args_p[2] = {errno, scan_array};
jerry_call_function(scan_js_cb, this_val, args_p, 2);
Expand Down Expand Up @@ -350,10 +366,10 @@ JERRYXX_FUN(pico_cyw43_wifi_connect) {
free(pw_str);
}
if (connect_ret) {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
-1);
} else {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
0);
jerry_value_t assoc_js_cb =
jerryxx_get_property(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ASSOC_CB);
Expand Down Expand Up @@ -382,7 +398,7 @@ JERRYXX_FUN(pico_cyw43_wifi_connect) {
jerry_value_t callback = JERRYXX_GET_ARG(1);
jerry_value_t connect_js_cb = jerry_acquire_value(callback);
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, 0);
jerry_value_t this_val = jerry_create_undefined();
jerry_value_t args_p[1] = {errno};
jerry_call_function(connect_js_cb, this_val, args_p, 1);
Expand All @@ -399,7 +415,7 @@ JERRYXX_FUN(pico_cyw43_wifi_disconnect) {
if (disconnect_ret == 0) {
jerry_value_t disconnect_js_cb = jerryxx_get_property(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_DISCONNECT_CB);
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
0);
if (jerry_value_is_function(disconnect_js_cb)) {
jerry_value_t this_val = jerry_create_undefined();
Expand All @@ -408,14 +424,14 @@ JERRYXX_FUN(pico_cyw43_wifi_disconnect) {
}
jerry_release_value(disconnect_js_cb);
} else {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
-1);
}
if (JERRYXX_HAS_ARG(0)) {
jerry_value_t callback = JERRYXX_GET_ARG(0);
jerry_value_t js_cb = jerry_acquire_value(callback);
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, 0);
jerry_value_t this_val = jerry_create_undefined();
jerry_value_t args_p[1] = {errno};
jerry_call_function(js_cb, this_val, args_p, 1);
Expand All @@ -442,17 +458,17 @@ JERRYXX_FUN(pico_cyw43_wifi_get_connection) {
*/
jerryxx_set_property_string(obj, MSTR_PICO_CYW43_SCANINFO_BSSID, "");
/* free(str_buff); */
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
0);
} else {
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO,
jerryxx_set_property_number(JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO,
-1);
}
if (JERRYXX_HAS_ARG(0)) {
jerry_value_t callback = JERRYXX_GET_ARG(0);
jerry_value_t get_connect_js_cb = jerry_acquire_value(callback);
jerry_value_t errno = jerryxx_get_property_number(
JERRYXX_GET_THIS, MSTR_PICO_CYW43_NETWORK_ERRNO, 0);
JERRYXX_GET_THIS, MSTR_PICO_CYW43_WIFI_ERRNO, 0);
jerry_value_t this_val = jerry_create_undefined();
if (wifi_status == CYW43_LINK_UP) {
jerry_value_t args_p[2] = {errno, obj};
Expand Down Expand Up @@ -569,16 +585,8 @@ static err_t __net_socket_close(uint8_t fd) {
err_t err = ERR_OK;
if (__socket_info.socket[fd].ptcl == NET_SOCKET_STREAM) {
if (__socket_info.socket[fd].tcp_pcb) {
tcp_arg(__socket_info.socket[fd].tcp_pcb, NULL);
// tcp_poll(__socket_info.socket[fd].tcp_pcb, NULL, 0);
// tcp_sent(__socket_info.socket[fd].tcp_pcb, NULL);
// tcp_err(__socket_info.socket[fd].tcp_pcb, NULL);
tcp_recv(__socket_info.socket[fd].tcp_pcb, NULL);
err = tcp_close(__socket_info.socket[fd].tcp_pcb);
if (err != ERR_OK) {
tcp_abort(__socket_info.socket[fd].tcp_pcb);
err = ERR_ABRT;
}
tcp_abort(__socket_info.socket[fd].tcp_pcb);
__socket_info.socket[fd].fd = -1;
__socket_info.socket[fd].tcp_pcb = NULL;
}
} else { /** UDP */
Expand All @@ -604,10 +612,8 @@ static err_t __net_data_receved(uint8_t fd, struct tcp_pcb *tpcb,
struct pbuf *p) {
err_t err = ERR_OK;
if (p == NULL) {
err = __net_socket_close(fd);
if ((err == ERR_OK) && (__socket_info.socket[fd].state)) {
__socket_info.socket[fd].fd = -1;
}
tcp_abort(tpcb);
__socket_info.socket[fd].fd = -1;
} else {
if (p->tot_len > 0) {
char *receiver_buffer = (char *)calloc(1, p->tot_len + 1);
Expand Down
8 changes: 4 additions & 4 deletions targets/rp2/src/i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,18 @@ static bool __check_i2c_pins(uint8_t bus, km_i2c_pins_t pins) {
return false;
}
if (bus == 0) {
if ((pins.sda >= 0) && ((pins.sda % 4) != 0) || (pins.sda > 21)) {
if (((pins.sda >= 0) && ((pins.sda % 4) != 0)) || (pins.sda > 21)) {
return false;
}
if ((pins.scl >= 0) && ((pins.scl % 4) != 1) || (pins.scl > 21)) {
if (((pins.scl >= 0) && ((pins.scl % 4) != 1)) || (pins.scl > 21)) {
return false;
}
} else if (bus == 1) {
if ((pins.sda >= 0) && ((pins.sda % 4) != 2) ||
if (((pins.sda >= 0) && ((pins.sda % 4) != 2)) ||
((pins.sda > 21) && (pins.sda < 26))) {
return false;
}
if ((pins.scl >= 0) && ((pins.scl % 4) != 3) ||
if (((pins.scl >= 0) && ((pins.scl % 4) != 3)) ||
((pins.scl > 21) && (pins.scl < 26))) {
return false;
}
Expand Down

0 comments on commit bc38f08

Please sign in to comment.