blob: 0f5eaecee5d40522b1aa4dc75fe62f7cfe51e33a [file] [log] [blame]
/*
* Copyright (c) 2019 Intel Corporation.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_FAKE_DRIVER_H
#define ZEPHYR_FAKE_DRIVER_H
#include <zephyr/device.h>
#define SAMPLE_DRIVER_NAME_0 "SAMPLE_DRIVER_0"
#define SAMPLE_DRIVER_MSG_SIZE 128
typedef void (*sample_driver_callback_t)(const struct device *dev,
void *context, void *data);
typedef int (*sample_driver_write_t)(const struct device *dev, void *buf);
typedef int (*sample_driver_set_callback_t)(const struct device *dev,
sample_driver_callback_t cb,
void *context);
typedef int (*sample_driver_state_set_t)(const struct device *dev,
bool active);
__subsystem struct sample_driver_api {
sample_driver_write_t write;
sample_driver_set_callback_t set_callback;
sample_driver_state_set_t state_set;
};
/*
* Write some processed data to the sample driver
*
* Having done some processing on data received in the sample driver callback,
* write this processed data back to the driver.
*
* @param dev Sample driver device
* @param buf Processed data, of size SAMPLE_DRIVER_MSG_SIZE
* @return 0 Success, nonzero if an error occurred
*/
__syscall int sample_driver_write(const struct device *dev, void *buf);
static inline int z_impl_sample_driver_write(const struct device *dev,
void *buf)
{
const struct sample_driver_api *api = dev->api;
return api->write(dev, buf);
}
/*
* Set whether the sample driver will respond to interrupts
*
* @param dev Sample driver device
* @param active Whether to activate/deactivate interrupts
*/
__syscall int sample_driver_state_set(const struct device *dev, bool active);
static inline int z_impl_sample_driver_state_set(const struct device *dev,
bool active)
{
const struct sample_driver_api *api = dev->api;
return api->state_set(dev, active);
}
/*
* Register a callback function for the sample driver
*
* This callback runs in interrupt context. The provided data
* blob will be of size SAMPLE_DRIVER_MSG_SIZE.
*
* @param dev Sample driver device to install callback
* @param cb Callback function pointer
* @param context Context passed to callback function, or NULL if not needed
* @return 0 Success, nonzero if an error occurred
*/
static inline int sample_driver_set_callback(const struct device *dev,
sample_driver_callback_t cb,
void *context)
{
const struct sample_driver_api *api = dev->api;
return api->set_callback(dev, cb, context);
}
#include <syscalls/sample_driver.h>
#endif