8000 lte: callback LTE_EVENT_BREAK · p3tr0/pycom-micropython-sigfox@9cc50b2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9cc50b2

Browse files
committed
lte: callback LTE_EVENT_BREAK
- disable the existing LTE_EVENT_COVERAGE_LOST - disable sending +++ at a break
1 parent 4937349 commit 9cc50b2

File tree

3 files changed

+60
-46
lines changed

3 files changed

+60
-46
lines changed

esp32/lte/lteppp.c

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "esp32_mphal.h"
3030
#include "lwip/dns.h"
3131
#include "modlte.h"
32+
#include "str_utils.h"
3233

3334
/******************************************************************************
3435
DEFINE CONSTANTS
@@ -569,11 +570,11 @@ static void TASK_LTE (void *pvParameters) {
569570
if(!expect_continuation)
570571
xQueueSend(xRxQueue, (void *)lte_task_rsp, (TickType_t)portMAX_DELAY);
571572
}
572-
else if(state == E_LTE_PPP && lte_uart_break_evt)
573-
{
574-
lteppp_send_at_cmd("+++", LTE_PPP_BACK_OFF_TIME_MS);
575-
lteppp_suspend();
576-
}
573+
//else if(state == E_LTE_PPP && lte_uart_break_evt)
574+
//{
575+
// lteppp_send_at_cmd("+++", LTE_PPP_BACK_OFF_TIME_MS);
576+
// lteppp_suspend();
577+
//}
577578
else
578579
{
579580
if (state == E_LTE_PPP) {
@@ -621,34 +622,37 @@ static void TASK_LTE (void *pvParameters) {
621622

622623
static void TASK_UART_EVT (void *pvParameters) {
623624
uart_event_t event;
624-
uint8_t buff[50] = {0};
625+
//uint8_t buff[50] = {0};
625626
for(;;) {
626627
//Waiting for UART event.
627628
if(xQueueReceive(uart0_queue, (void * )&event, (portTickType)portMAX_DELAY)) {
628629

629-
switch(event.type)
630-
{
630+
switch(event.type) {
631631
case UART_DATA:
632-
if (lte_uart_break_evt) {
633-
634-
uint32_t rx_len = uart_read_bytes(LTE_UART_ID, buff, LTE_UART_BUFFER_SIZE,
635-
LTE_TRX_WAIT_MS(LTE_UART_BUFFER_SIZE) / portTICK_RATE_MS);
636-
637-
if ((rx_len) && (strstr((const char *)buff, "OK") != NULL))
638-
{
639-
if(strstr((const char *)buff, "+CEREG: 4") != NULL)
640-
{
641-
modlte_urc_events(LTE_EVENT_COVERAGE_LOST);
642-
}
643-
644-
lte_uart_break_evt = false;
645-
}
646-
}
632+
// if (lte_uart_break_evt) {
633+
634+
// uint32_t rx_len = uart_read_bytes(LTE_UART_ID, buff, LTE_UART_BUFFER_SIZE,
635+
// LTE_TRX_WAIT_MS(LTE_UART_BUFFER_SIZE) / portTICK_RATE_MS);
636+
637+
// MSG("uart_data evt + break (%u)\n", rx_len);
638+
// hexdump(buff, rx_len);
639+
// if ((rx_len) && (strstr((const char *)buff, "OK") != NULL)) {
640+
// MSG("OK\n");
641+
// if(strstr((const char *)buff, "+CEREG: 4") != NULL) {
642+
// MSG("CEREG 4, trigger callback\n");
643+
// modlte_urc_events(LTE_EVENT_COVERAGE_LOST);
644+
// }
645+
// lte_uart_break_evt = false;
646+
// MSG("break=false\n");
647+
// }
648+
// }
647649
break;
648650
case UART_BREAK:
651+
// MSG("LTE_UART: uart_break evt, ppp=%u (4=ppp)\n", lteppp_get_state());
649652
if (E_LTE_PPP == lteppp_get_state()) {
650653
lte_uart_break_evt = true;
651654
MSG("uart_break evt and ppp, so break=true\n");
655+
modlte_urc_events(LTE_EVENT_BREAK);
652656
} else {
653657
// this should not happen, because the sequans modem only issues a break event when in ppp
654658
MSG("uart_break evt, but no ppp, so do nothing\n");

esp32/mods/modlte.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
/******************************************************************************
106106
DECLARE PRIVATE DATA
107107
******************************************************************************/
108-
static lte_obj_t lte_obj = {.init = false, .trigger = LTE_TRIGGER_NONE, .events = 0, .handler = NULL, .handler_arg = NULL};
108+
static lte_obj_t lte_obj = {.init = false, .trigger = LTE_EVENT_NONE, .events = 0, .handler = NULL, .handler_arg = NULL};
109109
static lte_task_rsp_data_t modlte_rsp;
110110
uart_dev_t* uart_driver_0 = &UART0;
111111
uart_dev_t* uart_driver_lte = &UART2;
@@ -171,18 +171,22 @@ void modlte_start_modem(void)
171171

172172
void modlte_urc_events(lte_events_t events)
173173
{
174-
switch(events)
174+
// set the events to report to the user, the clearing is done upon reading via lte_events()
175+
if ( (events & LTE_EVENT_COVERAGE_LOST)
176+
&& (lte_obj.trigger & LTE_EVENT_COVERAGE_LOST) )
175177
{
176-
case LTE_EVENT_COVERAGE_LOST:
177-
if ((lte_obj.trigger & LTE_TRIGGER_SIG_LOST)) {
178-
lte_obj.events |= (uint32_t)LTE_TRIGGER_SIG_LOST;
179-
}
180-
mp_irq_queue_interrupt(lte_callback_handler, &lte_obj);
181-
break;
182-
default:
183-
break;
178+
lte_obj.events |= (uint32_t)LTE_EVENT_COVERAGE_LOST;
184179
}
180+
if ( (events & LTE_EVENT_BREAK)
181+
&& (lte_obj.trigger & LTE_EVENT_BREAK) )
182+
{
183+
lte_obj.events |= (uint32_t)LTE_EVENT_BREAK;
184+
}
185+
186+
//MSG("urc(%u) l.trig=%u l.eve=%d\n", events, lte_obj.trigger, lte_obj.events);
187+
mp_irq_queue_interrupt(lte_callback_handler, &lte_obj);
185188
}
189+
186190
//*****************************************************************************
187191
// DEFINE STATIC FUNCTIONS
188192
//*****************************************************************************
@@ -192,10 +196,10 @@ static void lte_callback_handler(void* arg)
192196
lte_obj_t *self = arg;
193197

194198
if (self->handler && self->handler != mp_const_none) {
195-
MSG("call callback(handler=%p, arg=%p)\n", self->handler_arg, self->handler);
199+
//MSG("call callback(handler=%p, arg=%p)\n", self->handler_arg, self->handler);
196200
mp_call_function_1(self->handler, self->handler_arg);
197201
}else{
198-
MSG("no callback\n");
202+
//MSG("no callback\n");
199203
}
200204

201205
}
@@ -1598,7 +1602,8 @@ STATIC const mp_map_elem_t lte_locals_dict_table[] = {
15981602
// class constants
15991603
{ MP_OBJ_NEW_QSTR(MP_QSTR_IP), MP_OBJ_NEW_QSTR(MP_QSTR_IP) },
16001604
{ MP_OBJ_NEW_QSTR(MP_QSTR_IPV4V6), MP_OBJ_NEW_QSTR(MP_QSTR_IPV4V6) },
1601-
{ MP_OBJ_NEW_QSTR(MP_QSTR_EVENT_COVERAGE_LOSS), MP_OBJ_NEW_SMALL_INT(LTE_TRIGGER_SIG_LOST) },
1605+
{ MP_OBJ_NEW_QSTR(MP_QSTR_EVENT_COVERAGE_LOSS), MP_OBJ_NEW_SMALL_INT(LTE_EVENT_COVERAGE_LOST) },
1606+
{ MP_OBJ_NEW_QSTR(MP_QSTR_EVENT_BREAK), MP_OBJ_NEW_SMALL_INT(LTE_EVENT_BREAK) },
16021607
// PSM Power Saving Mode
16031608
{ MP_OBJ_NEW_QSTR(MP_QSTR_PSM_PERIOD_2S), MP_OBJ_NEW_SMALL_INT(PSM_PERIOD_2S) },
16041609
{ MP_OBJ_NEW_QSTR(MP_QSTR_PSM_PERIOD_30S), MP_OBJ_NEW_SMALL_INT(PSM_PERIOD_30S) },

esp32/mods/modlte.h

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,19 @@
1616

1717
#define LTE_MAX_RX_SIZE 1024
1818

19-
#define LTE_TRIGGER_NONE 0x00000000
20-
#define LTE_TRIGGER_SIG_LOST 0x00000001
19+
// // trigger and event definitions used in Micropython API
20+
// #define LTE_EVENT_NONE 0x00000000
21+
// #define LTE_EVENT_COVERAGE_LOST 0x00000001
22+
// #define LTE_EVENT_BREAK 0x00000002
23+
24+
25+
typedef enum
26+
{
27+
LTE_EVENT_NONE = 0x00000000,
28+
LTE_EVENT_COVERAGE_LOST = 0x00000001,
29+
LTE_EVENT_BREAK = 0x00000002,
30+
}lte_events_t;
31+
2132

2233
typedef struct _lte_obj_t {
2334
mp_obj_base_t base;
@@ -26,18 +37,12 @@ typedef struct _lte_obj_t {
2637
uint8_t cid;
2738
bool init;
2839
bool carrier;
29-
uint32_t trigger;
30-
int32_t events;
40+
lte_events_t trigger;
41+
lte_events_t events;
3142
mp_obj_t handler;
3243
mp_obj_t handler_arg;
3344
} lte_obj_t;
3445

35-
typedef enum
36-
{
37-
LTE_EVENT_COVERAGE_LOST = 0,
38-
LTE_EVENT_MAX
39-
}lte_events_t;
40-
4146

4247
/******************************************************************************
4348
DECLARE PUBLIC FUNCTIONS

0 commit comments

Comments
 (0)
0