Azuma_wifi_switch/main/modem.h

182 lines
4.9 KiB
C

/*
* bg96.h
*
* Created on: Jan 11, 2023
* Author: Sword
*/
#ifndef MAIN_MODEM_H_
#define MAIN_MODEM_H_
#include <stdint.h>
#include <stdbool.h>
#include "sdkconfig.h"
#define MODEM_STATUS_OK 0
#define MODEM_STATUS_ERROR -1
#define MODEM_STATUS_TIMEOUT -2
#define MODEM_STATUS_MQTT_PUB_OVERFLOW -10
#define MODEM_STATUS_HTTP_POST_WAITRES -11
#define MCU_OTA_FILE_LOCAL "OTA.bin"
typedef struct
{
/* Fields read from AT+QCSQ command */
int16_t rssi;
int16_t rsrp;
int16_t sinr;
int16_t rsrq;
} modem_signal_strength_t;
/* Modem's unique identifier IMEI string, null terminated.
* Maximum size of buffer returned via modem_get_imei().
*/
#define MODEM_IMEI_LEN 16
/* Modem's firmware version string, null terminated.
* This can include format where modem+application versions are reported.
* Maximum size of buffer returned via modem_get_fw_ver().
*/
#define MODEM_FWVER_LEN 32
///////////////////////////////////////////////////////////////
// BG96 module process interface
typedef void (*modem_start_cb_t)(int status);
/* Operation complete indication callback */
typedef void (*modem_op_cb_t)(int status);
/* Connect to network service provider
* once the modem is ready.
*
* Non-blocking.
*
* Returns OK if command sequence started.
* Callback is invoked when completed.
*/
int modem_network_connect(modem_op_cb_t cb);
/*==== HTTP API ==== */
/* Setup the HTTP context */
int modem_http_setup(modem_op_cb_t cb);
/* Make an HTTP GET request and frame result in internal buffer */
int modem_http_get_to_buf(modem_op_cb_t cb, const char* url);
/* Call to get access to framed buffer. */
int modem_http_get_buf(char** bufptr, int* len);
/* Make an HTTP GET request and store result to file on modem file system.
* Use modem_read_from_file to get contents.
*/
int modem_http_post_message(modem_op_cb_t cb, const char *url, const char *message);
int modem_http_get_to_file(modem_op_cb_t cb, const char* url, const char* file);
/* Read data from a file on the modem file system.
* Calls user callback Open if the file is found and successfully opened.
* Calls user callback Data to transfer data in chunks.
*
* The file is streamed in chunks via the user Data callback, in the context of
* the bg96 process. It will request from the modem a chunk of data, yield, when
* response is received it invokes Data immediately. When user is finished with the data
* the bg96 process repeats the command/response cycle with the modem. Other processes will
* get to run at least once in between the command/response.
*/
typedef int(*modem_read_from_file_open)(uint32_t fileSize);
typedef int(*modem_read_from_file_data)(const char* buf, int buf_len);
/* Return OK if operation started, ERROR otherwise. */
int modem_read_from_file(
modem_op_cb_t cb, /* callback on overall API success of failure */
const char* file, /* file name string */
modem_read_from_file_open cbOpen, /* callback when file is opened successfully on modem */
modem_read_from_file_data cbData); /* callback for each chunk of streamed data of 1024 bytes or less. */
/*==== MQTT API ==== */
/* Connect to an MQTT server at given port.
* server may be IP address or domain.
* Client ID for MQTT CONNECT
*/
int modem_mqtt_connect(modem_op_cb_t cb, const char* host, int port, const char* clientID);//, const char* jwt);
/* Publish data to the specific topic */
int modem_mqtt_publish(modem_op_cb_t cb, const char* topic, const char* data, int len);
/* Close MQTT session */
int modem_mqtt_close(modem_op_cb_t cb);
/*==== Update API ==== */
/* Update the modem from BGXX firmware image available
* at specified URL.
* Must be connected to a network.
*/
int modem_update_modem(modem_op_cb_t cb, const char* url);
/*====================*/
/* Initialize process. */
int modem_init(void);
/* Start process. */
int modem_start(modem_start_cb_t cb);
/* Stop process. */
int modem_stop(void);
/* Poll process. */
int modem_poll(void);
/*declaration signal strength function*/
int modem_Rssi(void);
/* Check if the process needs to be polled. */
bool modem_needs_poll(void);
/* Check if the process is started */
bool modem_is_started(void);
/* Check if the process is ready */
bool modem_is_ready(void);
/**/
char* modem_get_rxbuf(void);
/* Get modem IMEI.
* String is valid only after modem has been started and is ready.
*/
const char* modem_get_imei(void);
/* Get modem ICCID.
* String is valid only after modem has been started and is ready.
*/
const char* modem_get_iccid(void);
/* Get modem version.
* String is valid only after modem has been started and is ready.
*/
const char* modem_get_fw_ver(void);
/* Get the signal strength data - only valid if connected */
const modem_signal_strength_t* modem_get_signal_strength(void);
/* Get Serving cell data*/
const char* modem_get_serving_cell(void);
/* Get neighbour cell list*/
const char* modem_get_neighbour_cell(void);
#endif /* MAIN_MODEM_H_ */