aboutsummaryrefslogtreecommitdiff
path: root/keyboards/fortitude60/serial.h
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/fortitude60/serial.h')
-rw-r--r--keyboards/fortitude60/serial.h86
1 files changed, 67 insertions, 19 deletions
diff --git a/keyboards/fortitude60/serial.h b/keyboards/fortitude60/serial.h
index 361f1881b..d00898055 100644
--- a/keyboards/fortitude60/serial.h
+++ b/keyboards/fortitude60/serial.h
@@ -1,32 +1,80 @@
1#ifndef MY_SERIAL_H 1#ifndef SOFT_SERIAL_H
2#define MY_SERIAL_H 2#define SOFT_SERIAL_H
3 3
4#include "config.h"
5#include <stdbool.h> 4#include <stdbool.h>
6 5
7/* TODO: some defines for interrupt setup */ 6// /////////////////////////////////////////////////////////////////
8#define SERIAL_PIN_DDR DDRD 7// Need Soft Serial defines in serial_config.h
9#define SERIAL_PIN_PORT PORTD 8// /////////////////////////////////////////////////////////////////
10#define SERIAL_PIN_INPUT PIND 9// ex.
10// #define SERIAL_PIN_DDR DDRD
11// #define SERIAL_PIN_PORT PORTD
12// #define SERIAL_PIN_INPUT PIND
13// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
14// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
15//
16// //// USE Simple API (OLD API, compatible with let's split serial.c)
17// ex.
18// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
19// #define SERIAL_MASTER_BUFFER_LENGTH 1
20//
21// //// USE flexible API (using multi-type transaction function)
22// #define SERIAL_USE_MULTI_TRANSACTION
23//
24// /////////////////////////////////////////////////////////////////
11 25
12#ifndef USE_SERIAL_PD2
13#define SERIAL_PIN_MASK _BV(PD0)
14#define SERIAL_PIN_INTERRUPT INT0_vect
15#else
16#define SERIAL_PIN_MASK _BV(PD2)
17#define SERIAL_PIN_INTERRUPT INT2_vect
18#endif
19
20#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
21#define SERIAL_MASTER_BUFFER_LENGTH 1
22 26
23// Buffers for master - slave communication 27#ifndef SERIAL_USE_MULTI_TRANSACTION
28/* --- USE Simple API (OLD API, compatible with let's split serial.c) */
29#if SERIAL_SLAVE_BUFFER_LENGTH > 0
24extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; 30extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
31#endif
32#if SERIAL_MASTER_BUFFER_LENGTH > 0
25extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; 33extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
34#endif
26 35
27void serial_master_init(void); 36void serial_master_init(void);
28void serial_slave_init(void); 37void serial_slave_init(void);
29int serial_update_buffers(void); 38int serial_update_buffers(void);
30bool serial_slave_data_corrupt(void);
31 39
40#endif // USE Simple API
41
42// Soft Serial Transaction Descriptor
43typedef struct _SSTD_t {
44 uint8_t *status;
45 uint8_t initiator2target_buffer_size;
46 uint8_t *initiator2target_buffer;
47 uint8_t target2initiator_buffer_size;
48 uint8_t *target2initiator_buffer;
49} SSTD_t;
50
51// initiator is transaction start side
52void soft_serial_initiator_init(SSTD_t *sstd_table);
53// target is interrupt accept side
54void soft_serial_target_init(SSTD_t *sstd_table);
55
56// initiator resullt
57#define TRANSACTION_END 0
58#define TRANSACTION_NO_RESPONSE 0x1
59#define TRANSACTION_DATA_ERROR 0x2
60#ifndef SERIAL_USE_MULTI_TRANSACTION
61int soft_serial_transaction(void);
62#else
63int soft_serial_transaction(int sstd_index);
32#endif 64#endif
65
66// target status
67// *SSTD_t.status has
68// initiator:
69// TRANSACTION_END
70// or TRANSACTION_NO_RESPONSE
71// or TRANSACTION_DATA_ERROR
72// target:
73// TRANSACTION_DATA_ERROR
74// or TRANSACTION_ACCEPTED
75#define TRANSACTION_ACCEPTED 0x4
76#ifdef SERIAL_USE_MULTI_TRANSACTION
77int soft_serial_get_and_clean_status(int sstd_index);
78#endif
79
80#endif /* SOFT_SERIAL_H */ \ No newline at end of file