Serial Wombat Arduino Library
SerialWombatPS2Keyboard.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4 Copyright 2023 Broadwell Consulting Inc.
5 
6 "Serial Wombat" is a registered trademark of Broadwell Consulting Inc. in
7 the United States. See SerialWombat.com for usage guidance.
8 
9 Permission is hereby granted, free of charge, to any person obtaining a
10  * copy of this software and associated documentation files (the "Software"),
11  * to deal in the Software without restriction, including without limitation
12  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  * and/or sell copies of the Software, and to permit persons to whom the
14  * Software is furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17  * all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25  * OTHER DEALINGS IN THE SOFTWARE.
26 */
27 
28 #include <stdint.h>
29 #include "Stream.h"
30 #include "SerialWombat.h"
35 typedef enum
36 {
38  SCANCODE_1 = 0x16,
39  SCANCODE_2 = 0x1E,
40  SCANCODE_3 = 0x26,
41  SCANCODE_4 = 0x25,
42  SCANCODE_5 = 0x2E,
43  SCANCODE_6 = 0x36,
44  SCANCODE_7 = 0x3D,
45  SCANCODE_8 = 0x3E,
46  SCANCODE_9 = 0x46,
47  SCANCODE_0 = 0x45,
48  SCANCODE_DASH = 0x4E,
51  SCANCODE_TAB = 0x0D,
52  SCANCODE_Q = 0x15,
53  SCANCODE_W = 0x1D,
54  SCANCODE_E = 0x24,
55  SCANCODE_R = 0x2D,
56  SCANCODE_T = 0x2C,
57  SCANCODE_Y = 0x35,
58  SCANCODE_U = 0x3C,
59  SCANCODE_I = 0x43,
60  SCANCODE_O = 0x44,
61  SCANCODE_P = 0x4D,
65  SCANCODE_A = 0x1C,
66  SCANCODE_S = 0x1B,
67  SCANCODE_D = 0x23,
68  SCANCODE_G = 0x34,
69  SCANCODE_H = 0x33,
70  SCANCODE_J = 0x3B,
71  SCANCODE_K = 0x42,
72  SCANCODE_L = 0x4B,
77  SCANCODE_Z = 0x1A,
78  SCANCODE_X = 0x22,
79  SCANCODE_C = 0x21,
80  SCANCODE_V = 0x2A,
81  SCANCODE_B = 0x32,
82  SCANCODE_N = 0x31,
83  SCANCODE_M = 0x3A,
96  SCANCODE_HOME = 0xEC,
97  SCANCODE_END = 0xE9,
104  SCANCODE_KP7 = 0x6C,
105  SCANCODE_KP4 = 0x6B,
106  SCANCODE_KP1 = 0x69,
108  SCANCODE_KP8 = 0x75,
109  SCANCODE_KP5 = 0x73,
110  SCANCODE_KP2 = 0x72,
111  SCANCODE_KP0 = 0x70,
113  SCANCODE_KP9 = 0x7D,
114  SCANCODE_KP6 = 0x74,
115  SCANCODE_KP3 = 0x7A,
120  SCANCODE_ESC = 0x76,
121  SCANCODE_F1 = 0x05,
122  SCANCODE_F2 = 0x06,
123  SCANCODE_F3 = 0x04,
124  SCANCODE_F4 = 0x0C,
125  SCANCODE_F5 = 0x03,
126  SCANCODE_F6 = 0x0B,
127  SCANCODE_F7 = 0x83,
128  SCANCODE_F8 = 0x0A,
129  SCANCODE_F9 = 0x01,
130  SCANCODE_F10 = 0x09,
131  SCANCODE_F11 = 0x78,
132  SCANCODE_F12 = 0x07,
137 
138 
182  public Stream, public SerialWombatPin
183 {
184 public:
195  int16_t begin(uint8_t clockPin, uint8_t dataPin, uint8_t bufferMode = 0, uint8_t queueMode = 0, uint16_t queueAddress = 0xFFFF, uint8_t pullUpDown = 0);
196 
197 
198 
201  int available();
204  int read();
206  void flush();
209  int peek();
215  size_t write(uint8_t data);
216 
223  size_t write(const uint8_t* buffer, size_t size);
224 
227  int availableForWrite();
228 
237  size_t readBytes(char* buffer, size_t length);
238 
239  int16_t readCurrentScanCodes(uint8_t* buffer, uint8_t startValue);
240 
242  void setTimeout(long timeout_mS);
243 
245  uint8_t scanCodeToAscii(uint8_t scanCode, bool shiftActive = false);
246 
250  bool isKeyPressed(uint8_t scanCode);
251 
252  bool isKeyPressed(PS2KeyboardScanCode scanCode);
253 
254  uint8_t _pin = 255;
255 protected:
256  uint32_t timeout = 1;
257 };
258 
259 
260 
261 
SerialWombatPS2Keyboard::flush
void flush()
Discard all bytes from the SerialWombatPS2Keyboard queue.
Definition: SerialWombatPS2Keyboard.cpp:71
SCANCODE_KPMINUS
@ SCANCODE_KPMINUS
Definition: SerialWombatPS2Keyboard.h:117
SerialWombatPS2Keyboard::availableForWrite
int availableForWrite()
Number of bytes avaialble to write to SerialWombatPS2Keyboard queue. Returns 0.
Definition: SerialWombatPS2Keyboard.cpp:102
SCANCODE_KP9
@ SCANCODE_KP9
Definition: SerialWombatPS2Keyboard.h:113
SCANCODE_KPPLUS
@ SCANCODE_KPPLUS
Definition: SerialWombatPS2Keyboard.h:118
SCANCODE_K
@ SCANCODE_K
Definition: SerialWombatPS2Keyboard.h:71
SCANCODE_KPPERIOD
@ SCANCODE_KPPERIOD
Definition: SerialWombatPS2Keyboard.h:116
SCANCODE_DELETE
@ SCANCODE_DELETE
Definition: SerialWombatPS2Keyboard.h:94
SCANCODE_3
@ SCANCODE_3
Definition: SerialWombatPS2Keyboard.h:40
SerialWombatChip
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
Definition: SerialWombat.h:272
SCANCODE_QUOTE
@ SCANCODE_QUOTE
Definition: SerialWombatPS2Keyboard.h:74
SCANCODE_KPSLASH
@ SCANCODE_KPSLASH
Definition: SerialWombatPS2Keyboard.h:107
SCANCODE_Q
@ SCANCODE_Q
Definition: SerialWombatPS2Keyboard.h:52
SCANCODE_PERIOD
@ SCANCODE_PERIOD
Definition: SerialWombatPS2Keyboard.h:85
SCANCODE_Z
@ SCANCODE_Z
Definition: SerialWombatPS2Keyboard.h:77
SerialWombatPS2Keyboard::SerialWombatPS2Keyboard
SerialWombatPS2Keyboard(SerialWombatChip &serialWombat)
Constructor for the SerialWombatPS2Keyboard class.
Definition: SerialWombatPS2Keyboard.cpp:5
SCANCODE_2
@ SCANCODE_2
Definition: SerialWombatPS2Keyboard.h:39
SCANCODE_EQUALS
@ SCANCODE_EQUALS
Definition: SerialWombatPS2Keyboard.h:49
SCANCODE_RIGHTARROW
@ SCANCODE_RIGHTARROW
Definition: SerialWombatPS2Keyboard.h:102
SCANCODE_F5
@ SCANCODE_F5
Definition: SerialWombatPS2Keyboard.h:125
SCANCODE_F3
@ SCANCODE_F3
Definition: SerialWombatPS2Keyboard.h:123
SerialWombatPS2Keyboard::scanCodeToAscii
uint8_t scanCodeToAscii(uint8_t scanCode, bool shiftActive=false)
convernts a set 2 Scan Code to Ascii
Definition: SerialWombatPS2Keyboard.cpp:119
SCANCODE_LEFTBRACKET
@ SCANCODE_LEFTBRACKET
Definition: SerialWombatPS2Keyboard.h:62
SCANCODE_F12
@ SCANCODE_F12
Definition: SerialWombatPS2Keyboard.h:132
SerialWombatPS2Keyboard::setTimeout
void setTimeout(long timeout_mS)
implemented to fulfill Stream requirement.
Definition: SerialWombatPS2Keyboard.cpp:107
SCANCODE_END
@ SCANCODE_END
Definition: SerialWombatPS2Keyboard.h:97
SCANCODE_LEFTSHIFT
@ SCANCODE_LEFTSHIFT
Definition: SerialWombatPS2Keyboard.h:76
SCANCODE_RIGHTBRACKET
@ SCANCODE_RIGHTBRACKET
Definition: SerialWombatPS2Keyboard.h:63
SCANCODE_4
@ SCANCODE_4
Definition: SerialWombatPS2Keyboard.h:41
SCANCODE_V
@ SCANCODE_V
Definition: SerialWombatPS2Keyboard.h:80
SCANCODE_KP7
@ SCANCODE_KP7
Definition: SerialWombatPS2Keyboard.h:104
SCANCODE_CAPSLOCK
@ SCANCODE_CAPSLOCK
Definition: SerialWombatPS2Keyboard.h:64
SCANCODE_O
@ SCANCODE_O
Definition: SerialWombatPS2Keyboard.h:60
SCANCODE_F4
@ SCANCODE_F4
Definition: SerialWombatPS2Keyboard.h:124
SCANCODE_INSERT
@ SCANCODE_INSERT
Definition: SerialWombatPS2Keyboard.h:93
SCANCODE_KP6
@ SCANCODE_KP6
Definition: SerialWombatPS2Keyboard.h:114
SCANCODE_SCROLLLOCK
@ SCANCODE_SCROLLLOCK
Definition: SerialWombatPS2Keyboard.h:134
SCANCODE_KP3
@ SCANCODE_KP3
Definition: SerialWombatPS2Keyboard.h:115
SCANCODE_F8
@ SCANCODE_F8
Definition: SerialWombatPS2Keyboard.h:128
SCANCODE_PRINTSCREEN
@ SCANCODE_PRINTSCREEN
Definition: SerialWombatPS2Keyboard.h:133
SCANCODE_HOME
@ SCANCODE_HOME
Definition: SerialWombatPS2Keyboard.h:96
SCANCODE_KP5
@ SCANCODE_KP5
Definition: SerialWombatPS2Keyboard.h:109
SCANCODE_N
@ SCANCODE_N
Definition: SerialWombatPS2Keyboard.h:82
SCANCODE_ENTER
@ SCANCODE_ENTER
Definition: SerialWombatPS2Keyboard.h:75
SCANCODE_6
@ SCANCODE_6
Definition: SerialWombatPS2Keyboard.h:43
SCANCODE_SEMICOLON
@ SCANCODE_SEMICOLON
Definition: SerialWombatPS2Keyboard.h:73
SerialWombat.h
SCANCODE_PAGEUP
@ SCANCODE_PAGEUP
Definition: SerialWombatPS2Keyboard.h:100
SerialWombatPS2Keyboard::_pin
uint8_t _pin
Definition: SerialWombatPS2Keyboard.h:254
SCANCODE_KPENTER
@ SCANCODE_KPENTER
Definition: SerialWombatPS2Keyboard.h:119
SCANCODE_F6
@ SCANCODE_F6
Definition: SerialWombatPS2Keyboard.h:126
SCANCODE_RIGHTALT
@ SCANCODE_RIGHTALT
Definition: SerialWombatPS2Keyboard.h:91
SCANCODE_I
@ SCANCODE_I
Definition: SerialWombatPS2Keyboard.h:59
SCANCODE_X
@ SCANCODE_X
Definition: SerialWombatPS2Keyboard.h:78
SCANCODE_F9
@ SCANCODE_F9
Definition: SerialWombatPS2Keyboard.h:129
SerialWombatPS2Keyboard::readCurrentScanCodes
int16_t readCurrentScanCodes(uint8_t *buffer, uint8_t startValue)
Definition: SerialWombatPS2Keyboard.cpp:338
SCANCODE_RIGHTSHIFT
@ SCANCODE_RIGHTSHIFT
Definition: SerialWombatPS2Keyboard.h:87
SCANCODE_DOWNARROW
@ SCANCODE_DOWNARROW
Definition: SerialWombatPS2Keyboard.h:99
SCANCODE_F2
@ SCANCODE_F2
Definition: SerialWombatPS2Keyboard.h:122
SCANCODE_D
@ SCANCODE_D
Definition: SerialWombatPS2Keyboard.h:67
SerialWombatPin
Describes a Serial Wombat Pin. Is base class for other pin modes.
Definition: SerialWombat.h:799
SCANCODE_DASH
@ SCANCODE_DASH
Definition: SerialWombatPS2Keyboard.h:48
SCANCODE_J
@ SCANCODE_J
Definition: SerialWombatPS2Keyboard.h:70
SCANCODE_B
@ SCANCODE_B
Definition: SerialWombatPS2Keyboard.h:81
SCANCODE_F11
@ SCANCODE_F11
Definition: SerialWombatPS2Keyboard.h:131
SCANCODE_RIGHTCTRL
@ SCANCODE_RIGHTCTRL
Definition: SerialWombatPS2Keyboard.h:92
SCANCODE_LEFTARROW
@ SCANCODE_LEFTARROW
Definition: SerialWombatPS2Keyboard.h:95
SCANCODE_F1
@ SCANCODE_F1
Definition: SerialWombatPS2Keyboard.h:121
SCANCODE_9
@ SCANCODE_9
Definition: SerialWombatPS2Keyboard.h:46
SCANCODE_KP1
@ SCANCODE_KP1
Definition: SerialWombatPS2Keyboard.h:106
SCANCODE_7
@ SCANCODE_7
Definition: SerialWombatPS2Keyboard.h:44
SCANCODE_TAB
@ SCANCODE_TAB
Definition: SerialWombatPS2Keyboard.h:51
SerialWombatPS2Keyboard::write
size_t write(uint8_t data)
Write a byte to the SerialWombatPS2Keyboard queue (Does Nothing)
Definition: SerialWombatPS2Keyboard.cpp:91
SCANCODE_A
@ SCANCODE_A
Definition: SerialWombatPS2Keyboard.h:65
SCANCODE_F7
@ SCANCODE_F7
Definition: SerialWombatPS2Keyboard.h:127
SCANCODE_W
@ SCANCODE_W
Definition: SerialWombatPS2Keyboard.h:53
SCANCODE_KPASTERISK
@ SCANCODE_KPASTERISK
Definition: SerialWombatPS2Keyboard.h:112
SCANCODE_8
@ SCANCODE_8
Definition: SerialWombatPS2Keyboard.h:45
SCANCODE_ESC
@ SCANCODE_ESC
Definition: SerialWombatPS2Keyboard.h:120
SCANCODE_T
@ SCANCODE_T
Definition: SerialWombatPS2Keyboard.h:56
SCANCODE_KP8
@ SCANCODE_KP8
Definition: SerialWombatPS2Keyboard.h:108
SCANCODE_G
@ SCANCODE_G
Definition: SerialWombatPS2Keyboard.h:68
SerialWombatPS2Keyboard::isKeyPressed
bool isKeyPressed(uint8_t scanCode)
Check to see if a key is currently pressed (pin mode must be configured for bitfield mode)
Definition: SerialWombatPS2Keyboard.cpp:267
SCANCODE_PAGEDOWN
@ SCANCODE_PAGEDOWN
Definition: SerialWombatPS2Keyboard.h:101
SerialWombatPS2Keyboard
A class for the Serial Wombat SW18AB chips which recieves input from IBM PS2 Keyboards.
Definition: SerialWombatPS2Keyboard.h:181
SCANCODE_LEFTCTRL
@ SCANCODE_LEFTCTRL
Definition: SerialWombatPS2Keyboard.h:88
SCANCODE_KP2
@ SCANCODE_KP2
Definition: SerialWombatPS2Keyboard.h:110
SCANCODE_COMMA
@ SCANCODE_COMMA
Definition: SerialWombatPS2Keyboard.h:84
SCANCODE_R
@ SCANCODE_R
Definition: SerialWombatPS2Keyboard.h:55
SCANCODE_1
@ SCANCODE_1
Definition: SerialWombatPS2Keyboard.h:38
SCANCODE_SPACEBAR
@ SCANCODE_SPACEBAR
Definition: SerialWombatPS2Keyboard.h:90
SCANCODE_BACKSPACE
@ SCANCODE_BACKSPACE
Definition: SerialWombatPS2Keyboard.h:50
SCANCODE_C
@ SCANCODE_C
Definition: SerialWombatPS2Keyboard.h:79
SCANCODE_0
@ SCANCODE_0
Definition: SerialWombatPS2Keyboard.h:47
SCANCODE_KP0
@ SCANCODE_KP0
Definition: SerialWombatPS2Keyboard.h:111
SCANCODE_5
@ SCANCODE_5
Definition: SerialWombatPS2Keyboard.h:42
SCANCODE_U
@ SCANCODE_U
Definition: SerialWombatPS2Keyboard.h:58
SCANCODE_F10
@ SCANCODE_F10
Definition: SerialWombatPS2Keyboard.h:130
SCANCODE_KP4
@ SCANCODE_KP4
Definition: SerialWombatPS2Keyboard.h:105
SCANCODE_NUMLOCK
@ SCANCODE_NUMLOCK
Definition: SerialWombatPS2Keyboard.h:103
SerialWombatPS2Keyboard::peek
int peek()
Query the SerialWombatPS2Keyboard queue for the next avaialble byte, but don't remove it from the que...
Definition: SerialWombatPS2Keyboard.cpp:76
SCANCODE_S
@ SCANCODE_S
Definition: SerialWombatPS2Keyboard.h:66
SCANCODE_BACKSLASH
@ SCANCODE_BACKSLASH
Definition: SerialWombatPS2Keyboard.h:135
SCANCODE_LEFTALT
@ SCANCODE_LEFTALT
Definition: SerialWombatPS2Keyboard.h:89
SCANCODE_L
@ SCANCODE_L
Definition: SerialWombatPS2Keyboard.h:72
SCANCODE_M
@ SCANCODE_M
Definition: SerialWombatPS2Keyboard.h:83
SCANCODE_OPENSINGLEQUOTE
@ SCANCODE_OPENSINGLEQUOTE
Definition: SerialWombatPS2Keyboard.h:37
PS2KeyboardScanCode
PS2KeyboardScanCode
Definition: SerialWombatPS2Keyboard.h:35
SCANCODE_H
@ SCANCODE_H
Definition: SerialWombatPS2Keyboard.h:69
SerialWombatPS2Keyboard::available
int available()
Queries the SerialWombatPS2Keyboard for number bytes available to read.
Definition: SerialWombatPS2Keyboard.cpp:44
SerialWombatPS2Keyboard::begin
int16_t begin(uint8_t clockPin, uint8_t dataPin, uint8_t bufferMode=0, uint8_t queueMode=0, uint16_t queueAddress=0xFFFF, uint8_t pullUpDown=0)
Initalize the SerialWombatPS2Keyboard.
Definition: SerialWombatPS2Keyboard.cpp:9
SerialWombatPS2Keyboard::timeout
uint32_t timeout
Definition: SerialWombatPS2Keyboard.h:256
SCANCODE_E
@ SCANCODE_E
Definition: SerialWombatPS2Keyboard.h:54
SerialWombatPS2Keyboard::read
int read()
Reads a byte from the SerialWombatPS2Keyboard queue.
Definition: SerialWombatPS2Keyboard.cpp:52
SCANCODE_UPARROW
@ SCANCODE_UPARROW
Definition: SerialWombatPS2Keyboard.h:98
SCANCODE_SLASH
@ SCANCODE_SLASH
Definition: SerialWombatPS2Keyboard.h:86
SCANCODE_Y
@ SCANCODE_Y
Definition: SerialWombatPS2Keyboard.h:57
SCANCODE_P
@ SCANCODE_P
Definition: SerialWombatPS2Keyboard.h:61
SerialWombatPS2Keyboard::readBytes
size_t readBytes(char *buffer, size_t length)
Reads a specified number of bytes from the SerialWombatPS2Keyboard queue queue.
Definition: SerialWombatPS2Keyboard.cpp:292