1 /** @file 2 * @brief Modem context header file. 3 * 4 * A modem context driver allowing application to handle all 5 * aspects of received protocol data. 6 */ 7 8 /* 9 * Copyright (c) 2019 Foundries.io 10 * 11 * SPDX-License-Identifier: Apache-2.0 12 */ 13 14 #ifndef ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ 15 #define ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ 16 17 #include <zephyr/kernel.h> 18 #include <zephyr/net/buf.h> 19 #include <zephyr/net/net_ip.h> 20 #include <zephyr/sys/ring_buffer.h> 21 #include <zephyr/drivers/gpio.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 struct modem_iface { 28 const struct device *dev; 29 30 int (*read)(struct modem_iface *iface, uint8_t *buf, size_t size, 31 size_t *bytes_read); 32 int (*write)(struct modem_iface *iface, const uint8_t *buf, size_t size); 33 34 /* implementation data */ 35 void *iface_data; 36 }; 37 38 struct modem_cmd_handler { 39 void (*process)(struct modem_cmd_handler *cmd_handler, 40 struct modem_iface *iface); 41 42 /* implementation data */ 43 void *cmd_handler_data; 44 }; 45 46 struct modem_context { 47 /* modem data */ 48 char *data_manufacturer; 49 char *data_model; 50 char *data_revision; 51 char *data_imei; 52 #if defined(CONFIG_MODEM_SIM_NUMBERS) 53 char *data_imsi; 54 char *data_iccid; 55 #endif 56 #if defined(CONFIG_MODEM_CELL_INFO) 57 int data_operator; 58 int data_lac; 59 int data_cellid; 60 int data_act; 61 #endif 62 int *data_rssi; 63 bool is_automatic_oper; 64 65 /* interface config */ 66 struct modem_iface iface; 67 68 /* command handler config */ 69 struct modem_cmd_handler cmd_handler; 70 71 /* driver data */ 72 void *driver_data; 73 }; 74 75 /** 76 * @brief IP address to string 77 * 78 * @param addr: sockaddr to be converted 79 * @param buf: Buffer to store IP in string form 80 * @param buf_size: buffer size 81 * 82 * @retval 0 if ok, < 0 if error. 83 */ 84 int modem_context_sprint_ip_addr(const struct sockaddr *addr, char *buf, size_t buf_size); 85 86 /** 87 * @brief Get port from IP address 88 * 89 * @param addr: sockaddr 90 * @param port: store port 91 * 92 * @retval 0 if ok, < 0 if error. 93 */ 94 int modem_context_get_addr_port(const struct sockaddr *addr, uint16_t *port); 95 96 /** 97 * @brief Gets modem context by id. 98 * 99 * @param id: modem context id. 100 * 101 * @retval modem context or NULL. 102 */ 103 struct modem_context *modem_context_from_id(int id); 104 105 /** 106 * @brief Finds modem context which owns the iface device. 107 * 108 * @param dev: device used by the modem iface. 109 * 110 * @retval Modem context or NULL. 111 */ 112 struct modem_context *modem_context_from_iface_dev(const struct device *dev); 113 114 /** 115 * @brief Registers modem context. 116 * 117 * @note Prepares modem context to be used. 118 * 119 * @param ctx: modem context to register. 120 * 121 * @retval 0 if ok, < 0 if error. 122 */ 123 int modem_context_register(struct modem_context *ctx); 124 125 #ifdef __cplusplus 126 } 127 #endif 128 129 #endif /* ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ */ 130