libjoybus
Joybus implementation for 32-bit MCUs
Loading...
Searching...
No Matches
gecko.h
1
30
31#pragma once
32
33#include "em_gpio.h"
34#include "em_ldma.h"
35#include "em_timer.h"
36#include "em_usart.h"
37
38#include "sl_sleeptimer.h"
39
40#include <joybus/bus.h>
41
45#define JOYBUS_GECKO(bus) ((struct joybus_gecko *)(bus))
46
47// Number of chips per bit for the line coding
48#define CHIPS_PER_BIT 4
49
50// Edges per byte for pulse timing decoding
51#define EDGES_PER_BYTE 16
52
53// Private implementation details - do not access directly
55 // Bus state
56 uint8_t state;
57
58 // Bus frequencies
59 uint32_t host_freq;
60 uint32_t target_freq;
61
62 // GPIO configuration
63 GPIO_Port_TypeDef gpio_port;
64 uint8_t gpio_pin;
65
66 // Peripherals
67 TIMER_TypeDef *rx_timer;
68 USART_TypeDef *tx_usart;
69
70 // RX/TX state
71 uint8_t *read_buf;
72 uint8_t read_len;
73 uint8_t read_count;
74 uint8_t *write_buf;
75 uint8_t write_len;
76 bool rx_trailing_bit;
77 sl_sleeptimer_timer_handle_t rx_timeout_timer;
78
79 // Transfer state
80 joybus_transfer_cb_t done_callback;
81 void *done_user_data;
82
83 // RX timings
84 uint16_t host_pulse_period_half;
85 uint16_t target_pulse_period_half;
86 uint16_t bus_idle_period;
87
88 // RX ping-pong LDMA configuration
89 unsigned int rx_dma_channel;
90 uint16_t rx_edge_timings[2][EDGES_PER_BYTE + 2];
91 LDMA_TransferCfg_t rx_config;
92 LDMA_Descriptor_t rx_descriptors[2];
93 uint8_t rx_current_buffer;
94
95 // TX ping-pong LDMA configuration
96 unsigned int tx_dma_channel;
97 uint8_t tx_encoded_bytes[2][CHIPS_PER_BIT];
98 LDMA_TransferCfg_t tx_config;
99 LDMA_Descriptor_t tx_descriptors[3];
100 uint8_t tx_initial_buffer;
101 uint8_t tx_current_buffer;
102 uint8_t tx_buffered_bytes;
103};
104
109 struct joybus base;
110 struct joybus_gecko_data data;
111};
112
126int joybus_gecko_init(struct joybus_gecko *gecko_bus, GPIO_Port_TypeDef port, uint8_t pin, TIMER_TypeDef *rx_timer,
127 USART_TypeDef *tx_usart);
128
int joybus_gecko_init(struct joybus_gecko *gecko_bus, GPIO_Port_TypeDef port, uint8_t pin, TIMER_TypeDef *rx_timer, USART_TypeDef *tx_usart)
Initialize a Gecko Joybus instance.
Definition joybus.c:790
void(* joybus_transfer_cb_t)(struct joybus *bus, int result, void *user_data)
Function type for transfer completion callbacks.
Definition bus.h:44
Definition gecko.h:54
A Gecko Joybus instance.
Definition gecko.h:108
A Joybus instance.
Definition bus.h:59