17#include "sl_sleeptimer.h"
19#include <joybus/bus.h>
24#define JOYBUS_GECKO(bus) ((struct joybus_gecko *)(bus))
27#define CHIPS_PER_BIT 4
30#define EDGES_PER_BYTE 16
38 GPIO_Port_TypeDef gpio_port;
42 TIMER_TypeDef *rx_timer;
43 USART_TypeDef *tx_usart;
52 sl_sleeptimer_timer_handle_t rx_timeout_timer;
59 uint16_t pulse_period_half;
60 uint16_t bus_idle_period;
63 unsigned int rx_dma_channel;
64 uint16_t rx_edge_timings[2][EDGES_PER_BYTE + 2];
65 LDMA_TransferCfg_t rx_config;
66 LDMA_Descriptor_t rx_descriptors[2];
67 uint8_t rx_current_buffer;
70 unsigned int tx_dma_channel;
71 uint8_t tx_encoded_bytes[2][CHIPS_PER_BIT];
72 LDMA_TransferCfg_t tx_config;
73 LDMA_Descriptor_t tx_descriptors[3];
74 uint8_t tx_initial_buffer;
75 uint8_t tx_current_buffer;
76 uint8_t tx_buffered_bytes;
int joybus_gecko_init(struct joybus_gecko *gecko_bus, struct joybus_gecko_config config)
Initialize a Gecko Joybus instance.
Definition joybus.c:695
static struct joybus_gecko_config joybus_gecko_config_default(GPIO_Port_TypeDef port, uint8_t pin)
Build a Gecko config with default values.
Definition gecko.h:117
void(* joybus_transfer_cb)(struct joybus *bus, int status, void *user_data)
Function type for transfer completion callbacks.
Definition bus.h:88
#define JOYBUS_FREQ_NOMINAL
Nominal Joybus frequency, matching an OEM N64/GameCube controller.
Definition bus.h:17
Configuration for a Gecko Joybus instance.
Definition gecko.h:93
uint32_t freq
Transmit frequency, in Hz.
Definition gecko.h:107
uint8_t gpio_pin
GPIO pin to use for the Joybus data line.
Definition gecko.h:98
GPIO_Port_TypeDef gpio_port
GPIO port to use for the Joybus data line.
Definition gecko.h:95
USART_TypeDef * tx_usart
USART peripheral to use for transmitting data.
Definition gecko.h:104
TIMER_TypeDef * rx_timer
TIMER peripheral to use for receiving data.
Definition gecko.h:101
A Gecko Joybus instance.
Definition gecko.h:82
A Joybus instance.
Definition bus.h:108