libjoybus
Joybus implementation for 32-bit MCUs
Loading...
Searching...
No Matches
rp2xxx.h
1
9
10#pragma once
11
12#include <hardware/pio.h>
13#include <pico/time.h>
14
15#include <joybus/bus.h>
16
20#define JOYBUS_RP2XXX(bus) ((struct joybus_rp2xxx *)(bus))
21
22// Private implementation details - do not access directly
24 // Bus state
25 uint8_t state;
26
27 // GPIO configuration
28 uint gpio;
29
30 // PIO instance and state machine
31 PIO pio;
32 uint pio_sm;
33 bool pio_configured;
34
35 // DMA configuration
36 uint dma_chan_tx;
37 uint dma_chan_rx;
38
39 // RX/TX state
40 uint8_t *read_buf;
41 uint8_t read_len;
42 uint8_t read_count;
43 uint8_t *write_buf;
44 uint8_t write_len;
45 alarm_id_t rx_timeout_alarm;
46
47 // Transfer state
48 joybus_transfer_cb done_callback;
49 void *done_user_data;
50 absolute_time_t last_transfer_time;
51 alarm_id_t transfer_start_alarm;
52};
53
58 struct joybus base;
59 struct joybus_rp2xxx_data data;
60};
61
67 uint8_t gpio;
68
70 PIO pio;
71
73 uint32_t freq;
74};
75
83{
84 return (struct joybus_rp2xxx_config){
85 .gpio = gpio,
86 .pio = pio0,
87 .freq = JOYBUS_FREQ_NOMINAL,
88 };
89}
90
98int joybus_rp2xxx_init(struct joybus_rp2xxx *rp2xxx_bus, struct joybus_rp2xxx_config config);
99
int joybus_rp2xxx_init(struct joybus_rp2xxx *rp2xxx_bus, struct joybus_rp2xxx_config config)
Initialize a RP2xxx Joybus instance.
Definition joybus.c:399
static struct joybus_rp2xxx_config joybus_rp2xxx_config_default(uint8_t gpio)
Build a RP2xxx config with default values.
Definition rp2xxx.h:82
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 RP2xxx Joybus instance.
Definition rp2xxx.h:65
uint8_t gpio
GPIO pin to use for the Joybus data line.
Definition rp2xxx.h:67
uint32_t freq
Transmit frequency, in Hz.
Definition rp2xxx.h:73
PIO pio
PIO instance to use (eg. pio0 or pio1)
Definition rp2xxx.h:70
Definition rp2xxx.h:23
A RP2xxx Joybus instance.
Definition rp2xxx.h:57
A Joybus instance.
Definition bus.h:108