aboutsummaryrefslogtreecommitdiff
path: root/protocol/ps2.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocol/ps2.h')
-rw-r--r--protocol/ps2.h65
1 files changed, 7 insertions, 58 deletions
diff --git a/protocol/ps2.h b/protocol/ps2.h
index 483eea720..acde679cf 100644
--- a/protocol/ps2.h
+++ b/protocol/ps2.h
@@ -39,8 +39,9 @@ POSSIBILITY OF SUCH DAMAGE.
39#define PS2_H 39#define PS2_H
40 40
41#include <stdbool.h> 41#include <stdbool.h>
42#include <util/delay.h> 42#include "wait.h"
43#include <avr/io.h> 43#include "ps2_io.h"
44#include "print.h"
44 45
45/* 46/*
46 * Primitive PS/2 Library for AVR 47 * Primitive PS/2 Library for AVR
@@ -92,79 +93,27 @@ uint8_t ps2_host_recv(void);
92void ps2_host_set_led(uint8_t usb_led); 93void ps2_host_set_led(uint8_t usb_led);
93 94
94 95
95/* Check port settings for clock and data line */
96#if !(defined(PS2_CLOCK_PORT) && \
97 defined(PS2_CLOCK_PIN) && \
98 defined(PS2_CLOCK_DDR) && \
99 defined(PS2_CLOCK_BIT))
100# error "PS/2 clock port setting is required in config.h"
101#endif
102
103#if !(defined(PS2_DATA_PORT) && \
104 defined(PS2_DATA_PIN) && \
105 defined(PS2_DATA_DDR) && \
106 defined(PS2_DATA_BIT))
107# error "PS/2 data port setting is required in config.h"
108#endif
109
110/*-------------------------------------------------------------------- 96/*--------------------------------------------------------------------
111 * static functions 97 * static functions
112 *------------------------------------------------------------------*/ 98 *------------------------------------------------------------------*/
113static inline void clock_lo(void)
114{
115 PS2_CLOCK_PORT &= ~(1<<PS2_CLOCK_BIT);
116 PS2_CLOCK_DDR |= (1<<PS2_CLOCK_BIT);
117}
118static inline void clock_hi(void)
119{
120 /* input with pull up */
121 PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);
122 PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT);
123}
124static inline bool clock_in(void)
125{
126 PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);
127 PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT);
128 _delay_us(1);
129 return PS2_CLOCK_PIN&(1<<PS2_CLOCK_BIT);
130}
131static inline void data_lo(void)
132{
133 PS2_DATA_PORT &= ~(1<<PS2_DATA_BIT);
134 PS2_DATA_DDR |= (1<<PS2_DATA_BIT);
135}
136static inline void data_hi(void)
137{
138 /* input with pull up */
139 PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);
140 PS2_DATA_PORT |= (1<<PS2_DATA_BIT);
141}
142static inline bool data_in(void)
143{
144 PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);
145 PS2_DATA_PORT |= (1<<PS2_DATA_BIT);
146 _delay_us(1);
147 return PS2_DATA_PIN&(1<<PS2_DATA_BIT);
148}
149
150static inline uint16_t wait_clock_lo(uint16_t us) 99static inline uint16_t wait_clock_lo(uint16_t us)
151{ 100{
152 while (clock_in() && us) { asm(""); _delay_us(1); us--; } 101 while (clock_in() && us) { asm(""); wait_us(1); us--; }
153 return us; 102 return us;
154} 103}
155static inline uint16_t wait_clock_hi(uint16_t us) 104static inline uint16_t wait_clock_hi(uint16_t us)
156{ 105{
157 while (!clock_in() && us) { asm(""); _delay_us(1); us--; } 106 while (!clock_in() && us) { asm(""); wait_us(1); us--; }
158 return us; 107 return us;
159} 108}
160static inline uint16_t wait_data_lo(uint16_t us) 109static inline uint16_t wait_data_lo(uint16_t us)
161{ 110{
162 while (data_in() && us) { asm(""); _delay_us(1); us--; } 111 while (data_in() && us) { asm(""); wait_us(1); us--; }
163 return us; 112 return us;
164} 113}
165static inline uint16_t wait_data_hi(uint16_t us) 114static inline uint16_t wait_data_hi(uint16_t us)
166{ 115{
167 while (!data_in() && us) { asm(""); _delay_us(1); us--; } 116 while (!data_in() && us) { asm(""); wait_us(1); us--; }
168 return us; 117 return us;
169} 118}
170 119