Zephyr API Documentation 4.2.0-rc3
A Scalable Open Source RTOS
 4.2.0-rc3
psi5.h
Go to the documentation of this file.
1/*
2 * Copyright 2025 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
11
12#ifndef ZEPHYR_INCLUDE_DRIVERS_PSI5_H_
13#define ZEPHYR_INCLUDE_DRIVERS_PSI5_H_
14
15#include <zephyr/kernel.h>
16#include <zephyr/device.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
30
42
72
82typedef void (*psi5_tx_callback_t)(const struct device *dev, uint8_t channel, int status,
83 void *user_data);
84
93typedef void (*psi5_rx_frame_callback_t)(const struct device *dev, uint8_t channel,
94 uint32_t num_frame, void *user_data);
95
97
102typedef int (*psi5_start_sync_t)(const struct device *dev, uint8_t channel);
103
108typedef int (*psi5_stop_sync_t)(const struct device *dev, uint8_t channel);
109
114typedef int (*psi5_send_t)(const struct device *dev, uint8_t channel, const uint64_t data,
115 k_timeout_t timeout, psi5_tx_callback_t callback, void *user_data);
116
120struct psi5_rx_callback_config {
124 struct psi5_frame *frame;
126 uint32_t max_num_frame;
128 void *user_data;
129};
130
134struct psi5_rx_callback_configs {
136 struct psi5_rx_callback_config *serial_frame;
138 struct psi5_rx_callback_config *data_frame;
139};
140
145typedef int (*psi5_register_callback_t)(const struct device *dev, uint8_t channel,
146 struct psi5_rx_callback_configs callback_configs);
147
148__subsystem struct psi5_driver_api {
149 psi5_start_sync_t start_sync;
150 psi5_stop_sync_t stop_sync;
151 psi5_send_t send;
152 psi5_register_callback_t register_callback;
153};
154
156
167__syscall int psi5_start_sync(const struct device *dev, uint8_t channel);
168
169static inline int z_impl_psi5_start_sync(const struct device *dev, uint8_t channel)
170{
171 const struct psi5_driver_api *api = (const struct psi5_driver_api *)dev->api;
172
173 if (api->start_sync) {
174 return api->start_sync(dev, channel);
175 }
176
177 return -ENOSYS;
178}
179
190__syscall int psi5_stop_sync(const struct device *dev, uint8_t channel);
191
192static inline int z_impl_psi5_stop_sync(const struct device *dev, uint8_t channel)
193{
194 const struct psi5_driver_api *api = (const struct psi5_driver_api *)dev->api;
195
196 if (api->stop_sync) {
197 return api->stop_sync(dev, channel);
198 }
199
200 return -ENOSYS;
201}
202
225__syscall int psi5_send(const struct device *dev, uint8_t channel, const uint64_t data,
226 k_timeout_t timeout, psi5_tx_callback_t callback, void *user_data);
227
228static inline int z_impl_psi5_send(const struct device *dev, uint8_t channel, const uint64_t data,
229 k_timeout_t timeout, psi5_tx_callback_t callback,
230 void *user_data)
231{
232 const struct psi5_driver_api *api = (const struct psi5_driver_api *)dev->api;
233
234 if (api->send) {
235 return api->send(dev, channel, data, timeout, callback, user_data);
236 }
237
238 return -ENOSYS;
239}
240
253__syscall int psi5_register_callback(const struct device *dev, uint8_t channel,
254 struct psi5_rx_callback_configs callback_configs);
255
256static inline int z_impl_psi5_register_callback(const struct device *dev, uint8_t channel,
257 struct psi5_rx_callback_configs callback_configs)
258{
259 const struct psi5_driver_api *api = (const struct psi5_driver_api *)dev->api;
260
261 if (api->register_callback) {
262 return api->register_callback(dev, channel, callback_configs);
263 }
264
265 return -ENOSYS;
266}
267
268#ifdef __cplusplus
269}
270#endif
271
275
276#include <zephyr/syscalls/psi5.h>
277
278#endif /* ZEPHYR_INCLUDE_DRIVERS_PSI5_H_ */
int psi5_register_callback(const struct device *dev, uint8_t channel, struct psi5_rx_callback_configs callback_configs)
Add a callback function to handle messages received for a specific channel.
int psi5_send(const struct device *dev, uint8_t channel, const uint64_t data, k_timeout_t timeout, psi5_tx_callback_t callback, void *user_data)
Transmitting PSI5 data on a specific channel.
psi5_frame_type
PSI5 frame type.
Definition psi5.h:34
void(* psi5_rx_frame_callback_t)(const struct device *dev, uint8_t channel, uint32_t num_frame, void *user_data)
Defines the application callback handler function signature for receiving frame.
Definition psi5.h:93
void(* psi5_tx_callback_t)(const struct device *dev, uint8_t channel, int status, void *user_data)
Defines the application callback handler function signature for sending.
Definition psi5.h:82
int psi5_start_sync(const struct device *dev, uint8_t channel)
Start the sync pulse generator on a specific channel.
int psi5_stop_sync(const struct device *dev, uint8_t channel)
Stop the sync pulse generator on a specific channel.
@ PSI5_SERIAL_FRAME_4_BIT_ID
Serial message frame with 4-bit message ID.
Definition psi5.h:36
@ PSI5_DATA_FRAME
Data frame.
Definition psi5.h:40
@ PSI5_SERIAL_FRAME_8_BIT_ID
Serial message frame with 8-bit message ID.
Definition psi5.h:38
#define ENOSYS
Function not implemented.
Definition errno.h:82
Public kernel APIs.
ssize_t send(int sock, const void *buf, size_t len, int flags)
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:510
void * data
Address of the device instance private data.
Definition device.h:520
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
Kernel timeout type.
Definition clock.h:65
PSI5 frame structure.
Definition psi5.h:46
struct psi5_frame::@147241062307066365063355040330314077045061376046::@244231317137073265156064012154356353030045277135 serial
Serial message.
uint32_t data
Message data.
Definition psi5.h:52
uint32_t timestamp
Timestamp of when the frame was captured.
Definition psi5.h:66
enum psi5_frame_type type
Type of PSI5 frame.
Definition psi5.h:48
uint8_t crc
CRC checksum for message integrity validation.
Definition psi5.h:68
uint8_t id
Serial message ID.
Definition psi5.h:59
uint8_t slot_number
Slot Number.
Definition psi5.h:70