From 4ceb6506edb675547ec3489e49bd1618d8e729e5 Mon Sep 17 00:00:00 2001 From: Graeme Harker Date: Sat, 29 Jan 2022 20:47:35 +0000 Subject: [PATCH 1/5] include Terminal.h only #ifdef _TERMINAL_ --- .../SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino b/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino index 97fca0b..b74f87c 100644 --- a/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino +++ b/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino @@ -20,11 +20,12 @@ #include -#include + #undef _TERMINAL_ //turn off Terminal //#define _TERMINAL_ //turn on Terminal #ifdef _TERMINAL_ +#include // Create a terminal in TWI mode Terminal term; //uses A4 (SDA) and A5 (SCL) that conflict with other usage of A4-A5 //so we need to put CS on low, RST = A0, DC = A1, MOSI = A2, SCK = A3, MISO = not connected (NC) From fecae2509f21e4900e0525aa2f34f30ef2432483 Mon Sep 17 00:00:00 2001 From: Graeme Harker Date: Tue, 1 Feb 2022 13:21:08 +0000 Subject: [PATCH 2/5] Added a fixed PS2KeyMap as SmartyPS2KeyMap --- .vscode/c_cpp_properties.json | 1 - .../SmartyKit1_KeyboardDriverBasic.ino | 799 +++++++++++++++++- .../SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino | 17 +- 3 files changed, 772 insertions(+), 45 deletions(-) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index d5487cb..0555269 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -19,7 +19,6 @@ "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino", "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard", "/Users/gharker/Documents/Arduino/libraries/PS2KeyAdvanced/src", - "/Users/gharker/Documents/Arduino/libraries/PS2KeyMap/src", "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include", "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include-fixed", "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include" diff --git a/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino b/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino index acfdab2..b7dd563 100644 --- a/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino +++ b/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino @@ -16,7 +16,8 @@ */ #include -#include + +//#define _SMARTY_DEBUG_ // Keyboard Driver pins connections: // D0 & D1 – reserved for Serial connection @@ -45,8 +46,700 @@ static boolean autoCommandSent = false; // run pre-set command only once after r //10 milliseconds = 100 times per second (100 Hz) #define LORATE_CLOCK_PERIOD_MILLIS 100 + +// Uncomment any of following defines to include those mappings +// or comment to exclude +//#define GERMAN +//#define FRENCH +//#define SPANISH +//#define ITALIAN +//#define SPECIAL + +/* UTF-8 single byte LATIN encodings + 128 to 159 (0x80 to 0x9F) are control characters application generated + 160 to 255 (0xA0 to 0XFF) are used depending on keymap tables + These defines are used to insert them into correct tables */ + +/**************************************************************** + IMPORTANT NOTE EURO currency Symbol is NOT supported in UTF-8 single + byte codings, as EURO symbol came after UTF-8 single byte codings +****************************************************************/ +#define PS2_NO_BREAK_SPACE 160 // nbsp +#define PS2_INVERTED_EXCLAMATION 161 // ¡ +#define PS2_CENT_SIGN 162 // ¢ +#define PS2_POUND_SIGN 163 // £ +#define PS2_CURRENCY_SIGN 164 // ¤ +#define PS2_YEN_SIGN 165 // ¥ +#define PS2_BROKEN_BAR 166 // ¦ +#define PS2_SECTION_SIGN 167 // § +#define PS2_DIAERESIS 168 // ¨ +#define PS2_COPYRIGHT_SIGN 169 // © +#define PS2_FEMININE_ORDINAL 170 // ª +#define PS2_LEFT_DOUBLE_ANGLE_QUOTE 171 // « +#define PS2_NOT_SIGN 172 // ¬ +#define PS2_HYPHEN 173 +#define PS2_REGISTERED_SIGN 174 // ® +#define PS2_MACRON 175 // ¯ +#define PS2_DEGREE_SIGN 176 // ° +#define PS2_PLUS_MINUS_SIGN 177 // ± +#define PS2_SUPERSCRIPT_TWO 178 // ² +#define PS2_SUPERSCRIPT_THREE 179 // ³ +#define PS2_ACUTE_ACCENT 180 // ´ +#define PS2_MICRO_SIGN 181 // µ +#define PS2_PILCROW_SIGN 182 // ¶ +#define PS2_MIDDLE_DOT 183 // · +#define PS2_CEDILLA 184 // ¸ +#define PS2_SUPERSCRIPT_ONE 185 // ¹ +#define PS2_MASCULINE_ORDINAL 186 // º +#define PS2_RIGHT_DOUBLE_ANGLE_QUOTE 187 // » +#define PS2_FRACTION_ONE_QUARTER 188 // ¼ +#define PS2_FRACTION_ONE_HALF 189 // ½ +#define PS2_FRACTION_THREE_QUARTERS 190 // ¾ +#define PS2_INVERTED_QUESTION_MARK 191 // ¿ +#define PS2_A_GRAVE 192 // À +#define PS2_A_ACUTE 193 // Á +#define PS2_A_CIRCUMFLEX 194 // Â +#define PS2_A_TILDE 195 // Ã +#define PS2_A_DIAERESIS 196 // Ä +#define PS2_A_RING_ABOVE 197 // Å +#define PS2_AE 198 // Æ +#define PS2_C_CEDILLA 199 // Ç +#define PS2_E_GRAVE 200 // È +#define PS2_E_ACUTE 201 // É +#define PS2_E_CIRCUMFLEX 202 // Ê +#define PS2_E_DIAERESIS 203 // Ë +#define PS2_I_GRAVE 204 // Ì +#define PS2_I_ACUTE 205 // Í +#define PS2_I_CIRCUMFLEX 206 // Î +#define PS2_I_DIAERESIS 207 // Ï +#define PS2_ETH 208 // Ð +#define PS2_N_TILDE 209 // Ñ +#define PS2_O_GRAVE 210 // Ò +#define PS2_O_ACUTE 211 // Ó +#define PS2_O_CIRCUMFLEX 212 // Ô +#define PS2_O_TILDE 213 // Õ +#define PS2_O_DIAERESIS 214 // Ö +#define PS2_MULTIPLICATION 215 // × +#define PS2_O_STROKE 216 // Ø +#define PS2_U_GRAVE 217 // Ù +#define PS2_U_ACUTE 218 // Ú +#define PS2_U_CIRCUMFLEX 219 // Û +#define PS2_U_DIAERESIS 220 // Ü +#define PS2_Y_ACUTE 221 // Ý +#define PS2_THORN 222 // Þ +#define PS2_SHARP_S 223 // ß +#define PS2_a_GRAVE 224 // à +#define PS2_a_ACUTE 225 // á +#define PS2_a_CIRCUMFLEX 226 // â +#define PS2_a_TILDE 227 // ã +#define PS2_a_DIAERESIS 228 // ä +#define PS2_a_RING_ABOVE 229 // å +#define PS2_ae 230 // æ +#define PS2_c_CEDILLA 231 // ç +#define PS2_e_GRAVE 232 // è +#define PS2_e_ACUTE 233 // é +#define PS2_e_CIRCUMFLEX 234 // ê +#define PS2_e_DIAERESIS 235 // ë +#define PS2_i_GRAVE 236 // ì +#define PS2_i_ACUTE 237 // í +#define PS2_i_CIRCUMFLEX 238 // î +#define PS2_i_DIAERESIS 239 // ï +#define PS2_eth 240 // ð +#define PS2_n_TILDE 241 // ñ +#define PS2_o_GRAVE 242 // ò +#define PS2_o_ACUTE 243 // ó +#define PS2_o_CIRCUMFLEX 244 // ô +#define PS2_o_TILDE 245 // õ +#define PS2_o_DIAERESIS 246 // ö +#define PS2_DIVISION 247 // ÷ +#define PS2_o_STROKE 248 // ø +#define PS2_u_GRAVE 249 // ù +#define PS2_u_ACUTE 250 // ú +#define PS2_u_CIRCUMFLEX 251 // û +#define PS2_u_DIAERESIS 252 // ü +#define PS2_y_ACUTE 253 // ý +#define PS2_thorn 254 // þ +#define PS2_y_DIAERESIS 255 // ÿ + + +/* Public class definition */ +class SmartyPS2KeyMap { + public: + /** + * This constructor just sets the default key mapping to US. */ + SmartyPS2KeyMap(); + + /** + Pass in 2 character string for the ISO 2 letter country code in use + For UK "UK" or "GB" are valid + "US" is built-in default + Returns 1 for done or 0 for not found. + */ + uint8_t selectMap( char * ); + + /** + Return selected map as a string pointer (2 chars and terminator) */ + const char *getMap( void ); + + /** + Pass in unsigned int returned from PS2KeyAdvanced + Returns 0 for error + uint16_t for valid code + */ + uint16_t remapKey( uint16_t ); + + /** + Returns uint8_t version of remapKey ONLY for standard ASCII/UTF-8 codes + Invalid codes returned as 0 + */ + uint8_t remapKeyByte( uint16_t ); +}; + +/* Standard ASCII/UTF-8 control Characters */ +#define PS2_BACKSPACE 0x08 +#define PS2_TAB 0x09 +#define PS2_ENTER 0x0D +#define PS2_ESC 0x1B +#define PS2_DELETE 0x7F +#define PS2_SPACE 0x20 + + +/* Standard ASCII control characters array */ +/* in order of PS2_KEY_* values order is important */ +const uint8_t _control_codes[] = { + PS2_DELETE, PS2_ESC, PS2_BACKSPACE, + PS2_TAB, PS2_ENTER, PS2_SPACE + }; + +// convert codes based on SHIFT and not SHIFT only for base US-ASCII +const uint16_t _US_ASCII[][ 2 ] = { + { PS2_SHIFT + PS2_KEY_1, '!' }, + { PS2_SHIFT + PS2_KEY_2, '@' }, + { PS2_SHIFT + PS2_KEY_3, '#' }, + { PS2_SHIFT + PS2_KEY_4, '$' }, + { PS2_SHIFT + PS2_KEY_5, '%' }, + { PS2_SHIFT + PS2_KEY_6, '^' }, + { PS2_SHIFT + PS2_KEY_7, '&' }, + { PS2_SHIFT + PS2_KEY_8, '*' }, + { PS2_SHIFT + PS2_KEY_9, '(' }, + { PS2_SHIFT + PS2_KEY_0, ')' }, + { PS2_KEY_KP_DOT, '.' }, + { PS2_KEY_KP_ENTER, PS2_ENTER }, + { PS2_KEY_KP_PLUS, '+' }, + { PS2_KEY_KP_MINUS, '-' }, + { PS2_KEY_KP_TIMES, '*' }, + { PS2_KEY_KP_DIV, '/' }, + { PS2_KEY_KP_COMMA, ',' }, + { PS2_KEY_KP_EQUAL, '=' }, + { PS2_KEY_APOS, '\'' }, + { PS2_SHIFT + PS2_KEY_APOS, '"' }, + { PS2_KEY_COMMA, ',' }, + { PS2_SHIFT + PS2_KEY_COMMA, '<' }, + { PS2_KEY_MINUS, '-' }, + { PS2_SHIFT + PS2_KEY_MINUS, '_' }, + { PS2_KEY_DOT, '.' }, + { PS2_SHIFT + PS2_KEY_DOT, '>' }, + { PS2_KEY_DIV, '/' }, + { PS2_SHIFT + PS2_KEY_DIV, '?' }, + { PS2_KEY_SINGLE, '`' }, + { PS2_SHIFT + PS2_KEY_SINGLE, '~' }, + { PS2_KEY_SEMI, ';' }, + { PS2_SHIFT + PS2_KEY_SEMI, ':' }, + { PS2_KEY_BACK, '\\' }, + { PS2_SHIFT + PS2_KEY_BACK, '|' }, + { PS2_KEY_OPEN_SQ, '[' }, + { PS2_SHIFT + PS2_KEY_OPEN_SQ, '{' }, + { PS2_KEY_CLOSE_SQ, ']' }, + { PS2_SHIFT + PS2_KEY_CLOSE_SQ, '}' }, + { PS2_KEY_EQUAL, '=' }, + { PS2_SHIFT + PS2_KEY_EQUAL, '+' } + }; + +const uint16_t _UKmap[][ 2 ] = { + { PS2_SHIFT + '@', '"' }, + { PS2_SHIFT + '"', '@' }, + { PS2_ALT_GR + '`', PS2_BROKEN_BAR }, + { PS2_SHIFT + '`', PS2_NOT_SIGN }, + { PS2_SHIFT + '#', PS2_POUND_SIGN }, + { '\\', '#' }, + { PS2_SHIFT + '|', '~' }, + { PS2_KEY_EUROPE2, '\\' }, + { PS2_SHIFT + PS2_KEY_EUROPE2, '|' }, + }; +#ifdef FRENCH +const uint16_t _FRmap[][ 2 ] = { + { '`', PS2_SUPERSCRIPT_TWO }, + { PS2_SHIFT + '~', PS2_SUPERSCRIPT_TWO }, + { 'q', 'a' }, + { 'Q', 'A' }, + { '1', '&' }, + { PS2_SHIFT + '!', '1' }, + { PS2_ALT_GR + '1', 0 }, + { PS2_ALT_GR + PS2_SHIFT + '!', 0 }, + { 'z', 'w' }, + { 'Z', 'W' }, + { 'a', 'q' }, + { 'A', 'Q' }, + { 'w', 'z' }, + { 'W', 'Z' }, + { PS2_ALT_GR + '2', '~' }, + { PS2_SHIFT + PS2_ALT_GR + '@', '~' }, + { '2', PS2_e_ACUTE }, + { PS2_SHIFT + '@', '2' }, + { PS2_ALT_GR + '3', PS2_CENT_SIGN }, + { PS2_SHIFT + PS2_ALT_GR + '#', PS2_CENT_SIGN }, + { '3', '"' }, + { PS2_SHIFT + '#', '3' }, + { PS2_ALT_GR + '4', '{' }, + { PS2_SHIFT + PS2_ALT_GR + '$', '{' }, + { '4', '\'' }, + { PS2_SHIFT + '$', '4' }, + { PS2_ALT_GR + '5', '[' }, + { PS2_SHIFT + PS2_ALT_GR + '%', '[' }, + { '5', '(' }, + { PS2_SHIFT + '%', '5' }, + { PS2_ALT_GR + '6', '|' }, + { PS2_SHIFT + PS2_ALT_GR + '^', '|' }, + { '6', '-' }, + { PS2_SHIFT + '^', '6' }, + { 'm', ',' }, + { 'M', '?' }, + { PS2_ALT_GR + '7', '`' }, + { PS2_SHIFT + PS2_ALT_GR + '&', '`' }, + { '7', PS2_e_GRAVE }, + { PS2_SHIFT + '&', '7' }, + { PS2_ALT_GR + '8', '\\' }, + { PS2_SHIFT + PS2_ALT_GR + '*', '\\' }, + { '8', '_' }, + { PS2_SHIFT + '*', '8' }, + { ',', ';' }, + { PS2_SHIFT + '<', '.' }, + { PS2_ALT_GR + '9', '^' }, + { PS2_SHIFT + PS2_ALT_GR + '(', '^' }, + { '9', PS2_c_CEDILLA }, + { PS2_SHIFT + '(', '9' }, + { PS2_ALT_GR + '0', '@' }, + { PS2_ALT_GR + ')', '@' }, + { '0', PS2_a_GRAVE }, + { PS2_SHIFT + ')', '0' }, + { '.', ':' }, + { PS2_SHIFT + '>', '/' }, + { '/', '!' }, + { PS2_SHIFT + '?', PS2_SECTION_SIGN }, + { ';', 'm' }, + { PS2_SHIFT + ':', 'M' }, + { PS2_ALT_GR + '-', ']' }, + { PS2_SHIFT + PS2_ALT_GR + '_', ']' }, + { '-', ')' }, + { PS2_SHIFT + '_', PS2_DEGREE_SIGN }, + { '\'', PS2_u_GRAVE }, + { PS2_SHIFT + '"', '%' }, + { PS2_ALT_GR + '\'', 0 }, + { PS2_SHIFT + PS2_ALT_GR + '"', 0 }, + { '[', '^' }, + { PS2_SHIFT + '{', PS2_DIAERESIS }, + { PS2_ALT_GR + '=', '}' }, + { PS2_SHIFT + PS2_ALT_GR + '+', '}' }, + { PS2_ALT_GR + ']', PS2_CURRENCY_SIGN }, + { PS2_SHIFT + PS2_ALT_GR + '}', 0 }, + { ']', '$' }, + { PS2_SHIFT + '}', PS2_POUND_SIGN }, + { '\\', '*' }, + { PS2_SHIFT + '|', PS2_MICRO_SIGN }, + { PS2_SHIFT + PS2_ALT_GR +'|', 0 }, + { PS2_ALT_GR +'\\', 0 }, + { PS2_KEY_EUROPE2 + PS2_SHIFT + PS2_ALT_GR, '|' }, + { PS2_KEY_EUROPE2 + PS2_ALT_GR, '|' }, + { PS2_SHIFT + PS2_KEY_EUROPE2, '>' }, + { PS2_KEY_EUROPE2, '<' } + }; +#endif +#ifdef GERMAN +const uint16_t _DEmap[][ 2 ] = { + { '`', '^' }, + { PS2_SHIFT + '~', PS2_DEGREE_SIGN }, + { PS2_ALT_GR + 'q', '@' }, + { PS2_ALT_GR + 'Q', '@' }, + { 'y', 'z' }, + { 'Y', 'Z' }, + { PS2_ALT_GR + '2', PS2_SUPERSCRIPT_TWO }, + { PS2_SHIFT + PS2_ALT_GR + '@', PS2_SUPERSCRIPT_TWO }, + { PS2_SHIFT + '@', '"' }, + { PS2_ALT_GR + 'e', PS2_CURRENCY_SIGN }, + { PS2_ALT_GR + 'E', PS2_CURRENCY_SIGN }, + { PS2_ALT_GR + '3', PS2_SUPERSCRIPT_THREE }, + { PS2_SHIFT + PS2_ALT_GR + '#', PS2_SUPERSCRIPT_THREE }, + { PS2_SHIFT + '#', PS2_SECTION_SIGN }, + { 'z', 'y' }, + { 'Z', 'Y' }, + { PS2_SHIFT + '^', '&' }, + { PS2_ALT_GR + 'm', PS2_MICRO_SIGN }, + { PS2_ALT_GR + 'M', PS2_MICRO_SIGN }, + { PS2_SHIFT + '&', '/' }, + { PS2_ALT_GR + '7', '{' }, + { PS2_SHIFT + PS2_ALT_GR + '&', '{' }, + { PS2_SHIFT + '*', '(' }, + { PS2_ALT_GR + '8', '[' }, + { PS2_SHIFT + PS2_ALT_GR + '*', '[' }, + { PS2_SHIFT + '<', ';' }, + { PS2_SHIFT + ')', '=' }, + { PS2_ALT_GR + '0', '}' }, + { PS2_SHIFT + PS2_ALT_GR + ')', '}' }, + { PS2_SHIFT + '(', ')' }, + { PS2_ALT_GR + '9', ']' }, + { PS2_SHIFT + PS2_ALT_GR + '(', ']' }, + { PS2_SHIFT + '>', ':' }, + { ';', PS2_o_DIAERESIS }, + { PS2_SHIFT + ':', PS2_O_DIAERESIS }, + { PS2_ALT_GR + '-', '\\' }, + { PS2_SHIFT + PS2_ALT_GR + '_', '\\' }, + { '-', PS2_SHARP_S }, + { PS2_SHIFT + '_', '?' }, + { '\'', PS2_a_DIAERESIS }, + { PS2_SHIFT + '"', PS2_A_DIAERESIS }, + { '[', PS2_u_DIAERESIS }, + { PS2_SHIFT + '{', PS2_U_DIAERESIS }, + { '=', '\'' }, + { PS2_SHIFT + '+', '`' }, + { ']' + PS2_ALT_GR, '~' }, + { PS2_SHIFT + '}' + PS2_ALT_GR, '~' }, + { ']', '+' }, + { PS2_SHIFT + '}', '*' }, + { '\\', '#' }, + { PS2_SHIFT + '|', '\'' }, + { PS2_KEY_EUROPE2 + PS2_SHIFT + PS2_ALT_GR, '|' }, + { PS2_KEY_EUROPE2 + PS2_ALT_GR, '|' }, + { PS2_SHIFT + PS2_KEY_EUROPE2, '>' }, + { PS2_KEY_EUROPE2, '<' } + }; +#endif +#ifdef SPANISH +const uint16_t _ESmap[][ 2 ] = { + { PS2_KEY_SINGLE, PS2_MASCULINE_ORDINAL }, + { PS2_SHIFT + PS2_KEY_SINGLE, PS2_FEMININE_ORDINAL }, + { PS2_KEY_SINGLE + PS2_ALT_GR, '\\' }, + { '1' + PS2_ALT_GR, '|' }, + { PS2_SHIFT + '@', '"' }, + { '2' + PS2_ALT_GR, '@' }, + { PS2_SHIFT + '#', PS2_MIDDLE_DOT }, + { '3' + PS2_ALT_GR, '#' }, + { '4' + PS2_ALT_GR, '~' }, + { PS2_SHIFT + '^', '&' }, + { '6' + PS2_ALT_GR, PS2_NOT_SIGN }, + { PS2_SHIFT + '&', '/' }, + { PS2_SHIFT + '*', '(' }, + { PS2_SHIFT + '(', ')' }, + { PS2_SHIFT + ')', '=' }, + { '-', '\'' }, + { PS2_SHIFT + '_', '?' }, + { '=', PS2_INVERTED_EXCLAMATION }, + { PS2_SHIFT + '+', PS2_INVERTED_QUESTION_MARK }, + { '[', '`' }, + { PS2_SHIFT + '{', '^' }, + { '[' + PS2_ALT_GR, '[' }, + { ']', '+' }, + { PS2_SHIFT + '}', '*' }, + { ']' + PS2_ALT_GR, ']' }, + { ';', PS2_n_TILDE }, + { PS2_SHIFT + ':', PS2_N_TILDE }, + { '\'', PS2_ACUTE_ACCENT }, + { PS2_SHIFT + '"', PS2_DIAERESIS }, + { '\'' + PS2_ALT_GR, '{' }, + { '\\', PS2_c_CEDILLA }, + { PS2_SHIFT + '|', PS2_C_CEDILLA }, + { '\\' + PS2_ALT_GR, '}' }, + { PS2_SHIFT + PS2_KEY_EUROPE2, '>' }, + { PS2_KEY_EUROPE2, '<' }, + { PS2_SHIFT + '<', ';' }, + { PS2_SHIFT + '>', ':' }, + { PS2_KEY_DIV, '-' }, + { PS2_SHIFT + PS2_KEY_DIV, '+' } + }; +#endif +#ifdef ITALIAN +const uint16_t _ITmap[][ 2 ] = { + { PS2_KEY_SINGLE, '\\' }, + { PS2_SHIFT + PS2_KEY_SINGLE, '|' }, + { '@', '"' }, + { PS2_SHIFT + '#', PS2_POUND_SIGN }, + { '3' + PS2_ALT_GR, '#' }, + { PS2_SHIFT + '^', '&' }, + { PS2_SHIFT + '&', '/' }, + { '7' + PS2_ALT_GR, '{' }, + { PS2_SHIFT + '*', '(' }, + { '8' + PS2_ALT_GR, '[' }, + { PS2_SHIFT + '(', ')' }, + { '9' + PS2_ALT_GR, ']' }, + { PS2_SHIFT + ')', '=' }, + { '0' + PS2_ALT_GR, '}' }, + { '-', '\'' }, + { PS2_SHIFT + '_', '?' }, + { '=', PS2_i_GRAVE }, + { PS2_SHIFT + '+', '^' }, + { 'q' + PS2_ALT_GR, '@' }, + { '[', PS2_e_GRAVE }, + { PS2_SHIFT + '{', PS2_e_ACUTE }, + { ']', '+' }, + { PS2_SHIFT + '}', '*' }, + { ']' + PS2_ALT_GR, '~' }, + { ';', PS2_o_GRAVE }, + { PS2_SHIFT + ':', PS2_c_CEDILLA }, + { '\'', PS2_a_GRAVE }, + { PS2_SHIFT + '"', PS2_DEGREE_SIGN }, + { '\\', PS2_u_GRAVE }, + { PS2_SHIFT + '|', PS2_SECTION_SIGN }, + { PS2_SHIFT + PS2_KEY_EUROPE2, '>' }, + { PS2_KEY_EUROPE2, '<' }, + { PS2_SHIFT + '<', ';' }, + { PS2_SHIFT + '>', ':' }, + { PS2_KEY_DIV, '-' }, + { PS2_SHIFT + PS2_KEY_DIV, '+' } + }; +#endif +#ifdef SPECIAL +const uint16_t _SpecialMap[][ 2 ] = { +// Insert your Special mapping DIFFERENCES from US-ASCII here + }; +#endif + +// The following structures define the key maps available +typedef struct { + char *name; // 2 Character ISO country code + uint8_t size; // Number of entries in map array + uint16_t *map; // Map array pointer + } PS2Advmap; + +// Actual map structure array ( 2 entries for GB and UK for same map +// Because many people don't know ISO code for UK is GB ) +const PS2Advmap _KeyMaps[ ] = { + { "US", sizeof( _US_ASCII ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_US_ASCII }, +#ifdef FRENCH + { "FR", sizeof( _FRmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_FRmap }, +#endif +#ifdef GERMAN + { "DE", sizeof( _DEmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_DEmap }, +#endif +#ifdef SPANISH + { "ES", sizeof( _ESmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_ESmap }, +#endif +#ifdef ITALIAN + { "IT", sizeof( _ITmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_ITmap }, +#endif +#ifdef SPECIAL + { "--", sizeof( _SpecialMap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t* )_SpecialMap }, +#endif + { "UK", sizeof( _UKmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_UKmap }, + { "GB", sizeof( _UKmap ) / ( 2 * sizeof( uint16_t ) ), (uint16_t *)_UKmap } + }; + + +uint8_t _selected_map; + +// Private country code strings +const char *_USStr[] = { "US" }; + + +/* Common function to scan a Look up table table and + return a value or 0 for not found + + Checks using default mask of keycode plus ALT_GR and SHIFT + To add in match other modifiers set mask to combination of + PS2_CTRL match either Control key as well + PS2_ALT match left ALT as well + PS2_GUI match either GUI key as well + + Assumes map table has 2 dimensions of type prog_uint16_t (in Flash memory) + i.e. an array like test[ ][ 2 ] + First entry (test[][ 0 ]) is item to match + Second entry (test[][ 1 ]) is item to return + + Parameters are + data unsigned int 16 from PS2KeyAdvanced library + index index of mapping table to use +*/ +uint16_t scan_map( uint16_t data, uint8_t index ) +{ +uint16_t idx, result, size; +uint16_t *maparray; + +// Convert entries count to number of ints +size = ( _KeyMaps[ index ].size ) << 1; +maparray = ( uint16_t *)_KeyMaps[ index ].map; + +//for (int i = 0 ; i < 10 ; i+=2) +//{ +// Serial.print("maparray: "); Serial.print(i); +// Serial.print(" 0x"); Serial.println(pgm_read_word(maparray + i), HEX); +//} + +// Leave only required bits for checking against +result = data & ( PS2_ALT_GR + PS2_SHIFT + 0xFF ); + +// scan Lookup Table (array) jumping 2 integers at a time +for( idx = 0; idx < size; idx += 2 ) +{ + if( result == *( maparray + idx ) ) + { // second integer is the replacement value + result = *( maparray + idx + 1 ); + data &= ~0xFF; // clear old bits retaining CTRL etc + data |= result; // Make new code + break; + } +} +return data; +} + + +/* + Pass in 2 character string for the ISO 2 letter country code in use + For UK "UK" or "GB" are valid + "US" is built-in default + + Returns 1 for done + or 0 for not found. +*/ +uint8_t SmartyPS2KeyMap::selectMap( char *ISO = (char *)_USStr ) +{ +uint8_t outer, idx, end; + +end = sizeof( _KeyMaps ) / sizeof( PS2Advmap ); + +//for (int i; i < end; i++) +//{ +// Serial.print("MMap "); +// Serial.print(i); Serial.print(" "); +// Serial.print(_KeyMaps[i].name[0]); Serial.print(_KeyMaps[i].name[1]); Serial.print(" "); +// Serial.println(_KeyMaps[i].size); +//} + +for( outer = 0; outer < end; outer++ ) + { +// Serial.print("Map "); Serial.print(outer); + for( idx = 0; idx < 3; idx++ ) + { +// Serial.print(" _KeyMap[].name[i] "); +// Serial.write(_KeyMaps[ outer ].name[ idx ]); +// Serial.print(" ISO[ idx ] "); +// Serial.write(ISO[ idx ]); +// Serial.print(" "); + if( _KeyMaps[ outer ].name[ idx ] != ISO[ idx ] ) + break; // No match + } +// Serial.println(); + if( idx == 3 ) // done whole match + break; + } +if( outer < end ) // found entry + { + _selected_map = outer; // Copy over to selected + return 1; + } +return 0; +} + + +/* + Return selected map as a string pointer (2 chars and terminator) +*/ +const char *SmartyPS2KeyMap::getMap( void ) +{ +return ( _KeyMaps[ _selected_map ].name ); +} + + +/* Pass in unsigned int returned from PS2KeyAdvanced + Returns 0 for error + uint16_t for valid code + Converts code to US-ASCII first (honouring SHIFT ONLY) + then if additional map defined scan and remap those keys +*/ +uint16_t SmartyPS2KeyMap::remapKey( uint16_t code ) +{ +uint8_t temp; + +// for bottom byte checks +temp = code & 0xFF; + +// Sort standard ASCII control codes +if( temp >= PS2_KEY_DELETE && temp <= PS2_KEY_SPACE ) + { + code &= ~( PS2_FUNCTION + 0xFF ); // convert to ASCII code not function + temp = _control_codes[ temp - PS2_KEY_DELETE ]; + code |= temp; + } +else + // Remainder convert printable to US-ASCII + if( !( code & PS2_FUNCTION ) ) + { // Some codes are straight return values We deal with ones that need work + // When A-Z not shifted create lower case a - z + if( temp >= PS2_KEY_A && temp <= PS2_KEY_Z ) + { + // Deal with Caps Lock by inverting PS2_SHIFT and remove caps lock + if( ( code & PS2_CAPS ) ) + code ^= ( PS2_SHIFT + PS2_CAPS ); + if( !( code & PS2_SHIFT ) ) + code |= 0x20; + // When shifted pass through code as received as the codes are A - Z + else + code &= ~PS2_SHIFT; + } + else + // Convert KeyPad 0-9 to number codes + if( temp >= PS2_KEY_KP0 && temp <= PS2_KEY_KP9 ) + { + code |= 0x10; + code &= ~( PS2_SHIFT + PS2_ALT + PS2_ALT_GR + PS2_CTRL + PS2_GUI + PS2_CAPS ); + } + else + { + // Some keys ignore shift, the extra keys on numeric keypad + if( ( temp >= PS2_KEY_KP_DOT && temp <= PS2_KEY_KP_DIV ) + || temp == PS2_KEY_KP_EQUAL || temp == PS2_KEY_KP_COMMA ) + code &= ~PS2_SHIFT; + // Do default US-ASCII mapping of remainders excluding (CTRL, ALT, GUI) + code = (code & PS2_ALT_GR ) + scan_map( code & ~PS2_ALT_GR, 0 ); + } + //Now do remap if necessary for all modifiers + if( code > 0 && _selected_map > 0 ) + code = scan_map( code, _selected_map ); + else // For USASCII ignore extra key in case + if( ( temp == PS2_KEY_EUROPE2 ) ) + code = 0; + code &= ~( PS2_SHIFT + PS2_ALT_GR ); // Now clear shift status + } + else + code = 0; +return code; +} + + +/* + Returns uint8_t version of remapKey ONLY for standard ASCII/UTF-8 codes + Invalid codes returned as 0 + Also any key with BREAK condition are returned as 0 +*/ +uint8_t SmartyPS2KeyMap::remapKeyByte( uint16_t code ) +{ +uint16_t data; + +// Invalid codes returned as 0 +if( code & ( PS2_FUNCTION + PS2_BREAK ) ) + return 0; +data = remapKey( code ); +return ( uint8_t )( data & 0xFF ); +} + + +/* Class constructor + At construction ensure default map selected +*/ +SmartyPS2KeyMap::SmartyPS2KeyMap() +{ +_selected_map = 0; +} + PS2KeyAdvanced keyboard; -PS2KeyMap keymap; +SmartyPS2KeyMap keymap; void setup() { @@ -62,7 +755,7 @@ void setup() digitalWrite(KEYBOARD_BIT7_PIN, LOW); Serial.begin(9600); - Serial.println("SmartyKit 1 PS2 Keyboard is ready..."); + Serial.println(F("SmartyKit 1 PS2 Keyboard is ready...")); if (autoMode) delay(7500); //for start without Keyboard connected @@ -74,22 +767,32 @@ void setup() delay( 6 ); uint16_t scan_code = keyboard.read(); +#ifdef _SMARTY_DEBUG_ + Serial.print(F("0.scan_code: 0x")); + Serial.print(scan_code, HEX); + Serial.println(); + if( (scan_code & 0xff) == PS2_KEY_ECHO || (scan_code & 0xff) == PS2_KEY_BAT || (scan_code & 0xff) == 0xe8 ) - Serial.println( "Keyboard OK.." ); // Response was Echo or power up + Serial.println(F("Keyboard OK..")); // Response was Echo or power up else if ((scan_code & 0xff) == 0) { - Serial.println( "Keyboard Not Found" ); + Serial.println(F("Keyboard Not Found") ); } else { - Serial.print( "Invalid Code received of 0x" ); + Serial.print(F("Invalid Code received of 0x")); Serial.println(scan_code, HEX); } +#endif keyboard.setNoBreak(1); keyboard.setNoRepeat(1); - keymap.selectMap((char *)"UK"); +// keymap.selectMap((char *)"UK"); +// keymap.selectMap((char *)"FR"); +// keymap.selectMap((char *)"DE"); +// keymap.selectMap((char *)"IT"); +// keymap.selectMap((char *)"ES"); attachInterrupt(digitalPinToInterrupt(KEYBOARD_RD_PIN), cpuReadsKeyboard, FALLING); } @@ -100,11 +803,6 @@ void cpuReadsKeyboard(void) void sendCharToKeyboardPort(char c) { - if (c == '\r') - Serial.println(); - else - Serial.print(c); - for (int bit = 0; bit < 8 ; bit++) { if (c & (1 << (bit))) @@ -130,36 +828,59 @@ void loop() if (!digitalRead(KEYBOARD_BIT7_PIN) && keyboard.available()) { uint16_t scan_code = keymap.remapKey(keyboard.read()); - char c = scan_code & 0xff; + uint8_t c = scan_code & 0xff; - Serial.print(":0x"); - Serial.print(scan_code, HEX); - Serial.print(":"); - - //process Backspace, Left Arrow, Delete as Apple I backspace '_' - switch (c) + if (scan_code > 0) { - case PS2_KEY_TAB: - runCommand(); - break; - case PS2_KEY_BS: - case PS2_KEY_DELETE: - case PS2_KEY_L_ARROW: - c = '_'; - break; - case PS2_KEY_ENTER: - c = '\r'; - break; - case PS2_KEY_SPACE: - c = ' '; - break; - } +#ifdef _SMARTY_DEBUG_ + Serial.print(F("1.scan_code: 0x")); + Serial.print(scan_code, HEX); + Serial.print(F(", c: 0x")); + Serial.print(c, HEX); + Serial.print(F(", ASCII ")); + Serial.write(c); + Serial.println(); +#endif + //process Backspace, Left Arrow, Delete as Apple I backspace '_' + switch (c) + { + case PS2_TAB: + case PS2_KEY_TAB: + runCommand(); + break; + case PS2_BACKSPACE: + case PS2_DELETE: + case PS2_KEY_L_ARROW: + c = '_'; + break; + } - //make all symbols uppercase (from 'a' (ASCII code 0x61) to 'z' (ASCII code 0x7A)) - //as in original Apple-1 - c = toupper(c); - //print c to Keyboard Port to be read by CPU - sendCharToKeyboardPort(c); +#ifdef _SMARTY_DEBUG_ + Serial.print("2.scan_code: 0x"); + Serial.print(scan_code, HEX); + Serial.print(", c: 0x"); + Serial.print(c, HEX); + Serial.print(", ASCII "); + Serial.write(c); + Serial.println(); +#endif + + //make all symbols uppercase (from 'a' (ASCII code 0x61) to 'z' (ASCII code 0x7A)) + //as in original Apple-1 + c = toupper(c); + //print c to Keyboard Port to be read by CPU + +#ifdef _SMARTY_DEBUG_ + Serial.print("3.scan_code: 0x"); + Serial.print(scan_code, HEX); + Serial.print(", c: 0x"); + Serial.print(c, HEX); + Serial.print(", ASCII "); + Serial.write(c); + Serial.println(); +#endif + sendCharToKeyboardPort(c); + } } //low-rate clock diff --git a/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino b/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino index 97fca0b..deffa56 100644 --- a/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino +++ b/SmartyKit 1 basic drivers/SmartyKit1_VideoDriverBasic_TFT2.8_TV/SmartyKit1_VideoDriverBasic_TFT2.8_TV.ino @@ -19,12 +19,11 @@ #include - -#include #undef _TERMINAL_ //turn off Terminal //#define _TERMINAL_ //turn on Terminal #ifdef _TERMINAL_ +#include // Create a terminal in TWI mode Terminal term; //uses A4 (SDA) and A5 (SCL) that conflict with other usage of A4-A5 //so we need to put CS on low, RST = A0, DC = A1, MOSI = A2, SCK = A3, MISO = not connected (NC) @@ -601,7 +600,7 @@ void SmartyKit_DisplayDriver::initSPI(void) spiClass = &SPI; #if defined(_SMARTY_DEBUG_) - Serial.print(F("SmartyKit SPI freq = "));Serial.println(DEFAULT_SPI_FREQ, DEC); + Serial.print(F("SmartyKit TFT_HARD_SPI freq = "));Serial.println(DEFAULT_SPI_FREQ, DEC); #endif spiSettings = SPISettings(DEFAULT_SPI_FREQ, MSBFIRST, SPI_MODE0); @@ -611,6 +610,9 @@ void SmartyKit_DisplayDriver::initSPI(void) } else if (connection == TFT_SOFT_SPI) { + #if defined(_SMARTY_DEBUG_) + Serial.println(F("SmartyKit TFT_SOFT_SPI")); + #endif pinMode(_mosi, OUTPUT); digitalWrite(_mosi, LOW); pinMode(_sck, OUTPUT); @@ -1471,7 +1473,11 @@ const int VideoBIT7pin = 5; int DataBus[8] = {6, 7, 8, 9, 10, 11, 12, 13}; byte scan_code=0; -void setup() { +void setup() +{ + Serial.begin(9600); + Serial.println("setup()"); + pinMode(VideoBIT7pin, OUTPUT); digitalWrite(VideoBIT7pin, HIGH); //wait until video setup is ready @@ -1508,7 +1514,8 @@ void setup() { digitalWrite(VideoBIT7pin, LOW); //default state after restart = 0 (ready to print) } -void loop() { +void loop() +{ //intentionally left blank } From b7649e88216791dcaa16d4b20a37223b1c21726d Mon Sep 17 00:00:00 2001 From: Graeme Harker Date: Tue, 1 Feb 2022 14:55:34 +0000 Subject: [PATCH 3/5] added .vscode to .gitignore --- .vscode/arduino.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/arduino.json b/.vscode/arduino.json index 87db568..f557b84 100644 --- a/.vscode/arduino.json +++ b/.vscode/arduino.json @@ -1,6 +1,6 @@ { "board": "arduino:avr:uno", - "programmer": "arduino:avrispmkii", + "port": "/dev/cu.usbserial-FTBXSR3D", "sketch": "SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino", - "port": "/dev/cu.usbserial-FTBXSR3D" + "programmer": "arduino:avrispmkii" } \ No newline at end of file From 6ff852aff2dc3a9c22633d2b5cbfa77204e4df6e Mon Sep 17 00:00:00 2001 From: Graeme Harker Date: Tue, 1 Feb 2022 15:05:32 +0000 Subject: [PATCH 4/5] Removed .vscode from .gitignore --- .gitignore | 1 - .vscode/arduino.json | 6 - .vscode/c_cpp_properties.json | 538 ---------------------------------- 3 files changed, 545 deletions(-) delete mode 100644 .vscode/arduino.json delete mode 100644 .vscode/c_cpp_properties.json diff --git a/.gitignore b/.gitignore index 94f1119..e43b0f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ .DS_Store -.vscode diff --git a/.vscode/arduino.json b/.vscode/arduino.json deleted file mode 100644 index f557b84..0000000 --- a/.vscode/arduino.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "board": "arduino:avr:uno", - "port": "/dev/cu.usbserial-FTBXSR3D", - "sketch": "SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino", - "programmer": "arduino:avrispmkii" -} \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 0555269..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,538 +0,0 @@ -{ - "version": 4, - "configurations": [ - { - "name": "Arduino", - "compilerPath": "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-g++", - "compilerArgs": [ - "-w", - "-std=gnu++11", - "-fpermissive", - "-fno-exceptions", - "-ffunction-sections", - "-fdata-sections", - "-fno-threadsafe-statics", - "-Wno-error=narrowing" - ], - "intelliSenseMode": "gcc-x64", - "includePath": [ - "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino", - "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard", - "/Users/gharker/Documents/Arduino/libraries/PS2KeyAdvanced/src", - "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include", - "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/lib/gcc/avr/7.3.0/include-fixed", - "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include" - ], - "forcedInclude": [ - "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h" - ], - "cStandard": "c11", - "cppStandard": "c++11", - "defines": [ - "F_CPU=16000000L", - "ARDUINO=10815", - "ARDUINO_AVR_UNO", - "ARDUINO_ARCH_AVR", - "__DBL_MIN_EXP__=(-125)", - "__HQ_FBIT__=15", - "__cpp_attributes=200809", - "__UINT_LEAST16_MAX__=0xffffU", - "__ATOMIC_ACQUIRE=2", - "__SFRACT_IBIT__=0", - "__FLT_MIN__=1.17549435e-38F", - "__GCC_IEC_559_COMPLEX=0", - "__BUILTIN_AVR_SLEEP=1", - "__BUILTIN_AVR_COUNTLSULLK=1", - "__cpp_aggregate_nsdmi=201304", - "__BUILTIN_AVR_COUNTLSULLR=1", - "__UFRACT_MAX__=0XFFFFP-16UR", - "__UINT_LEAST8_TYPE__=unsigned char", - "__DQ_FBIT__=63", - "__INTMAX_C(c)=c ## LL", - "__ULFRACT_FBIT__=32", - "__SACCUM_EPSILON__=0x1P-7HK", - "__CHAR_BIT__=8", - "__USQ_IBIT__=0", - "__UINT8_MAX__=0xff", - "__ACCUM_FBIT__=15", - "__WINT_MAX__=0x7fff", - "__FLT32_MIN_EXP__=(-125)", - "__cpp_static_assert=200410", - "__USFRACT_FBIT__=8", - "__ORDER_LITTLE_ENDIAN__=1234", - "__SIZE_MAX__=0xffffU", - "__WCHAR_MAX__=0x7fff", - "__LACCUM_IBIT__=32", - "__DBL_DENORM_MIN__=double(1.40129846e-45L)", - "__GCC_ATOMIC_CHAR_LOCK_FREE=1", - "__GCC_IEC_559=0", - "__FLT_EVAL_METHOD__=0", - "__BUILTIN_AVR_LLKBITS=1", - "__cpp_binary_literals=201304", - "__LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-47LLK", - "__GCC_ATOMIC_CHAR32_T_LOCK_FREE=1", - "__BUILTIN_AVR_HKBITS=1", - "__BUILTIN_AVR_BITSLLK=1", - "__FRACT_FBIT__=15", - "__BUILTIN_AVR_BITSLLR=1", - "__cpp_variadic_templates=200704", - "__UINT_FAST64_MAX__=0xffffffffffffffffULL", - "__SIG_ATOMIC_TYPE__=char", - "__BUILTIN_AVR_UHKBITS=1", - "__UACCUM_FBIT__=16", - "__DBL_MIN_10_EXP__=(-37)", - "__FINITE_MATH_ONLY__=0", - "__cpp_variable_templates=201304", - "__LFRACT_IBIT__=0", - "__GNUC_PATCHLEVEL__=0", - "__FLT32_HAS_DENORM__=1", - "__LFRACT_MAX__=0X7FFFFFFFP-31LR", - "__UINT_FAST8_MAX__=0xff", - "__has_include(STR)=__has_include__(STR)", - "__DEC64_MAX_EXP__=385", - "__INT8_C(c)=c", - "__INT_LEAST8_WIDTH__=8", - "__UINT_LEAST64_MAX__=0xffffffffffffffffULL", - "__SA_FBIT__=15", - "__SHRT_MAX__=0x7fff", - "__LDBL_MAX__=3.40282347e+38L", - "__FRACT_MAX__=0X7FFFP-15R", - "__UFRACT_FBIT__=16", - "__UFRACT_MIN__=0.0UR", - "__UINT_LEAST8_MAX__=0xff", - "__GCC_ATOMIC_BOOL_LOCK_FREE=1", - "__UINTMAX_TYPE__=long long unsigned int", - "__LLFRACT_EPSILON__=0x1P-63LLR", - "__BUILTIN_AVR_DELAY_CYCLES=1", - "__DEC32_EPSILON__=1E-6DF", - "__FLT_EVAL_METHOD_TS_18661_3__=0", - "__UINT32_MAX__=0xffffffffUL", - "__GXX_EXPERIMENTAL_CXX0X__=1", - "__ULFRACT_MAX__=0XFFFFFFFFP-32ULR", - "__TA_IBIT__=16", - "__LDBL_MAX_EXP__=128", - "__WINT_MIN__=(-__WINT_MAX__ - 1)", - "__INT_LEAST16_WIDTH__=16", - "__ULLFRACT_MIN__=0.0ULLR", - "__SCHAR_MAX__=0x7f", - "__WCHAR_MIN__=(-__WCHAR_MAX__ - 1)", - "__INT64_C(c)=c ## LL", - "__DBL_DIG__=6", - "__GCC_ATOMIC_POINTER_LOCK_FREE=1", - "__AVR_HAVE_SPH__=1", - "__LLACCUM_MIN__=(-0X1P15LLK-0X1P15LLK)", - "__BUILTIN_AVR_KBITS=1", - "__BUILTIN_AVR_ABSK=1", - "__BUILTIN_AVR_ABSR=1", - "__SIZEOF_INT__=2", - "__SIZEOF_POINTER__=2", - "__GCC_ATOMIC_CHAR16_T_LOCK_FREE=1", - "__USACCUM_IBIT__=8", - "__USER_LABEL_PREFIX__", - "__STDC_HOSTED__=1", - "__LDBL_HAS_INFINITY__=1", - "__LFRACT_MIN__=(-0.5LR-0.5LR)", - "__HA_IBIT__=8", - "__FLT32_DIG__=6", - "__TQ_IBIT__=0", - "__FLT_EPSILON__=1.19209290e-7F", - "__GXX_WEAK__=1", - "__SHRT_WIDTH__=16", - "__USFRACT_IBIT__=0", - "__LDBL_MIN__=1.17549435e-38L", - "__FRACT_MIN__=(-0.5R-0.5R)", - "__AVR_SFR_OFFSET__=0x20", - "__DEC32_MAX__=9.999999E96DF", - "__cpp_threadsafe_static_init=200806", - "__DA_IBIT__=32", - "__INT32_MAX__=0x7fffffffL", - "__UQQ_FBIT__=8", - "__INT_WIDTH__=16", - "__SIZEOF_LONG__=4", - "__UACCUM_MAX__=0XFFFFFFFFP-16UK", - "__UINT16_C(c)=c ## U", - "__PTRDIFF_WIDTH__=16", - "__DECIMAL_DIG__=9", - "__LFRACT_EPSILON__=0x1P-31LR", - "__AVR_2_BYTE_PC__=1", - "__ULFRACT_MIN__=0.0ULR", - "__INTMAX_WIDTH__=64", - "__has_include_next(STR)=__has_include_next__(STR)", - "__BUILTIN_AVR_ULLRBITS=1", - "__LDBL_HAS_QUIET_NAN__=1", - "__ULACCUM_IBIT__=32", - "__UACCUM_EPSILON__=0x1P-16UK", - "__BUILTIN_AVR_SEI=1", - "__GNUC__=7", - "__ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-48ULLK", - "__cpp_delegating_constructors=200604", - "__HQ_IBIT__=0", - "__BUILTIN_AVR_SWAP=1", - "__FLT_HAS_DENORM__=1", - "__SIZEOF_LONG_DOUBLE__=4", - "__BIGGEST_ALIGNMENT__=1", - "__STDC_UTF_16__=1", - "__UINT24_MAX__=16777215UL", - "__BUILTIN_AVR_NOP=1", - "__GNUC_STDC_INLINE__=1", - "__DQ_IBIT__=0", - "__FLT32_HAS_INFINITY__=1", - "__DBL_MAX__=double(3.40282347e+38L)", - "__ULFRACT_IBIT__=0", - "__cpp_raw_strings=200710", - "__INT_FAST32_MAX__=0x7fffffffL", - "__DBL_HAS_INFINITY__=1", - "__INT64_MAX__=0x7fffffffffffffffLL", - "__ACCUM_IBIT__=16", - "__DEC32_MIN_EXP__=(-94)", - "__BUILTIN_AVR_UKBITS=1", - "__INTPTR_WIDTH__=16", - "__BUILTIN_AVR_FMULSU=1", - "__LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK", - "__INT_FAST16_TYPE__=int", - "__LDBL_HAS_DENORM__=1", - "__BUILTIN_AVR_BITSK=1", - "__BUILTIN_AVR_BITSR=1", - "__cplusplus=201402L", - "__cpp_ref_qualifiers=200710", - "__DEC128_MAX__=9.999999999999999999999999999999999E6144DL", - "__INT_LEAST32_MAX__=0x7fffffffL", - "__USING_SJLJ_EXCEPTIONS__=1", - "__DEC32_MIN__=1E-95DF", - "__ACCUM_MAX__=0X7FFFFFFFP-15K", - "__DEPRECATED=1", - "__cpp_rvalue_references=200610", - "__DBL_MAX_EXP__=128", - "__USACCUM_EPSILON__=0x1P-8UHK", - "__WCHAR_WIDTH__=16", - "__FLT32_MAX__=3.40282347e+38F32", - "__DEC128_EPSILON__=1E-33DL", - "__SFRACT_MAX__=0X7FP-7HR", - "__FRACT_IBIT__=0", - "__PTRDIFF_MAX__=0x7fff", - "__UACCUM_MIN__=0.0UK", - "__UACCUM_IBIT__=16", - "__BUILTIN_AVR_NOPS=1", - "__BUILTIN_AVR_WDR=1", - "__FLT32_HAS_QUIET_NAN__=1", - "__GNUG__=7", - "__LONG_LONG_MAX__=0x7fffffffffffffffLL", - "__SIZEOF_SIZE_T__=2", - "__ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK", - "__cpp_rvalue_reference=200610", - "__cpp_nsdmi=200809", - "__SIZEOF_WINT_T__=2", - "__LONG_LONG_WIDTH__=64", - "__cpp_initializer_lists=200806", - "__FLT32_MAX_EXP__=128", - "__SA_IBIT__=16", - "__ULLACCUM_MIN__=0.0ULLK", - "__BUILTIN_AVR_ROUNDUHK=1", - "__BUILTIN_AVR_ROUNDUHR=1", - "__cpp_hex_float=201603", - "__GXX_ABI_VERSION=1011", - "__INT24_MAX__=8388607L", - "__UTA_FBIT__=48", - "__FLT_MIN_EXP__=(-125)", - "__USFRACT_MAX__=0XFFP-8UHR", - "__UFRACT_IBIT__=0", - "__BUILTIN_AVR_ROUNDFX=1", - "__BUILTIN_AVR_ROUNDULK=1", - "__BUILTIN_AVR_ROUNDULR=1", - "__cpp_lambdas=200907", - "__BUILTIN_AVR_COUNTLSLLK=1", - "__BUILTIN_AVR_COUNTLSLLR=1", - "__BUILTIN_AVR_ROUNDHK=1", - "__INT_FAST64_TYPE__=long long int", - "__BUILTIN_AVR_ROUNDHR=1", - "__DBL_MIN__=double(1.17549435e-38L)", - "__BUILTIN_AVR_COUNTLSK=1", - "__BUILTIN_AVR_ROUNDLK=1", - "__BUILTIN_AVR_COUNTLSR=1", - "__BUILTIN_AVR_ROUNDLR=1", - "__LACCUM_MIN__=(-0X1P31LK-0X1P31LK)", - "__ULLACCUM_FBIT__=48", - "__BUILTIN_AVR_LKBITS=1", - "__ULLFRACT_EPSILON__=0x1P-64ULLR", - "__DEC128_MIN__=1E-6143DL", - "__REGISTER_PREFIX__", - "__UINT16_MAX__=0xffffU", - "__DBL_HAS_DENORM__=1", - "__BUILTIN_AVR_ULKBITS=1", - "__ACCUM_MIN__=(-0X1P15K-0X1P15K)", - "__AVR_ARCH__=2", - "__SQ_IBIT__=0", - "__FLT32_MIN__=1.17549435e-38F32", - "__UINT8_TYPE__=unsigned char", - "__BUILTIN_AVR_ROUNDUK=1", - "__BUILTIN_AVR_ROUNDUR=1", - "__UHA_FBIT__=8", - "__NO_INLINE__=1", - "__SFRACT_MIN__=(-0.5HR-0.5HR)", - "__UTQ_FBIT__=128", - "__FLT_MANT_DIG__=24", - "__LDBL_DECIMAL_DIG__=9", - "__VERSION__=\"7.3.0\"", - "__UINT64_C(c)=c ## ULL", - "__ULLFRACT_FBIT__=64", - "__cpp_unicode_characters=200704", - "__FRACT_EPSILON__=0x1P-15R", - "__ULACCUM_MIN__=0.0ULK", - "__UDA_FBIT__=32", - "__cpp_decltype_auto=201304", - "__LLACCUM_EPSILON__=0x1P-47LLK", - "__GCC_ATOMIC_INT_LOCK_FREE=1", - "__FLT32_MANT_DIG__=24", - "__BUILTIN_AVR_BITSUHK=1", - "__BUILTIN_AVR_BITSUHR=1", - "__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__", - "__USFRACT_MIN__=0.0UHR", - "__BUILTIN_AVR_BITSULK=1", - "__ULLACCUM_IBIT__=16", - "__BUILTIN_AVR_BITSULR=1", - "__UQQ_IBIT__=0", - "__BUILTIN_AVR_LLRBITS=1", - "__SCHAR_WIDTH__=8", - "__BUILTIN_AVR_BITSULLK=1", - "__BUILTIN_AVR_BITSULLR=1", - "__INT32_C(c)=c ## L", - "__DEC64_EPSILON__=1E-15DD", - "__ORDER_PDP_ENDIAN__=3412", - "__DEC128_MIN_EXP__=(-6142)", - "__UHQ_FBIT__=16", - "__LLACCUM_FBIT__=47", - "__FLT32_MAX_10_EXP__=38", - "__BUILTIN_AVR_ROUNDULLK=1", - "__BUILTIN_AVR_ROUNDULLR=1", - "__INT_FAST32_TYPE__=long int", - "__BUILTIN_AVR_HRBITS=1", - "__UINT_LEAST16_TYPE__=unsigned int", - "__BUILTIN_AVR_UHRBITS=1", - "__INT16_MAX__=0x7fff", - "__SIZE_TYPE__=unsigned int", - "__UINT64_MAX__=0xffffffffffffffffULL", - "__UDQ_FBIT__=64", - "__INT8_TYPE__=signed char", - "__cpp_digit_separators=201309", - "__ELF__=1", - "__ULFRACT_EPSILON__=0x1P-32ULR", - "__LLFRACT_FBIT__=63", - "__FLT_RADIX__=2", - "__INT_LEAST16_TYPE__=int", - "__BUILTIN_AVR_ABSFX=1", - "__LDBL_EPSILON__=1.19209290e-7L", - "__UINTMAX_C(c)=c ## ULL", - "__INT24_MIN__=(-__INT24_MAX__-1)", - "__SACCUM_MAX__=0X7FFFP-7HK", - "__BUILTIN_AVR_ABSHR=1", - "__SIG_ATOMIC_MAX__=0x7f", - "__GCC_ATOMIC_WCHAR_T_LOCK_FREE=1", - "__cpp_sized_deallocation=201309", - "__SIZEOF_PTRDIFF_T__=2", - "__AVR=1", - "__BUILTIN_AVR_ABSLK=1", - "__BUILTIN_AVR_ABSLR=1", - "__LACCUM_EPSILON__=0x1P-31LK", - "__DEC32_SUBNORMAL_MIN__=0.000001E-95DF", - "__INT_FAST16_MAX__=0x7fff", - "__UINT_FAST32_MAX__=0xffffffffUL", - "__UINT_LEAST64_TYPE__=long long unsigned int", - "__USACCUM_MAX__=0XFFFFP-8UHK", - "__SFRACT_EPSILON__=0x1P-7HR", - "__FLT_HAS_QUIET_NAN__=1", - "__FLT_MAX_10_EXP__=38", - "__LONG_MAX__=0x7fffffffL", - "__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL", - "__FLT_HAS_INFINITY__=1", - "__cpp_unicode_literals=200710", - "__USA_FBIT__=16", - "__UINT_FAST16_TYPE__=unsigned int", - "__DEC64_MAX__=9.999999999999999E384DD", - "__INT_FAST32_WIDTH__=32", - "__BUILTIN_AVR_RBITS=1", - "__CHAR16_TYPE__=unsigned int", - "__PRAGMA_REDEFINE_EXTNAME=1", - "__SIZE_WIDTH__=16", - "__INT_LEAST16_MAX__=0x7fff", - "__DEC64_MANT_DIG__=16", - "__UINT_LEAST32_MAX__=0xffffffffUL", - "__SACCUM_FBIT__=7", - "__FLT32_DENORM_MIN__=1.40129846e-45F32", - "__GCC_ATOMIC_LONG_LOCK_FREE=1", - "__SIG_ATOMIC_WIDTH__=8", - "__INT_LEAST64_TYPE__=long long int", - "__INT16_TYPE__=int", - "__INT_LEAST8_TYPE__=signed char", - "__SQ_FBIT__=31", - "__DEC32_MAX_EXP__=97", - "__INT_FAST8_MAX__=0x7f", - "__INTPTR_MAX__=0x7fff", - "__QQ_FBIT__=7", - "__cpp_range_based_for=200907", - "__UTA_IBIT__=16", - "__AVR_ERRATA_SKIP__=1", - "__FLT32_MIN_10_EXP__=(-37)", - "__LDBL_MANT_DIG__=24", - "__SFRACT_FBIT__=7", - "__SACCUM_MIN__=(-0X1P7HK-0X1P7HK)", - "__DBL_HAS_QUIET_NAN__=1", - "__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)", - "AVR=1", - "__BUILTIN_AVR_FMULS=1", - "__cpp_return_type_deduction=201304", - "__INTPTR_TYPE__=int", - "__UINT16_TYPE__=unsigned int", - "__WCHAR_TYPE__=int", - "__SIZEOF_FLOAT__=4", - "__AVR__=1", - "__BUILTIN_AVR_INSERT_BITS=1", - "__USQ_FBIT__=32", - "__UINTPTR_MAX__=0xffffU", - "__INT_FAST64_WIDTH__=64", - "__DEC64_MIN_EXP__=(-382)", - "__cpp_decltype=200707", - "__FLT32_DECIMAL_DIG__=9", - "__INT_FAST64_MAX__=0x7fffffffffffffffLL", - "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1", - "__FLT_DIG__=6", - "__UINT_FAST64_TYPE__=long long unsigned int", - "__BUILTIN_AVR_BITSHK=1", - "__BUILTIN_AVR_BITSHR=1", - "__INT_MAX__=0x7fff", - "__LACCUM_FBIT__=31", - "__USACCUM_MIN__=0.0UHK", - "__UHA_IBIT__=8", - "__INT64_TYPE__=long long int", - "__BUILTIN_AVR_BITSLK=1", - "__BUILTIN_AVR_BITSLR=1", - "__FLT_MAX_EXP__=128", - "__UTQ_IBIT__=0", - "__DBL_MANT_DIG__=24", - "__cpp_inheriting_constructors=201511", - "__BUILTIN_AVR_ULLKBITS=1", - "__INT_LEAST64_MAX__=0x7fffffffffffffffLL", - "__DEC64_MIN__=1E-383DD", - "__WINT_TYPE__=int", - "__UINT_LEAST32_TYPE__=long unsigned int", - "__SIZEOF_SHORT__=2", - "__ULLFRACT_IBIT__=0", - "__LDBL_MIN_EXP__=(-125)", - "__UDA_IBIT__=32", - "__WINT_WIDTH__=16", - "__INT_LEAST8_MAX__=0x7f", - "__LFRACT_FBIT__=31", - "__LDBL_MAX_10_EXP__=38", - "__ATOMIC_RELAXED=0", - "__DBL_EPSILON__=double(1.19209290e-7L)", - "__BUILTIN_AVR_BITSUK=1", - "__BUILTIN_AVR_BITSUR=1", - "__UINT8_C(c)=c", - "__INT_LEAST32_TYPE__=long int", - "__BUILTIN_AVR_URBITS=1", - "__SIZEOF_WCHAR_T__=2", - "__LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR", - "__TQ_FBIT__=127", - "__INT_FAST8_TYPE__=signed char", - "__ULLACCUM_EPSILON__=0x1P-48ULLK", - "__BUILTIN_AVR_ROUNDK=1", - "__BUILTIN_AVR_ROUNDR=1", - "__UHQ_IBIT__=0", - "__LLACCUM_IBIT__=16", - "__FLT32_EPSILON__=1.19209290e-7F32", - "__DBL_DECIMAL_DIG__=9", - "__STDC_UTF_32__=1", - "__INT_FAST8_WIDTH__=8", - "__DEC_EVAL_METHOD__=2", - "__TA_FBIT__=47", - "__UDQ_IBIT__=0", - "__ORDER_BIG_ENDIAN__=4321", - "__cpp_runtime_arrays=198712", - "__WITH_AVRLIBC__=1", - "__UINT64_TYPE__=long long unsigned int", - "__ACCUM_EPSILON__=0x1P-15K", - "__UINT32_C(c)=c ## UL", - "__BUILTIN_AVR_COUNTLSUHK=1", - "__INTMAX_MAX__=0x7fffffffffffffffLL", - "__cpp_alias_templates=200704", - "__BUILTIN_AVR_COUNTLSUHR=1", - "__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__", - "__FLT_DENORM_MIN__=1.40129846e-45F", - "__LLFRACT_IBIT__=0", - "__INT8_MAX__=0x7f", - "__LONG_WIDTH__=32", - "__UINT_FAST32_TYPE__=long unsigned int", - "__CHAR32_TYPE__=long unsigned int", - "__BUILTIN_AVR_COUNTLSULK=1", - "__BUILTIN_AVR_COUNTLSULR=1", - "__FLT_MAX__=3.40282347e+38F", - "__cpp_constexpr=201304", - "__USACCUM_FBIT__=8", - "__BUILTIN_AVR_COUNTLSFX=1", - "__INT32_TYPE__=long int", - "__SIZEOF_DOUBLE__=4", - "__FLT_MIN_10_EXP__=(-37)", - "__UFRACT_EPSILON__=0x1P-16UR", - "__INT_LEAST32_WIDTH__=32", - "__BUILTIN_AVR_COUNTLSHK=1", - "__BUILTIN_AVR_COUNTLSHR=1", - "__INTMAX_TYPE__=long long int", - "__BUILTIN_AVR_ABSLLK=1", - "__BUILTIN_AVR_ABSLLR=1", - "__DEC128_MAX_EXP__=6145", - "__AVR_HAVE_16BIT_SP__=1", - "__ATOMIC_CONSUME=1", - "__GNUC_MINOR__=3", - "__INT_FAST16_WIDTH__=16", - "__UINTMAX_MAX__=0xffffffffffffffffULL", - "__DEC32_MANT_DIG__=7", - "__HA_FBIT__=7", - "__BUILTIN_AVR_COUNTLSLK=1", - "__BUILTIN_AVR_COUNTLSLR=1", - "__BUILTIN_AVR_CLI=1", - "__DBL_MAX_10_EXP__=38", - "__LDBL_DENORM_MIN__=1.40129846e-45L", - "__INT16_C(c)=c", - "__cpp_generic_lambdas=201304", - "__STDC__=1", - "__PTRDIFF_TYPE__=int", - "__LLFRACT_MIN__=(-0.5LLR-0.5LLR)", - "__BUILTIN_AVR_LRBITS=1", - "__ATOMIC_SEQ_CST=5", - "__DA_FBIT__=31", - "__UINT32_TYPE__=long unsigned int", - "__BUILTIN_AVR_ROUNDLLK=1", - "__UINTPTR_TYPE__=unsigned int", - "__BUILTIN_AVR_ROUNDLLR=1", - "__USA_IBIT__=16", - "__BUILTIN_AVR_ULRBITS=1", - "__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD", - "__DEC128_MANT_DIG__=34", - "__LDBL_MIN_10_EXP__=(-37)", - "__BUILTIN_AVR_COUNTLSUK=1", - "__BUILTIN_AVR_COUNTLSUR=1", - "__SIZEOF_LONG_LONG__=8", - "__ULACCUM_EPSILON__=0x1P-32ULK", - "__cpp_user_defined_literals=200809", - "__SACCUM_IBIT__=8", - "__GCC_ATOMIC_LLONG_LOCK_FREE=1", - "__LDBL_DIG__=6", - "__FLT_DECIMAL_DIG__=9", - "__UINT_FAST16_MAX__=0xffffU", - "__GCC_ATOMIC_SHORT_LOCK_FREE=1", - "__BUILTIN_AVR_ABSHK=1", - "__BUILTIN_AVR_FLASH_SEGMENT=1", - "__INT_LEAST64_WIDTH__=64", - "__ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR", - "__UINT_FAST8_TYPE__=unsigned char", - "__USFRACT_EPSILON__=0x1P-8UHR", - "__ULACCUM_FBIT__=32", - "__QQ_IBIT__=0", - "__cpp_init_captures=201304", - "__ATOMIC_ACQ_REL=4", - "__ATOMIC_RELEASE=3", - "__BUILTIN_AVR_FMUL=1", - "USBCON" - ] - } - ] -} \ No newline at end of file From e33134a24e281f99fcb738a5e1f3f46b163c1b0c Mon Sep 17 00:00:00 2001 From: Graeme Harker Date: Tue, 1 Feb 2022 15:15:31 +0000 Subject: [PATCH 5/5] Added .vscode to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index e43b0f9..dbfbd18 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .DS_Store +.vscode +