Browse Source
Split the SDL GPIO emulator driver in a top and bottom to enable using it with embedded libCs. Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>pull/60131/head
4 changed files with 97 additions and 21 deletions
@ -0,0 +1,33 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022, Basalte bv |
||||||
|
* Copyright (c) 2023 Nordic Semiconductor |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: Apache-2.0 |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <SDL.h> |
||||||
|
#include "gpio_emul_sdl_bottom.h" |
||||||
|
|
||||||
|
static int sdl_filter_bottom(void *arg, SDL_Event *event) |
||||||
|
{ |
||||||
|
struct gpio_sdl_data *data = arg; |
||||||
|
|
||||||
|
/* Only handle keyboard events */ |
||||||
|
switch (event->type) { |
||||||
|
case SDL_KEYDOWN: |
||||||
|
case SDL_KEYUP: |
||||||
|
break; |
||||||
|
default: |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
data->event_scan_code = event->key.keysym.scancode; |
||||||
|
data->key_down = event->type == SDL_KEYDOWN; |
||||||
|
|
||||||
|
return data->callback(arg); |
||||||
|
} |
||||||
|
|
||||||
|
void gpio_sdl_init_bottom(struct gpio_sdl_data *data) |
||||||
|
{ |
||||||
|
SDL_AddEventWatch(sdl_filter_bottom, (void *)data); |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022, Basalte bv |
||||||
|
* Copyright (c) 2023 Nordic Semiconductor |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: Apache-2.0 |
||||||
|
* |
||||||
|
* "Bottom" of the SDL GPIO emulator. |
||||||
|
* When built with the native_simulator this will be built in the runner context, |
||||||
|
* that is, with the host C library, and with the host include paths. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef DRIVERS_GPIO_GPIO_EMUL_SDL_BOTTOM_H |
||||||
|
#define DRIVERS_GPIO_GPIO_EMUL_SDL_BOTTOM_H |
||||||
|
|
||||||
|
#include <stdbool.h> |
||||||
|
#include <stdint.h> |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
/* Note: None of these are public interfaces. But internal to the SDL GPIO emulator */ |
||||||
|
|
||||||
|
#define GPIOEMULSDL_SCANCODE_UNKNOWN 0 |
||||||
|
|
||||||
|
struct gpio_sdl_data { |
||||||
|
void *dev; |
||||||
|
int (*callback)(struct gpio_sdl_data *data); |
||||||
|
int event_scan_code; |
||||||
|
bool key_down; |
||||||
|
}; |
||||||
|
|
||||||
|
void gpio_sdl_init_bottom(struct gpio_sdl_data *data); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* DRIVERS_GPIO_GPIO_EMUL_SDL_BOTTOM_H */ |
Loading…
Reference in new issue