Update split serial code to use driver pattern (#7990)
[jackhill/qmk/firmware.git] / drivers / avr / serial.h
CommitLineData
28929ad0 1#pragma once
0fab3bbd 2
0fab3bbd
TC
3#include <stdbool.h>
4
155e9310
TI
5// /////////////////////////////////////////////////////////////////
6// Need Soft Serial defines in config.h
7// /////////////////////////////////////////////////////////////////
8// ex.
155e9310 9// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
72d4e4bf
TI
10// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
11// // 1: about 137kbps (default)
12// // 2: about 75kbps
13// // 3: about 39kbps
14// // 4: about 26kbps
15// // 5: about 20kbps
155e9310 16//
72d4e4bf
TI
17// //// USE simple API (using signle-type transaction function)
18// /* nothing */
19// //// USE flexible API (using multi-type transaction function)
20// #define SERIAL_USE_MULTI_TRANSACTION
21//
22// /////////////////////////////////////////////////////////////////
a012113d 23
72d4e4bf 24// Soft Serial Transaction Descriptor
b624f32f 25typedef struct _SSTD_t {
72d4e4bf 26 uint8_t *status;
b624f32f 27 uint8_t initiator2target_buffer_size;
72d4e4bf 28 uint8_t *initiator2target_buffer;
b624f32f 29 uint8_t target2initiator_buffer_size;
72d4e4bf
TI
30 uint8_t *target2initiator_buffer;
31} SSTD_t;
b624f32f 32#define TID_LIMIT(table) (sizeof(table) / sizeof(SSTD_t))
0fab3bbd 33
72d4e4bf
TI
34// initiator is transaction start side
35void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
36// target is interrupt accept side
37void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
0fab3bbd 38
72d4e4bf
TI
39// initiator resullt
40#define TRANSACTION_END 0
41#define TRANSACTION_NO_RESPONSE 0x1
b624f32f 42#define TRANSACTION_DATA_ERROR 0x2
43#define TRANSACTION_TYPE_ERROR 0x4
72d4e4bf 44#ifndef SERIAL_USE_MULTI_TRANSACTION
b624f32f 45int soft_serial_transaction(void);
72d4e4bf 46#else
b624f32f 47int soft_serial_transaction(int sstd_index);
0fab3bbd 48#endif
72d4e4bf
TI
49
50// target status
51// *SSTD_t.status has
52// initiator:
53// TRANSACTION_END
54// or TRANSACTION_NO_RESPONSE
55// or TRANSACTION_DATA_ERROR
56// target:
57// TRANSACTION_DATA_ERROR
58// or TRANSACTION_ACCEPTED
59#define TRANSACTION_ACCEPTED 0x8
60#ifdef SERIAL_USE_MULTI_TRANSACTION
b624f32f 61int soft_serial_get_and_clean_status(int sstd_index);
72d4e4bf 62#endif