summaryrefslogtreecommitdiff
path: root/fw/esp32/components/eos/cell_ussd.c
blob: 3f5ea3b46f46dfd68d41efe0138071c22b67ac4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdlib.h>
#include <stdio.h>

#include <esp_log.h>

#include "eos.h"
#include "at_cmd.h"
#include "cell.h"

static char cmd[256];

void eos_cell_ussd_handler(unsigned char mtype, unsigned char *buffer, uint16_t size) {
    int cmd_len, rv;

    rv = eos_modem_take(1000);
    if (rv) return;

    buffer += 1;
    size -= 1;
    switch (mtype) {
        case EOS_CELL_MTYPE_USSD_REQUEST:
            if (size == 0) return;

            buffer[size] = '\0';
            cmd_len = snprintf(cmd, sizeof(cmd), "AT+CUSD=1,\"%s\",15\r", buffer);
            if ((cmd_len < 0) || (cmd_len >= sizeof(cmd))) return;
            at_cmd(cmd);
            rv = at_expect("^OK", "^ERROR", 1000);

            break;
    }

    eos_modem_give();
}

void eos_cell_ussd_init(void) {}