Files
cardputerfw/main/drivers/sim800.h
2026-05-18 22:59:45 +02:00

115 lines
1.8 KiB
C

#pragma once
#include "driver/uart.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "pins.h"
#include "servergprs.h"
typedef struct {
SemaphoreHandle_t done;
char response[256];
bool success;
} sim800_cmd_t;
typedef enum {
MODEM_STATE_OFF = 0,
MODEM_STATE_INIT,
MODEM_STATE_READY,
MODEM_STATE_REGISTERING,
MODEM_STATE_REGISTERED,
MODEM_STATE_SMS_READY,
MODEM_STATE_CALL_ACTIVE,
MODEM_STATE_GPRS_CONNECTING,
MODEM_STATE_GPRS_UP,
MODEM_STATE_TCP_CONNECTING,
MODEM_STATE_TCP_CONNECTED,
MODEM_STATE_ERROR
} modem_state_t;
typedef struct {
modem_state_t state;
bool in_call;
bool gprs_active;
bool need_gprs_restart;
int signal;
int network_registered;
int last_rssi;
int last_ber;
bool tcp_connected;
char tcp_host[64];
int tcp_port;
SemaphoreHandle_t state_mutex;
} modem_t;
typedef enum {
EV_NONE = 0,
EV_MODEM_OK,
EV_MODEM_ERROR,
EV_NETWORK_REG_OK,
EV_NETWORK_LOST,
EV_INCOMING_CALL,
EV_CALL_ENDED,
EV_SMS_RECEIVED,
EV_GPRS_UP,
EV_GPRS_DOWN
} modem_event_t;
void print_state();
void sim800_uart_init(void);
void modem_update_flags(void);
void modem_set_state(modem_state_t new_state);
void modem_handle_event(modem_event_t ev);
bool modem_start_gprs(void);
void sim800_csq_task(void *arg);
void sim800_task(void *arg);
void sim800_handle_line(char *line);
void sim800_parse(char *data);
void sim800_send(const char *cmd);
bool sim800_command(const char *cmd, uint32_t timeout_ms);
void init_modem(void *arg);
bool sim800_send_sms(const char *number, const char *msg);
bool sim800_call(const char *number);
bool sim800_hangup(void);
bool sim800_answer(void);
bool sim800_tcp_connect(const char *host, int port);
bool sim800_tcp_send(const void *data, int len);
bool sim800_tcp_close(void);