Daniël van de Giessen 2024-04-04 07:10:12 +08:00 zatwierdzone przez GitHub
commit b971a9b1de
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 30 dodań i 6 usunięć

Wyświetl plik

@ -85,7 +85,9 @@ static void ppp_status_cb(ppp_pcb *pcb, int err_code, void *ctx) {
} }
static mp_obj_t ppp_make_new(mp_obj_t stream) { static mp_obj_t ppp_make_new(mp_obj_t stream) {
mp_get_stream_raise(stream, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE); if (stream != MP_OBJ_NULL) {
mp_get_stream_raise(stream, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE);
}
ppp_if_obj_t *self = mp_obj_malloc_with_finaliser(ppp_if_obj_t, &ppp_if_type); ppp_if_obj_t *self = mp_obj_malloc_with_finaliser(ppp_if_obj_t, &ppp_if_type);
self->stream = stream; self->stream = stream;
@ -100,8 +102,14 @@ MP_DEFINE_CONST_FUN_OBJ_1(esp_network_ppp_make_new_obj, ppp_make_new);
static u32_t ppp_output_callback(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx) { static u32_t ppp_output_callback(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx) {
ppp_if_obj_t *self = ctx; ppp_if_obj_t *self = ctx;
mp_obj_t stream = self->stream;
if (stream == MP_OBJ_NULL) {
return 0;
}
int err; int err;
return mp_stream_rw(self->stream, data, len, &err, MP_STREAM_RW_WRITE); return mp_stream_rw(stream, data, len, &err, MP_STREAM_RW_WRITE);
} }
static void pppos_client_task(void *self_in) { static void pppos_client_task(void *self_in) {
@ -110,10 +118,15 @@ static void pppos_client_task(void *self_in) {
int len = 0; int len = 0;
while (ulTaskNotifyTake(pdTRUE, len <= 0) == 0) { while (ulTaskNotifyTake(pdTRUE, len <= 0) == 0) {
int err; mp_obj_t stream = self->stream;
len = mp_stream_rw(self->stream, buf, sizeof(buf), &err, 0); if (stream == MP_OBJ_NULL) {
if (len > 0) { len = 0;
pppos_input_tcpip(self->pcb, (u8_t *)buf, len); } else {
int err;
len = mp_stream_rw(stream, buf, sizeof(buf), &err, 0);
if (len > 0) {
pppos_input_tcpip(self->pcb, (u8_t *)buf, len);
}
} }
} }
@ -287,6 +300,13 @@ static mp_obj_t ppp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
for (size_t i = 0; i < kwargs->alloc; i++) { for (size_t i = 0; i < kwargs->alloc; i++) {
if (mp_map_slot_is_filled(kwargs, i)) { if (mp_map_slot_is_filled(kwargs, i)) {
switch (mp_obj_str_get_qstr(kwargs->table[i].key)) { switch (mp_obj_str_get_qstr(kwargs->table[i].key)) {
case MP_QSTR_stream: {
if (kwargs->table[i].value != MP_OBJ_NULL) {
mp_get_stream_raise(kwargs->table[i].value, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE);
}
self->stream = kwargs->table[i].value;
break;
}
default: default:
break; break;
} }
@ -302,6 +322,10 @@ static mp_obj_t ppp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
mp_obj_t val = mp_const_none; mp_obj_t val = mp_const_none;
switch (mp_obj_str_get_qstr(args[1])) { switch (mp_obj_str_get_qstr(args[1])) {
case MP_QSTR_stream: {
val = self->stream;
break;
}
case MP_QSTR_ifname: { case MP_QSTR_ifname: {
if (self->pcb != NULL) { if (self->pcb != NULL) {
struct netif *pppif = ppp_netif(self->pcb); struct netif *pppif = ppp_netif(self->pcb);