libjoybus
Joybus implementation for 32-bit MCUs
Loading...
Searching...
No Matches
esp32.h
1
9
10#pragma once
11
12#include <stdbool.h>
13#include <stdint.h>
14
15#include <esp_intr_alloc.h>
16#include <esp_timer.h>
17#include <driver/gpio.h>
18
19#include <joybus/bus.h>
20
24#define JOYBUS_ESP32(bus) ((struct joybus_esp32 *)(bus))
25
26// Private implementation details - do not access directly
28 // Bus state
29 uint8_t state;
30
31 // GPIO configuration
32 gpio_num_t gpio;
33
34 // RMT channel assignment
35 uint8_t rmt_tx_ch;
36 uint8_t rmt_rx_ch;
37 uint8_t rmt_rx_mem_ch;
38
39 // RMT interrupt
40 intr_handle_t rmt_intr;
41
42 // Pre-encoded TX symbols
43 uint32_t sym_one;
44 uint32_t sym_zero;
45 uint32_t sym_stop;
46
47 // TARGET_REPLY_FLOOR_NS in CPU cycles, resolved once at enable
48 uint32_t reply_floor_cycles;
49
50 // RX/TX state
51 uint8_t *read_buf;
52 uint8_t read_len;
53 uint8_t read_count;
54 uint8_t rx_skip;
55 const uint8_t *write_buf;
56 uint8_t write_len;
57 uint8_t write_count;
58
59 // One-shot timer for inter-transfer gap scheduling
60 esp_timer_handle_t transfer_start_timer;
61
62 // Transfer state
63 joybus_transfer_cb done_callback;
64 void *done_user_data;
65 int64_t last_transfer_us;
66};
67
72 struct joybus base;
73 struct joybus_esp32_data data;
74};
75
81 gpio_num_t gpio;
82
84 uint32_t freq;
85
87 uint8_t rmt_tx_ch;
88
90 uint8_t rmt_rx_ch;
91};
92
100{
101 return (struct joybus_esp32_config){
102 .gpio = gpio,
103 .freq = JOYBUS_FREQ_NOMINAL,
104 .rmt_tx_ch = 0,
105 .rmt_rx_ch = 0,
106 };
107}
108
116int joybus_esp32_init(struct joybus_esp32 *esp32_bus, struct joybus_esp32_config config);
117
static struct joybus_esp32_config joybus_esp32_config_default(gpio_num_t gpio)
Build an ESP32 config with default values.
Definition esp32.h:99
int joybus_esp32_init(struct joybus_esp32 *esp32_bus, struct joybus_esp32_config config)
Initialize an ESP32 Joybus instance.
Definition joybus.c:668
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 an ESP32 Joybus instance.
Definition esp32.h:79
uint8_t rmt_rx_ch
RMT RX channel index (0-based among the chip's RX-capable channels).
Definition esp32.h:90
gpio_num_t gpio
GPIO pin to use for the Joybus data line (single bidirectional open-drain).
Definition esp32.h:81
uint8_t rmt_tx_ch
RMT TX channel index (0-based among the chip's TX-capable channels).
Definition esp32.h:87
uint32_t freq
Transmit frequency, in Hz.
Definition esp32.h:84
Definition esp32.h:27
An ESP32 Joybus instance.
Definition esp32.h:71
A Joybus instance.
Definition bus.h:108