1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/native/include/async_read.h

106 lines
2.6 KiB
C

/*
* Copyright (C) 2015 Takuo Yonezawa <Yonezawa-T2@mail.dnp.co.jp>
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for
* more details.
*/
/**
* @ingroup cpu_native
* @{
*
* @file
* @brief Multiple asynchronous read on file descriptors
*
* @author Takuo Yonezawa <Yonezawa-T2@mail.dnp.co.jp>
*/
#ifndef ASYNC_READ_H
#define ASYNC_READ_H
#include <stdlib.h>
#include <poll.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Maximum number of file descriptors
*/
#ifndef ASYNC_READ_NUMOF
#define ASYNC_READ_NUMOF 2
#endif
/**
* @brief asynchronous read callback type
*/
typedef void (*native_async_read_callback_t)(int fd, void *arg);
/**
* @brief Interrupt callback information structure
*/
typedef struct {
pid_t child_pid; /**< PID of the interrupt listener */
native_async_read_callback_t cb; /**< Interrupt callback function */
void *arg; /**< Argument ptr for the callback */
struct pollfd *fd; /**< sysfs gpio fd */
} async_read_t;
/**
* @brief initialize asynchronous read system
*
* This registers SIGIO signal handler.
*/
void native_async_read_setup(void);
/**
* @brief shutdown asynchronous read system
*
* This deregisters SIGIO signal handler.
*/
void native_async_read_cleanup(void);
/**
* @brief resume monitoring of file descriptors
*
* Call this function after reading file descriptors.
*
* @param[in] fd The file descriptor to monitor
*/
void native_async_read_continue(int fd);
/**
* @brief start monitoring of file descriptor
*
* @param[in] fd The file descriptor to monitor
* @param[in] arg Pointer to be passed as arguments to the callback
* @param[in] handler The callback function to be called when the file
* descriptor is ready to read.
*/
void native_async_read_add_handler(int fd, void *arg, native_async_read_callback_t handler);
/**
* @brief stop monitoring of file descriptor
*
* @param[in] fd The file descriptor to stop monitoring
*/
void native_async_read_remove_handler(int fd);
/**
* @brief start monitoring of file descriptor as interrupt
*
* @param[in] fd The file descriptor to monitor
* @param[in] arg Pointer to be passed as arguments to the callback
* @param[in] handler The callback function to be called when the file
* descriptor is ready to read.
*/
void native_async_read_add_int_handler(int fd, void *arg, native_async_read_callback_t handler);
#ifdef __cplusplus
}
#endif
#endif /* ASYNC_READ_H */
/** @} */