/* * Copyright (C) 2021 metraTec GmbH * * SPDX-License-Identifier: Apache-2.0 */ #ifndef SIMCOM_SIM7080_H #define SIMCOM_SIM7080_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include "modem_context.h" #include "modem_cmd_handler.h" #include "modem_iface_uart.h" #include "modem_socket.h" #define MDM_UART_NODE DT_INST_BUS(0) #define MDM_UART_DEV DEVICE_DT_GET(MDM_UART_NODE) #define MDM_MAX_DATA_LENGTH 1024 #define MDM_RECV_BUF_SIZE 1024 #define MDM_MAX_SOCKETS 5 #define MDM_BASE_SOCKET_NUM 0 #define MDM_RECV_MAX_BUF 30 #define BUF_ALLOC_TIMEOUT K_SECONDS(1) #define MDM_CMD_TIMEOUT K_SECONDS(10) #define MDM_REGISTRATION_TIMEOUT K_SECONDS(180) #define MDM_CONNECT_TIMEOUT K_SECONDS(90) #define MDM_PDP_TIMEOUT K_SECONDS(120) #define MDM_DNS_TIMEOUT K_SECONDS(210) #define MDM_WAIT_FOR_RSSI_DELAY K_SECONDS(2) #define MDM_WAIT_FOR_RSSI_COUNT 30 #define MDM_MAX_AUTOBAUD 5 #define MDM_MAX_CEREG_WAITS 40 #define MDM_MAX_CGATT_WAITS 40 #define MDM_BOOT_TRIES 4 #define MDM_GNSS_PARSER_MAX_LEN 128 #define MDM_APN CONFIG_MODEM_SIMCOM_SIM7080_APN #define MDM_LTE_BANDS CONFIG_MODEM_SIMCOM_SIM7080_LTE_BANDS #define RSSI_TIMEOUT_SECS 30 /* * Default length of modem data. */ #define MDM_MANUFACTURER_LENGTH 12 #define MDM_MODEL_LENGTH 16 #define MDM_REVISION_LENGTH 64 #define MDM_IMEI_LENGTH 16 #define MDM_IMSI_LENGTH 16 #define MDM_ICCID_LENGTH 32 enum sim7080_state { SIM7080_STATE_INIT = 0, SIM7080_STATE_NETWORKING, SIM7080_STATE_GNSS, SIM7080_STATE_OFF, }; /* Possible states of the ftp connection. */ enum sim7080_ftp_connection_state { /* Not connected yet. */ SIM7080_FTP_CONNECTION_STATE_INITIAL = 0, /* Connected and still data available. */ SIM7080_FTP_CONNECTION_STATE_CONNECTED, /* All data transferred. */ SIM7080_FTP_CONNECTION_STATE_FINISHED, /* Something went wrong. */ SIM7080_FTP_CONNECTION_STATE_ERROR, }; /* * Driver data. */ struct sim7080_data { /* * Network interface of the sim module. */ struct net_if *netif; uint8_t mac_addr[6]; /* * Uart interface of the modem. */ struct modem_iface_uart_data iface_data; uint8_t iface_rb_buf[MDM_MAX_DATA_LENGTH]; /* * Modem command handler. */ struct modem_cmd_handler_data cmd_handler_data; uint8_t cmd_match_buf[MDM_RECV_BUF_SIZE + 1]; /* * Modem socket data. */ struct modem_socket_config socket_config; struct modem_socket sockets[MDM_MAX_SOCKETS]; /* * Current state of the modem. */ enum sim7080_state state; /* * RSSI work */ struct k_work_delayable rssi_query_work; /* * Information over the modem. */ char mdm_manufacturer[MDM_MANUFACTURER_LENGTH]; char mdm_model[MDM_MODEL_LENGTH]; char mdm_revision[MDM_REVISION_LENGTH]; char mdm_imei[MDM_IMEI_LENGTH]; #if defined(CONFIG_MODEM_SIM_NUMBERS) char mdm_imsi[MDM_IMSI_LENGTH]; char mdm_iccid[MDM_ICCID_LENGTH]; #endif /* #if defined(CONFIG_MODEM_SIM_NUMBERS) */ int mdm_rssi; /* * Current operating socket and statistics. */ int current_sock_fd; int current_sock_written; /* * Network registration of the modem. */ uint8_t mdm_registration; /* * Whether gprs is attached or detached. */ uint8_t mdm_cgatt; /* * If the sim card is ready or not. */ bool cpin_ready; /* * Flag if the PDP context is active. */ bool pdp_active; /* SMS buffer structure provided by read. */ struct sim7080_sms_buffer *sms_buffer; /* Position in the sms buffer. */ uint8_t sms_buffer_pos; /* Ftp related variables. */ struct { /* User buffer for ftp data. */ char *read_buffer; /* Length of the read buffer/number of bytes read. */ size_t nread; /* State of the ftp connection. */ enum sim7080_ftp_connection_state state; } ftp; /* * Semaphore(s). */ struct k_sem sem_response; struct k_sem sem_tx_ready; struct k_sem sem_dns; struct k_sem sem_ftp; }; /* * Socket read callback data. */ struct socket_read_data { char *recv_buf; size_t recv_buf_len; struct sockaddr *recv_addr; uint16_t recv_read_len; }; #endif /* SIMCOM_SIM7080_H */