Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2020 Analog Life LLC |
| 3 | * |
| 4 | * SPDX-License-Identifier: Apache-2.0 |
| 5 | */ |
| 6 | |
| 7 | #ifndef QUECTEL_BG9X_H |
| 8 | #define QUECTEL_BG9X_H |
| 9 | |
Gerard Marull-Paretas | fb60aab | 2022-05-06 10:25:46 +0200 | [diff] [blame] | 10 | #include <zephyr/kernel.h> |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 11 | #include <ctype.h> |
| 12 | #include <errno.h> |
Gerard Marull-Paretas | fb60aab | 2022-05-06 10:25:46 +0200 | [diff] [blame] | 13 | #include <zephyr/drivers/gpio.h> |
| 14 | #include <zephyr/device.h> |
| 15 | #include <zephyr/init.h> |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 16 | |
Gerard Marull-Paretas | fb60aab | 2022-05-06 10:25:46 +0200 | [diff] [blame] | 17 | #include <zephyr/net/net_if.h> |
Georges Oates_Larsen | 3c6b7dc | 2023-01-19 14:17:55 -0800 | [diff] [blame] | 18 | #include <zephyr/net/offloaded_netdev.h> |
Gerard Marull-Paretas | fb60aab | 2022-05-06 10:25:46 +0200 | [diff] [blame] | 19 | #include <zephyr/net/net_offload.h> |
| 20 | #include <zephyr/net/socket_offload.h> |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 21 | |
| 22 | #include "modem_context.h" |
| 23 | #include "modem_socket.h" |
| 24 | #include "modem_cmd_handler.h" |
| 25 | #include "modem_iface_uart.h" |
| 26 | |
Bjarki Arge Andreasen | a4afcf8 | 2022-11-21 07:16:38 +0100 | [diff] [blame] | 27 | #define MDM_UART_NODE DT_INST_BUS(0) |
| 28 | #define MDM_UART_DEV DEVICE_DT_GET(MDM_UART_NODE) |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 29 | #define MDM_CMD_TIMEOUT K_SECONDS(10) |
| 30 | #define MDM_CMD_CONN_TIMEOUT K_SECONDS(120) |
| 31 | #define MDM_REGISTRATION_TIMEOUT K_SECONDS(180) |
| 32 | #define MDM_SENDMSG_SLEEP K_MSEC(1) |
| 33 | #define MDM_MAX_DATA_LENGTH 1024 |
| 34 | #define MDM_RECV_MAX_BUF 30 |
| 35 | #define MDM_RECV_BUF_SIZE 1024 |
| 36 | #define MDM_MAX_SOCKETS 5 |
| 37 | #define MDM_BASE_SOCKET_NUM 0 |
| 38 | #define MDM_NETWORK_RETRY_COUNT 10 |
| 39 | #define MDM_INIT_RETRY_COUNT 10 |
Thomas LE ROUX | f360718 | 2021-01-14 17:52:46 +0100 | [diff] [blame] | 40 | #define MDM_PDP_ACT_RETRY_COUNT 3 |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 41 | #define MDM_WAIT_FOR_RSSI_COUNT 10 |
| 42 | #define MDM_WAIT_FOR_RSSI_DELAY K_SECONDS(2) |
| 43 | #define BUF_ALLOC_TIMEOUT K_SECONDS(1) |
Yong Cong Sin | 084a8b6 | 2021-04-13 19:21:06 +0800 | [diff] [blame] | 44 | #define MDM_MAX_BOOT_TIME K_SECONDS(50) |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 45 | |
| 46 | /* Default lengths of certain things. */ |
| 47 | #define MDM_MANUFACTURER_LENGTH 10 |
| 48 | #define MDM_MODEL_LENGTH 16 |
| 49 | #define MDM_REVISION_LENGTH 64 |
| 50 | #define MDM_IMEI_LENGTH 16 |
| 51 | #define MDM_IMSI_LENGTH 16 |
| 52 | #define MDM_ICCID_LENGTH 32 |
| 53 | #define MDM_APN_LENGTH 32 |
| 54 | #define RSSI_TIMEOUT_SECS 30 |
| 55 | |
Andrei Hutanu | 3cf92bc | 2023-04-22 11:24:01 +0200 | [diff] [blame] | 56 | #define MDM_UNSOL_RDY CONFIG_MODEM_QUECTEL_BG9X_UNSOL_RDY |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 57 | #define MDM_APN CONFIG_MODEM_QUECTEL_BG9X_APN |
| 58 | #define MDM_USERNAME CONFIG_MODEM_QUECTEL_BG9X_USERNAME |
| 59 | #define MDM_PASSWORD CONFIG_MODEM_QUECTEL_BG9X_PASSWORD |
| 60 | |
| 61 | /* Modem ATOI routine. */ |
| 62 | #define ATOI(s_, value_, desc_) modem_atoi(s_, value_, desc_, __func__) |
| 63 | |
| 64 | /* pin settings */ |
| 65 | enum mdm_control_pins { |
| 66 | MDM_POWER = 0, |
| 67 | MDM_RESET, |
| 68 | #if DT_INST_NODE_HAS_PROP(0, mdm_dtr_gpios) |
| 69 | MDM_DTR, |
| 70 | #endif |
Guillaume Paquet | 143a776 | 2021-01-14 14:45:08 +0100 | [diff] [blame] | 71 | #if DT_INST_NODE_HAS_PROP(0, mdm_wdisable_gpios) |
| 72 | MDM_WDISABLE, |
| 73 | #endif |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 74 | }; |
| 75 | |
| 76 | /* driver data */ |
| 77 | struct modem_data { |
| 78 | struct net_if *net_iface; |
| 79 | uint8_t mac_addr[6]; |
| 80 | |
| 81 | /* modem interface */ |
| 82 | struct modem_iface_uart_data iface_data; |
| 83 | uint8_t iface_rb_buf[MDM_MAX_DATA_LENGTH]; |
| 84 | |
| 85 | /* modem cmds */ |
| 86 | struct modem_cmd_handler_data cmd_handler_data; |
| 87 | uint8_t cmd_match_buf[MDM_RECV_BUF_SIZE + 1]; |
| 88 | |
| 89 | /* socket data */ |
| 90 | struct modem_socket_config socket_config; |
| 91 | struct modem_socket sockets[MDM_MAX_SOCKETS]; |
| 92 | |
| 93 | /* RSSI work */ |
Peter Bigot | cc09072 | 2021-03-31 10:31:30 -0500 | [diff] [blame] | 94 | struct k_work_delayable rssi_query_work; |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 95 | |
| 96 | /* modem data */ |
| 97 | char mdm_manufacturer[MDM_MANUFACTURER_LENGTH]; |
| 98 | char mdm_model[MDM_MODEL_LENGTH]; |
| 99 | char mdm_revision[MDM_REVISION_LENGTH]; |
| 100 | char mdm_imei[MDM_IMEI_LENGTH]; |
| 101 | #if defined(CONFIG_MODEM_SIM_NUMBERS) |
| 102 | char mdm_imsi[MDM_IMSI_LENGTH]; |
| 103 | char mdm_iccid[MDM_ICCID_LENGTH]; |
| 104 | #endif /* #if defined(CONFIG_MODEM_SIM_NUMBERS) */ |
Bartosz Bilas | ee7cd10 | 2021-11-04 20:56:13 +0100 | [diff] [blame] | 105 | int mdm_rssi; |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 106 | |
| 107 | /* bytes written to socket in last transaction */ |
| 108 | int sock_written; |
| 109 | |
| 110 | /* Socket from which we are currently reading data. */ |
| 111 | int sock_fd; |
| 112 | |
| 113 | /* Semaphore(s) */ |
| 114 | struct k_sem sem_response; |
| 115 | struct k_sem sem_tx_ready; |
| 116 | struct k_sem sem_sock_conn; |
Andrei Hutanu | 27ad711 | 2023-04-22 11:27:45 +0200 | [diff] [blame] | 117 | #if !DT_INST_NODE_HAS_PROP(0, mdm_reset_gpios) |
| 118 | struct k_sem sem_pin_busy; |
| 119 | #endif |
Bilal Wasim | 503a70a | 2020-11-23 19:54:31 +0500 | [diff] [blame] | 120 | }; |
| 121 | |
| 122 | /* Socket read callback data */ |
| 123 | struct socket_read_data { |
| 124 | char *recv_buf; |
| 125 | size_t recv_buf_len; |
| 126 | struct sockaddr *recv_addr; |
| 127 | uint16_t recv_read_len; |
| 128 | }; |
| 129 | |
Anas Nashif | 5fa1207 | 2021-03-31 14:39:38 -0400 | [diff] [blame] | 130 | #endif /* QUECTEL_BG9X_H */ |