summaryrefslogtreecommitdiff
path: root/fw/esp32/components/eos/cell.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/esp32/components/eos/cell.c')
-rw-r--r--fw/esp32/components/eos/cell.c63
1 files changed, 34 insertions, 29 deletions
diff --git a/fw/esp32/components/eos/cell.c b/fw/esp32/components/eos/cell.c
index 8665616..7dc4a32 100644
--- a/fw/esp32/components/eos/cell.c
+++ b/fw/esp32/components/eos/cell.c
@@ -23,24 +23,29 @@ static unsigned char *cell_bufq_array[CELL_SIZE_QUEUE];
static SemaphoreHandle_t mutex;
static QueueHandle_t cell_queue;
-static void _cell_handler(unsigned char _mtype, unsigned char *buffer, uint16_t buf_len) {
- uint8_t mtype;
+static void _cell_handler(unsigned char _mtype, EOSMessage *msg, uint16_t len) {
+ unsigned char mtype;
+ unsigned char *buffer = msg->buffer;
+ int rv;
+
+ if (len < 1) return;
mtype = buffer[0];
switch (mtype & EOS_CELL_MTYPE_MASK) {
case EOS_CELL_MTYPE_DEV: {
switch (mtype & ~EOS_CELL_MTYPE_MASK) {
case EOS_CELL_MTYPE_STATUS: {
- size_t rv;
+ size_t _rv;
+
+ if (!(eos_msg_flags(msg) & EOS_MSG_FLAG_RPLY_REQ)) break;
+ if (msg->size < 3) break;
- rv = eos_modem_get_status(buffer + 1);
- eos_net_reply(EOS_NET_MTYPE_CELL, buffer, rv + 1);
+ _rv = eos_modem_get_status(buffer + 1);
+ eos_net_reply(EOS_NET_MTYPE_CELL, msg, _rv + 1);
break;
}
case EOS_CELL_MTYPE_RESET: {
- int rv;
-
rv = eos_modem_take(1000);
if (rv) {
ESP_LOGE(TAG, "Reset modem failed: %d", rv);
@@ -52,8 +57,6 @@ static void _cell_handler(unsigned char _mtype, unsigned char *buffer, uint16_t
}
case EOS_CELL_MTYPE_UART_TAKE: {
- int rv;
-
if (eos_modem_get_mode() == EOS_CELL_UART_MODE_ATCMD) {
rv = eos_modem_set_mode(EOS_CELL_UART_MODE_RELAY);
if (rv) ESP_LOGE(TAG, "Set RELAY mode failed: %d", rv);
@@ -62,8 +65,6 @@ static void _cell_handler(unsigned char _mtype, unsigned char *buffer, uint16_t
}
case EOS_CELL_MTYPE_UART_GIVE: {
- int rv;
-
if (eos_modem_get_mode() == EOS_CELL_UART_MODE_RELAY) {
rv = eos_modem_take(1000);
if (!rv) {
@@ -78,7 +79,7 @@ static void _cell_handler(unsigned char _mtype, unsigned char *buffer, uint16_t
case EOS_CELL_MTYPE_UART_DATA: {
if (eos_modem_get_mode() == EOS_CELL_UART_MODE_RELAY) {
- eos_modem_write(buffer + 1, buf_len - 1);
+ eos_modem_write(buffer + 1, len - 1);
}
break;
}
@@ -87,33 +88,35 @@ static void _cell_handler(unsigned char _mtype, unsigned char *buffer, uint16_t
}
case EOS_CELL_MTYPE_VOICE: {
- eos_cell_voice_handler(mtype & ~EOS_CELL_MTYPE_MASK, buffer, buf_len);
+ eos_cell_voice_handler(_mtype, msg, len);
break;
}
case EOS_CELL_MTYPE_SMS: {
- eos_cell_sms_handler(mtype & ~EOS_CELL_MTYPE_MASK, buffer, buf_len);
+ eos_cell_sms_handler(_mtype, msg, len);
break;
}
case EOS_CELL_MTYPE_USSD: {
- eos_cell_ussd_handler(mtype & ~EOS_CELL_MTYPE_MASK, buffer, buf_len);
+ eos_cell_ussd_handler(_mtype, msg, len);
break;
}
case EOS_CELL_MTYPE_PDP: {
- eos_cell_pdp_handler(mtype & ~EOS_CELL_MTYPE_MASK, buffer, buf_len);
+ eos_cell_pdp_handler(_mtype, msg, len);
break;
}
}
}
static void cell_handler_task(void *pvParameters) {
+ EOSMessage msg;
EOSMsgItem mi;
while (1) {
if (xQueueReceive(cell_queue, &mi, portMAX_DELAY)) {
- _cell_handler(mi.type, mi.buffer, mi.len);
+ eos_msg_init(&msg, mi.buffer, mi.size);
+ _cell_handler(mi.type, &msg, mi.len);
xSemaphoreTake(mutex, portMAX_DELAY);
eos_bufq_push(&cell_buf_q, mi.buffer);
xSemaphoreGive(mutex);
@@ -122,30 +125,32 @@ static void cell_handler_task(void *pvParameters) {
vTaskDelete(NULL);
}
-static void cell_handler(unsigned char type, unsigned char *buffer, uint16_t buf_len) {
+static void cell_handler(unsigned char type, EOSMessage *msg, uint16_t len) {
EOSMsgItem mi;
- unsigned char *_buffer;
+ unsigned char *buffer;
- if (buf_len < 1) return;
+ if (len < 1) return;
+ if (len > EOS_CELL_MTU) return;
- if (type & EOS_NET_MTYPE_FLAG_REPL) {
- _cell_handler(type, buffer, buf_len);
+ if (eos_msg_flags(msg) & EOS_MSG_FLAG_RPLY_REQ) {
+ _cell_handler(type, msg, len);
return;
}
xSemaphoreTake(mutex, portMAX_DELAY);
- _buffer = eos_bufq_pop(&cell_buf_q);
+ buffer = eos_bufq_pop(&cell_buf_q);
xSemaphoreGive(mutex);
- if (_buffer == NULL) {
- ESP_LOGE(TAG, "Cell message NOT handled: %2x", buffer[0]);
+ if (buffer == NULL) {
+ ESP_LOGE(TAG, "CELL MESSAGE NOT HANDLED: %2x", msg->buffer[0]);
return;
}
- memcpy(_buffer, buffer, buf_len);
mi.type = type;
- mi.buffer = _buffer;
- mi.len = buf_len;
+ mi.buffer = buffer;
+ mi.size = EOS_CELL_MTU;
+ memcpy(mi.buffer, msg->buffer, len);
+ mi.len = len;
xQueueSend(cell_queue, &mi, portMAX_DELAY);
}
@@ -156,7 +161,7 @@ void eos_cell_init(void) {
for (i=0; i<CELL_SIZE_QUEUE; i++) {
unsigned char *buffer;
- buffer = malloc(EOS_NET_SIZE_BUF);
+ buffer = malloc(EOS_CELL_MTU);
assert(buffer != NULL);
eos_bufq_push(&cell_buf_q, buffer);
}