blob: a0e36e8f210364165df7a8d611f4556e687cb9a1 [file] [log] [blame]
/** @file
* @brief Modem receiver header file.
*
* A modem receiver driver allowing application to handle all
* aspects of received protocol data.
*/
/*
* Copyright (c) 2018 Foundries.io
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_RECEIVER_H_
#define ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_RECEIVER_H_
#include <kernel.h>
#include <sys/ring_buffer.h>
#ifdef __cplusplus
extern "C" {
#endif
struct mdm_receiver_context {
const struct device *uart_dev;
/* rx data */
struct ring_buf rx_rb;
struct k_sem rx_sem;
/* modem data */
char *data_manufacturer;
char *data_model;
char *data_revision;
#if defined(CONFIG_MODEM_SIM_NUMBERS)
char *data_imei;
char *data_imsi;
#endif
char *data_iccid;
int data_rssi;
};
/**
* @brief Gets receiver context by id.
*
* @param id: receiver context id.
*
* @retval Receiver context or NULL.
*/
struct mdm_receiver_context *mdm_receiver_context_from_id(int id);
/**
* @brief Get received data.
*
* @param *ctx: receiver context.
* @param *buf: buffer to copy the received data to.
* @param size: buffer size.
* @param *bytes_read: amount of received bytes
*
* @retval 0 if ok, < 0 if error.
*/
int mdm_receiver_recv(struct mdm_receiver_context *ctx,
uint8_t *buf, size_t size, size_t *bytes_read);
/**
* @brief Sends the data over specified receiver context.
*
* @param *ctx: receiver context.
* @param *buf: buffer with the data to send.
* @param size: the amount of data to send.
*
* @retval 0 if ok, < 0 if error.
*/
int mdm_receiver_send(struct mdm_receiver_context *ctx,
const uint8_t *buf, size_t size);
/**
* @brief Registers receiver context.
*
* @note Acquires receivers device, and prepares the context to be used.
*
* @param *ctx: receiver context to register.
* @param *uart_dev: communication device for the receiver context.
* @param *buf: rx buffer to use for received data.
* @param size: rx buffer size.
*
* @retval 0 if ok, < 0 if error.
*/
int mdm_receiver_register(struct mdm_receiver_context *ctx,
const struct device *uart_dev,
uint8_t *buf, size_t size);
int mdm_receiver_sleep(struct mdm_receiver_context *ctx);
int mdm_receiver_wake(struct mdm_receiver_context *ctx);
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DRIVERS_MODEM_MODEM_RECEIVER_H_ */