libjoybus
Joybus implementation for 32-bit MCUs
Loading...
Searching...
No Matches
gecko.h
1
9
10#pragma once
11
12#include "em_gpio.h"
13#include "em_ldma.h"
14#include "em_timer.h"
15#include "em_usart.h"
16
17#include "sl_sleeptimer.h"
18
19#include <joybus/bus.h>
20
24#define JOYBUS_GECKO(bus) ((struct joybus_gecko *)(bus))
25
26// Number of chips per bit for the line coding
27#define CHIPS_PER_BIT 4
28
29// Edges per byte for pulse timing decoding
30#define EDGES_PER_BYTE 16
31
32// Private implementation details - do not access directly
34 // Bus state
35 uint8_t state;
36
37 // Bus frequencies
38 uint32_t host_freq;
39 uint32_t target_freq;
40
41 // GPIO configuration
42 GPIO_Port_TypeDef gpio_port;
43 uint8_t gpio_pin;
44
45 // Peripherals
46 TIMER_TypeDef *rx_timer;
47 USART_TypeDef *tx_usart;
48
49 // RX/TX state
50 uint8_t *read_buf;
51 uint8_t read_len;
52 uint8_t read_count;
53 uint8_t *write_buf;
54 uint8_t write_len;
55 bool rx_trailing_bit;
56 sl_sleeptimer_timer_handle_t rx_timeout_timer;
57
58 // Transfer state
59 joybus_transfer_cb done_callback;
60 void *done_user_data;
61
62 // RX timings
63 uint16_t host_pulse_period_half;
64 uint16_t target_pulse_period_half;
65 uint16_t bus_idle_period;
66
67 // RX ping-pong LDMA configuration
68 unsigned int rx_dma_channel;
69 uint16_t rx_edge_timings[2][EDGES_PER_BYTE + 2];
70 LDMA_TransferCfg_t rx_config;
71 LDMA_Descriptor_t rx_descriptors[2];
72 uint8_t rx_current_buffer;
73
74 // TX ping-pong LDMA configuration
75 unsigned int tx_dma_channel;
76 uint8_t tx_encoded_bytes[2][CHIPS_PER_BIT];
77 LDMA_TransferCfg_t tx_config;
78 LDMA_Descriptor_t tx_descriptors[3];
79 uint8_t tx_initial_buffer;
80 uint8_t tx_current_buffer;
81 uint8_t tx_buffered_bytes;
82};
83
88 struct joybus base;
89 struct joybus_gecko_data data;
90};
91
105int joybus_gecko_init(struct joybus_gecko *gecko_bus, GPIO_Port_TypeDef port, uint8_t pin, TIMER_TypeDef *rx_timer,
106 USART_TypeDef *tx_usart);
107
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:766
void(* joybus_transfer_cb)(struct joybus *bus, int status, void *user_data)
Function type for transfer completion callbacks.
Definition bus.h:74
Definition gecko.h:33
A Gecko Joybus instance.
Definition gecko.h:87
A Joybus instance.
Definition bus.h:96