User:RDBrown/AAC Morse



morAce appears to be immediately usable, ... if the Adafruit Feather was in stock. Thanks to Jim Lubin for pointing it out.
 * – ARM Cortex M4 1 MB of FLASH and 256KB of SRAM
 * This seems to use the same chip, so if the pinouts match, it might work since it is in stock.
 * This seems to use the same chip, so if the pinouts match, it might work since it is in stock.

The following is an attempt at the union of the Morse codes from Jim Lubin's list, EasyMorse (mostly the same) and the EZ Morse, tab separated. The JLE tag is for Jim Lubin/EasyMorse Mouse mode, EZN for EZ Morse Numeric Pad mode. The KEY_ values are from the Arduino Keyboard.h file mapping I think to the USB HID values. Where multiple keys must be sent, or another action taken, the list is enclosed in braces. The MOUSE_ & OPN_ values are yet to be enumerated. The leading 3-digit octal value encodes the Morse. Skip the most significant 1 bit, then the following bits are the Morse 0 for dot, 1 for dash, reading from the most significant down (left to right). This would seem to be the logical encoding, with octal being a bit easier to read than hex perhaps.

002	'e'	JLE	{MOUSE_REPEAT_OPN}	EZN	KEY_KP_1	"1 NumPad" 003	't'	JLE	{MOUSE_UP}	EZN	KEY_KP_2	"2 NumPad" 004	'i'	JLE	{MOUSE_LEFT}	 EZN	KEY_KP_4	"4 NumPad" 005	'a'	JLE	{MOUSE_LEFT_CLICK}	EZN	KEY_KP_3	"3 NumPad" 006	'n'	JLE	{MOUSE_LEFT_CLICK_HOLD_TOGGLE}	EZN	KEY_KP_5	"5 NumPad" 007	KEY_BACKSPACE	"Backspace" 1	{MOUSE_DOWN}	EZN	KEY_KP_6 "6_NumPad" 010	's'	JLE	{MOUSE_RIGHT}	EZN	KEY_KP_9	"9 NumPad" 011	'u'	JLE	{MOUSE_LEFT_DOUBLE_CLICK}	EZN	KEY_KP_8	"8 NumPad" 012	'r'	EZN	KEY_KP_ASTERISK	"* NumPad" 013	'w'	JLE	{MOUSE_RIGHT_CLICK}	EZN	KEY_KP_7	"7 NumPad" 014	'd'	JLE	{MOUSE_RIGHT_CLICK_HOLD_TOGGLE}	EZN	KEY_KP_0	"0 NumPad" 015	'k'	EZN	KEY_KP_SLASH	"/ NumPad" 016	'g'	EZN	KEY_KP_PLUS	"+ NumPad" 017	'o'	EZN	KEY_KP_MINUS	"- NumPad" 020	'h' 021	'v' 022	'f' 023	' '	"Space ␣"	JLE	{MOUSE_RIGHT_DOUBLE_CLICK}	!00C4 mouse-zoom-1 ..-- 024	'l' 025	KEY_RETURN	"Enter" 026	'p' 027	'j' 030	'b' 031	'x' 032	KEY_LEFT_CTRL	"Ctrl" 033	'y' 034	'z' 035	'q' 036	'c' 037	'm'	EZN	KEY_BACKSPACE	"Backspace" 040	'5' 041	'4' 042	{OPN_Win_Group}	EZ	KEY_KP_ENTER 043	'3' 044	{OPN_Repeat} 046	'{' 047	'2'	{MOUSE_ZOOM_8} 051	KEY_UP_ARROW	"↑" 052	KEY_RIGHT_ARROW	"Right Arrow →" 054	KEY_DOWN_ARROW	"↓" 056	'-' 057	'1' 060	'6' 061	'+' 063	'*' 064	KEY_INSERT	"Ins" 070	'7' 071	'}' 072	{KEY_LEFT_ALT,KEY_ESC}	"Alt-Esc" 073	KEY_LEFT_ALT	"Alt" 074	'8' 075	'=' 076	'9' 077	'0' 101	KEY_PAGE_UP	"Page_Up" 102	'|' 103	'/' 104	KEY_PAGE_DOWN	"Page_Down" 105	'%' 106	'"' 107	')' 110	'\'' 111	KEY_PAUSE	"Pause_Break" 114	'>' 116	'#' 117	'$' 120	'!' 124	KEY_LEFT_ARROW	"← Left Arrow" 127	{OPN_Toggle_Repeat} 130	'[' 134	'&' 136	':' 137	'.' 140	',' 141	';' 143	'^' 145	{OPN_Exit_Morse_Code} 147	']' 154	KEY_DELETE	"Del" 157	'?' 160	KEY_ESC	"Esc" 161	KEY_LEFT_SHIFT	"Shift" 163	'<' 164	KEY_SCROLL_LOCK	"Scroll Lock" 166	KEY_PRINT_SCREEN	"Print Screen" 167	'`' 170	'(' 171	'@' 172	{KEY_LEFT_SHIFT,KEY_TAB}	"Shift-Tab (BackTab)" 173	'~' 174	'\\' 175	'_' 176	KEY_CAPS_LOCK	"Caps_Lock" 200	KEY_HOME	"Home" 210	KEY_END	"End" 224	{KEY_LEFT_CTRL,KEY_LEFT_ALT,KEY_DELETE}	"Ctl-Alt-Del" 237	KEY_F12	"F12" 277	KEY_F11	"F11" 322	{KEY_LEFT_CTRL,KEY_LEFT_ALT,KEY_DELETE}	"Ctrl-Alt-Del" 340	KEY_F5	"F5" 341	KEY_F4	"F4" 343	KEY_F3	"F3" 347	KEY_F2	"F2" 350	{KEY_LEFT_ALT,' '}	"Alt-Space" 351	{KEY_LEFT_ALT,KEY_UP_ARROW}	"Alt ↑ Up Arrow" 354	Alt-Down_*_Repeat_Off 355	{KEY_LEFT_ALT,KEY_TAB}	"Alt-Tab" 357	KEY_F1	"F1" 360	KEY_F6	"F6" 361	KEY_NUM_LOCK	"Num_Lock" EZ	{KEY_NUM_LOCK,OPN_TOGGLE_EZ_NUM} 372	{KEY_LEFT_SHIFT,KEY_RIGHT_ARROW}	"Shift Right Arrow →" 373	{KEY_LEFT_SHIFT,KEY_DOWN_ARROW}	"Shift ↓ Down Arrow" 374	KEY_F8	"F8" 375	KEY_RIGHT_CTRL	"Ctrl" 376	KEY_F9	"F9" 377	KEY_F10	"F10" 720	{KEY_LEFT_ALT,'-'}	"Alt-Minus" 764	{KEY_LEFT_SHIFT,KEY_LEFT_ARROW}	"Shift ← Left Arrow" 774	KEY_LEFT_GUI	"⊞ Windows/Apple" 775	{KEY_LEFT_CTRL,KEY_TAB}	"Ctrl-Tab"

With this binary encoding all Morse strings from 1 to 7 long would be encoded in 8 bits (2..255 == 0377 == 0xFF) In the above list of 120 codes, the last 4 are 8 term Morse strings (from EZ Morse). Only 24 of the 32 5 term strings are used, 39 of the 64 6 term strings and 26 of 128 7 term strings. So there's room for expansion.

Suggestions — common Trigrams and Bigrams. Just running the Morse for the letters together will work for some of these, which may be useful for 3-switch Morse users by saving some key presses. ie. 'and' 'ing', 'fo' 'ion'. Collisions for 'the' and 'tio' mean you could choose 'tthe' and 'ttio' perhaps. The Cut and Paste, etc control sequences may be worth providing, but the Ctrl Morse and the 'c','v','x','z' characters are all 4 Morse term strings. But using 'rc', 'rv', 'rx', 'rz' would give 7 term Morse, with some mnemonic value. But so would CTRL and two-bit values with 00=ZZ, .. 11=V (corresponding to position on a normal keyboard.

Jim Lubin's tables seem to have 023 (normally space), duplicated as MOUSE_RIGHT_DOUBLE_CLICK and MOUSE_USE_ZOOM_1. It might be worthwhile to have MOUSE_ZOOM_IN and MOUSE_ZOOM_OUT to halve/double the mouse movement increment. 'dm' and 'hm' seem to be free to use, and somewhat mnemonic. More mnemonic choices collide. Middle-click (== chorded left-right mouse click) may be worth adding. And perhaps some easy way to act like a scroll wheel.

Advice would be welcome, since I'm neither disabled nor a Morse user.

Jon Oxer's Open Hardware "Mini Open Adaptive Controller" and Vik Olliver's MicroWriter both use an AVR ATMega32U4 microcontroller as used in Arduiono, which don't support Bluetooth. The 32kB of Flash and 2.5kB SRAM would support Morse. The new ESP8685 supports Bluetooth and is much more capable. A version of the "Mini Open Adaptive Controller" based on it, perhaps with an upgraded display could be quite capable. The MicroWriter code could also run on it ... just plug in the needed 6 microswitches.

Thoughts Needs to show mode. — on display or LEDs (Normal morse, Mouse mode, Numeric pad if used) Bluetooth & USB connection (HID Like Bluetooth) Bluetooth Profiles Expose flash as USB @
 * Human Interface Device Profile (HID) (Needs security)
 * Object Push Profile (OPP) using OBject EXchange
 * Send/Receive file over Bluetooth (ie VCard or other Calendar)
 * [|File Transfer Profile (FTP)]

Show small files as QR-Code on display