mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
Merge pull request #20431 from cogip/native_fixes
cpu/native: add gpio-mock
This commit is contained in:
commit
3e2ab59f4d
@ -96,6 +96,52 @@ typedef enum {
|
||||
} gpio_flank_t;
|
||||
|
||||
/** @} */
|
||||
#elif defined(MODULE_PERIPH_GPIO_MOCK)
|
||||
|
||||
/**
|
||||
* @brief Mocked GPIO
|
||||
*
|
||||
* Mocked GPIO representation for simulation.
|
||||
* @{
|
||||
*/
|
||||
typedef struct {
|
||||
int value; /**< current value */
|
||||
int mode; /**< current mode */
|
||||
int flank; /**< flank to trigger interrupts */
|
||||
void (*cb)(void *arg); /**< ISR */
|
||||
void *arg; /**< ISR arg */
|
||||
} gpio_mock_t;
|
||||
/** @} */
|
||||
|
||||
#define GPIO_UNDEF 0
|
||||
|
||||
#ifndef GPIO_PORT_MAX
|
||||
#define GPIO_PORT_MAX (16)
|
||||
#endif
|
||||
|
||||
#ifndef GPIO_PIN_MAX
|
||||
#define GPIO_PIN_MAX (32)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Mocked GPIO array
|
||||
*/
|
||||
extern gpio_mock_t gpio_mock[GPIO_PORT_MAX][GPIO_PIN_MAX];
|
||||
|
||||
#define HAVE_GPIO_T
|
||||
/**
|
||||
* @brief Pointer on a mocked GPIO
|
||||
*/
|
||||
typedef gpio_mock_t* gpio_t;
|
||||
|
||||
/**
|
||||
* @brief Define a custom GPIO_PIN macro for native mocked GPIO framework.
|
||||
* Get the mocked GPIO object from mocked GPIO array.
|
||||
*/
|
||||
#define GPIO_PIN(port, pin) \
|
||||
(((port >= 0) && (pin >= 0) && (port < GPIO_PORT_MAX) && (pin < GPIO_PIN_MAX)) \
|
||||
? &gpio_mock[port][pin] \
|
||||
: GPIO_UNDEF)
|
||||
|
||||
#endif /* MODULE_PERIPH_GPIO_LINUX | DOXYGEN */
|
||||
|
||||
|
@ -19,59 +19,83 @@
|
||||
|
||||
#include "periph/gpio.h"
|
||||
|
||||
int gpio_init(gpio_t pin, gpio_mode_t mode) {
|
||||
(void) pin;
|
||||
(void) mode;
|
||||
/**
|
||||
* @brief Mocked GPIO array
|
||||
*/
|
||||
gpio_mock_t gpio_mock[GPIO_PORT_MAX][GPIO_PIN_MAX];
|
||||
|
||||
__attribute__((weak)) int gpio_init(gpio_t pin, gpio_mode_t mode) {
|
||||
(void) pin;
|
||||
(void) mode;
|
||||
|
||||
if (pin) {
|
||||
pin->mode = mode;
|
||||
pin->value = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mode >= GPIO_OUT)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
|
||||
__attribute__((weak)) int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
|
||||
gpio_cb_t cb, void *arg)
|
||||
{
|
||||
(void) pin;
|
||||
(void) mode;
|
||||
(void) flank;
|
||||
(void) cb;
|
||||
(void) arg;
|
||||
|
||||
if (pin) {
|
||||
pin->mode = mode;
|
||||
pin->flank = flank;
|
||||
pin->value = 0;
|
||||
pin->cb = cb;
|
||||
pin->arg = arg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_t pin)
|
||||
__attribute__((weak)) void gpio_irq_enable(gpio_t pin)
|
||||
{
|
||||
(void) pin;
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_t pin)
|
||||
__attribute__((weak)) void gpio_irq_disable(gpio_t pin)
|
||||
{
|
||||
(void) pin;
|
||||
}
|
||||
|
||||
int gpio_read(gpio_t pin) {
|
||||
(void) pin;
|
||||
__attribute__((weak)) int gpio_read(gpio_t pin) {
|
||||
if (pin) {
|
||||
return pin->value;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void gpio_set(gpio_t pin) {
|
||||
(void) pin;
|
||||
__attribute__((weak)) void gpio_set(gpio_t pin) {
|
||||
if (pin) {
|
||||
pin->value = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_clear(gpio_t pin) {
|
||||
(void) pin;
|
||||
__attribute__((weak)) void gpio_clear(gpio_t pin) {
|
||||
if (pin) {
|
||||
pin->value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_toggle(gpio_t pin) {
|
||||
(void) pin;
|
||||
__attribute__((weak)) void gpio_toggle(gpio_t pin) {
|
||||
if (pin) {
|
||||
pin->value ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_write(gpio_t pin, int value) {
|
||||
(void) pin;
|
||||
(void) value;
|
||||
__attribute__((weak)) void gpio_write(gpio_t pin, int value) {
|
||||
if (pin) {
|
||||
pin->value = value;
|
||||
}
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
@ -71,9 +71,7 @@ int32_t qdec_init(qdec_t qdec, qdec_mode_t mode, qdec_cb_t cb, void *arg)
|
||||
}
|
||||
|
||||
/* Initialize qdec channels */
|
||||
for (uint8_t i = 0; i < QDEC_NUMOF; i++) {
|
||||
qdecs[qdec] = 0;
|
||||
}
|
||||
qdecs[qdec] = 0;
|
||||
|
||||
/* Reset counter and start qdec */
|
||||
qdec_start(qdec);
|
||||
|
Loading…
Reference in New Issue
Block a user