kopia lustrzana https://github.com/micropython/micropython
esp32/network_ppp: Allow stream=None to suspend PPP.
Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>pull/12729/head
rodzic
75749175a1
commit
86e41e4a32
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +301,9 @@ static mp_obj_t ppp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
|
||||||
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: {
|
case MP_QSTR_stream: {
|
||||||
mp_get_stream_raise(kwargs->table[i].value, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE);
|
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;
|
self->stream = kwargs->table[i].value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue