| /** @file |
| * @brief Modem context header file. |
| * |
| * A modem context driver allowing application to handle all |
| * aspects of received protocol data. |
| */ |
| |
| /* |
| * Copyright (c) 2019 Foundries.io |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ |
| #define ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ |
| |
| #include <kernel.h> |
| #include <net/buf.h> |
| #include <net/net_ip.h> |
| #include <sys/ring_buffer.h> |
| #include <drivers/gpio.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define MODEM_PIN(name_, pin_, flags_) { \ |
| .dev_name = name_, \ |
| .pin = pin_, \ |
| .init_flags = flags_ \ |
| } |
| |
| struct modem_iface { |
| const struct device *dev; |
| |
| int (*read)(struct modem_iface *iface, uint8_t *buf, size_t size, |
| size_t *bytes_read); |
| int (*write)(struct modem_iface *iface, const uint8_t *buf, size_t size); |
| |
| /* implementation data */ |
| void *iface_data; |
| }; |
| |
| struct modem_cmd_handler { |
| void (*process)(struct modem_cmd_handler *cmd_handler, |
| struct modem_iface *iface); |
| |
| /* implementation data */ |
| void *cmd_handler_data; |
| }; |
| |
| struct modem_pin { |
| const struct device *gpio_port_dev; |
| char *dev_name; |
| gpio_pin_t pin; |
| gpio_flags_t init_flags; |
| }; |
| |
| struct modem_context { |
| /* modem data */ |
| char *data_manufacturer; |
| char *data_model; |
| char *data_revision; |
| char *data_imei; |
| #if defined(CONFIG_MODEM_SIM_NUMBERS) |
| char *data_imsi; |
| char *data_iccid; |
| #endif |
| #if defined(CONFIG_MODEM_CELL_INFO) |
| int data_operator; |
| int data_lac; |
| int data_cellid; |
| #endif |
| int *data_rssi; |
| bool is_automatic_oper; |
| /* pin config */ |
| struct modem_pin *pins; |
| size_t pins_len; |
| |
| /* interface config */ |
| struct modem_iface iface; |
| |
| /* command handler config */ |
| struct modem_cmd_handler cmd_handler; |
| |
| /* driver data */ |
| void *driver_data; |
| }; |
| |
| /** |
| * @brief IP address to string |
| * |
| * @param addr: sockaddr to be converted |
| * @param buf: Buffer to store IP in string form |
| * @param buf_size: buffer size |
| * |
| * @retval 0 if ok, < 0 if error. |
| */ |
| int modem_context_sprint_ip_addr(const struct sockaddr *addr, char *buf, size_t buf_size); |
| |
| /** |
| * @brief Get port from IP address |
| * |
| * @param addr: sockaddr |
| * @param port: store port |
| * |
| * @retval 0 if ok, < 0 if error. |
| */ |
| int modem_context_get_addr_port(const struct sockaddr *addr, uint16_t *port); |
| |
| /** |
| * @brief Gets modem context by id. |
| * |
| * @param id: modem context id. |
| * |
| * @retval modem context or NULL. |
| */ |
| struct modem_context *modem_context_from_id(int id); |
| |
| /** |
| * @brief Finds modem context which owns the iface device. |
| * |
| * @param *dev: device used by the modem iface. |
| * |
| * @retval Modem context or NULL. |
| */ |
| struct modem_context *modem_context_from_iface_dev(const struct device *dev); |
| |
| /** |
| * @brief Registers modem context. |
| * |
| * @note Prepares modem context to be used. |
| * |
| * @param *ctx: modem context to register. |
| * |
| * @retval 0 if ok, < 0 if error. |
| */ |
| int modem_context_register(struct modem_context *ctx); |
| |
| /* pin config functions */ |
| int modem_pin_read(struct modem_context *ctx, uint32_t pin); |
| int modem_pin_write(struct modem_context *ctx, uint32_t pin, uint32_t value); |
| int modem_pin_config(struct modem_context *ctx, uint32_t pin, bool enable); |
| int modem_pin_init(struct modem_context *ctx); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_CONTEXT_H_ */ |