Infuse-IoT SDK API 0.0.1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
u_blox_spi.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Embeint Holdings Pty Ltd
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <zephyr/kernel.h>
8#include <zephyr/device.h>
9#include <zephyr/drivers/i2c.h>
10#include <zephyr/drivers/gpio.h>
11#include <zephyr/sys/ring_buffer.h>
12
13#include <zephyr/modem/pipe.h>
14
15#ifndef INFUSE_MODEM_BACKEND_U_BLOX_SPI_
16#define INFUSE_MODEM_BACKEND_U_BLOX_SPI_
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
23 /* Pointer to SPI configuration */
24 const struct spi_dt_spec *spi;
25 /* Pointer to data ready pin configuration */
26 const struct gpio_dt_spec *data_ready;
27 /* Communication pipe */
28 struct modem_pipe pipe;
29 /* Ring buffer for holding pipe data stream */
30 struct ring_buf pipe_ring_buf;
31 /* Worker that reads the FIFO */
32 struct k_work_delayable fifo_read;
33 /* Signal to notify when FIFO read completes */
34 struct k_poll_signal read_result;
35 /* Callback for data ready GPIO */
36 struct gpio_callback data_ready_cb;
37 /* Bus contention semaphore */
38 struct k_sem bus_sem;
39 /* Duration between polls */
40 k_timeout_t poll_period;
41 /* Number of bytes pending on FIFO */
42 uint16_t bytes_pending;
43 /* Internal state flags */
44 uint8_t flags;
45 /* Backing memory for pipe data stream */
46 uint8_t pipe_memory[CONFIG_GNSS_U_BLOX_PIPE_SIZE];
47 /* Temporary RX buffer */
48 uint8_t spi_rx[70];
49};
50
52 /* Bus to use */
53 const struct spi_dt_spec *spi;
54 /* GPIO that will transition to active when data is ready after @ref
55 * modem_backend_ublox_spi_use_data_ready_gpio
56 */
57 const struct gpio_dt_spec *data_ready;
58 /* Period to poll for data before @ref modem_backend_ublox_spi_use_data_ready_gpio */
59 k_timeout_t poll_period;
60};
61
70struct modem_pipe *
72 const struct modem_backend_ublox_spi_config *config);
73
80
81#ifdef __cplusplus
82}
83#endif
84
85#endif /* INFUSE_MODEM_BACKEND_U_BLOX_SPI_ */
Definition u_blox_spi.h:51
const struct spi_dt_spec * spi
Definition u_blox_spi.h:53
k_timeout_t poll_period
Definition u_blox_spi.h:59
const struct gpio_dt_spec * data_ready
Definition u_blox_spi.h:57
Definition u_blox_spi.h:22
k_timeout_t poll_period
Definition u_blox_spi.h:40
uint8_t flags
Definition u_blox_spi.h:44
struct k_sem bus_sem
Definition u_blox_spi.h:38
struct k_work_delayable fifo_read
Definition u_blox_spi.h:32
const struct gpio_dt_spec * data_ready
Definition u_blox_spi.h:26
struct k_poll_signal read_result
Definition u_blox_spi.h:34
const struct spi_dt_spec * spi
Definition u_blox_spi.h:24
uint8_t pipe_memory[CONFIG_GNSS_U_BLOX_PIPE_SIZE]
Definition u_blox_spi.h:46
struct modem_pipe pipe
Definition u_blox_spi.h:28
struct ring_buf pipe_ring_buf
Definition u_blox_spi.h:30
uint8_t spi_rx[70]
Definition u_blox_spi.h:48
uint16_t bytes_pending
Definition u_blox_spi.h:42
struct gpio_callback data_ready_cb
Definition u_blox_spi.h:36
struct modem_pipe * modem_backend_ublox_spi_init(struct modem_backend_ublox_spi *backend, const struct modem_backend_ublox_spi_config *config)
Initialize modem backend.
void modem_backend_ublox_spi_use_data_ready_gpio(struct modem_backend_ublox_spi *backend)
Transition from polling to interrupt driven mode.