1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/include/ir_nec.h
2022-05-31 17:58:39 +02:00

89 lines
2.1 KiB
C

/*
* Copyright (C) 2022 Dario Petrillo
*
* 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.
*/
/**
* @defgroup drivers_ir_nec IR NEC Remote receiver
* @ingroup drivers_misc
* @brief Receives commands from NEC IR remotes
*
* @{
*
* @file
*
* @author Dario Petrillo <dario.pk1@gmail.com>
*/
#ifndef IR_NEC_H
#define IR_NEC_H
#include <stdint.h>
#include "isrpipe.h"
#include "periph/gpio.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief NEC command structure
*/
typedef struct {
uint8_t addr; /**< Address (usually 0, depends on the remote) */
uint8_t cmd; /**< Command */
} ir_nec_cmd_t;
/**
* @brief Device initialization parameters
*/
typedef struct {
gpio_t pin; /**< Input pin */
} ir_nec_params_t;
/**
* @brief Device descriptor for the driver
*/
typedef struct {
gpio_t pin; /**< Input pin */
isrpipe_t isrpipe; /**< Internal pipe for commands */
uint32_t last_rising; /**< Timestamp of the last rising edge */
uint32_t data; /**< Data packet being received */
uint8_t read_bits; /**< Number of bits read so far. 0xff if not currently reading */
uint8_t isrpipe_buf[2 * sizeof(ir_nec_cmd_t)]; /**< Buffer for the isrpipe */
} ir_nec_t;
/**
* @brief Initialize the given device
*
* @param[inout] dev Device descriptor of the driver
* @param[in] params Initialization parameters
*
* @return 0 on success
*/
int ir_nec_init(ir_nec_t *dev, const ir_nec_params_t *params);
/**
* @brief Read a command packet. Blocks until one is received
*
* @param[inout] dev Device descriptor of the driver
* @param[out] command Structure to write the result into
*
* @retval 0 Success
* @retval -1 Isrpipe returned too few bytes. Should never happen
*/
int ir_nec_read(ir_nec_t *dev, ir_nec_cmd_t *command);
#ifdef __cplusplus
}
#endif
#endif /* IR_NEC_H */
/** @} */