Commit Graph

175 Commits

Author SHA1 Message Date
Dave
304022ce93 Add cmake templates for keymap setup files 2021-11-28 15:34:32 -06:00
Dave
07ff09720b Fix library-related indirection bug
Accessing library functions via function pointer seems to cause a reset.
Still investigating the cause.

- compile keymaps subdir as part of main src cmakefile, rather than as a
separate library.

- rather than setup table of function pointers and using an indirection
in the main code, set up a jump table (switch).  This is cleaner.
2021-11-28 15:28:03 -06:00
Dave
e2c2f56429 Fix extra indirection 2021-11-27 23:28:33 -06:00
Dave
52527265c0 Remove arch_init from main. 2021-11-27 23:26:47 -06:00
Dave
56d9c52edb Removed unused declaration 2021-11-27 23:26:09 -06:00
Dave
f70a6006e1 Remove redundant reset code
keymaps_init calls select, which sets the index to 0 and resets the
keymaps.
2021-11-27 23:19:16 -06:00
Dave
836d0c4a4f Initialze buffers before other subsystems
Other subsystems may want to use buffers for output, e.g., for status
and debug.
2021-11-27 23:16:51 -06:00
Dave
3e6c82830e Update comment do reflect correct DIPswitch row 2021-11-22 16:46:18 -06:00
Dave
c2fc6288da Bump version to 1.5.1 for bugfix 2021-11-08 22:47:31 -06:00
Dave
f8a314d0ca BUGFIX: 328P OUT2 output was changing OUT1
This appears to have been a cut-paste typo in the asdf_arch_out2_set() function
in asdf_arch_atmega328p.c.  The port was set to OUT2, but the bit was OUT1.
2021-11-08 22:36:09 -06:00
Dave
ebe9344c82 Clean up keymap init routine
- replace asdf_keymaps_clear() with asdf_keymaps_reset() which does the
  clear, and also resets hooks and virtual devices for the keymap
2021-09-21 21:02:37 -05:00
Dave
fc22f5be53 Fixed comment 2021-09-21 20:59:00 -05:00
Dave
123e345b6e Fix subscript on Sol map
- Change from 4 to 2, since only 3 maps for now.
2021-09-21 16:33:56 -05:00
Dave
8fa6f3f648 Fix c compile flags.
C Flags set in src and test directories were not getting set because
they were assigned to C_FLAGS, which is ignored. Changed to CFLAGS,
which is used by cmake to set default c compilation options.
2021-08-25 11:46:23 -05:00
Dave
8acb6085eb fixed C FLAGS in newmaps
C compiler flags were ignored because they were assigned to C_FLAGS
var, which is ignored.  Changed to CFLAGS.
2021-08-25 10:53:11 -05:00
Dave
63805800af firmware now compiles without errors
test suite passes
have not yet tested firmware
2021-05-19 13:32:23 -05:00
David Fenyes
23dd38b488 Fix test/CmakeLists.txt so tests compile.
Apparently some file pollution resulted in a successful compile that couldn't be
reprodued from a fresh git clone.  Fixed file copying and include paths so
compile works.  All tests pass.
2021-03-08 12:27:53 -06:00
Dave
1f2f420de0 Cleaned up generation of keymap table and NUM_KEYMAPS definition
Toward #23 and #27
2021-03-07 23:22:05 -06:00
Dave
b0c01bb0ef newmaps passes all tests with cmake build. 2021-03-07 20:56:34 -06:00
Dave
8310259cc7 Progress toward building new keymap scheme with cmake
- keymap files (c,h) are in src/Keymaps
- keymap files are added to the keymap library in src/Keymaps/CMakeLists.txt
- keymaps for the build are listed, along with positions, in /keymap_lists.cmake
- cmake generates a keymap jump table from the keymap lib and list
- tests mostly passing.  Keymap structure for testing will be used as the model
  for the app keymaps.
2021-03-07 20:38:40 -06:00
Dave
3a854d97f2 Get tests to pass with CMake build system
progress on issues #23 (new mechanism to add keymaps) and #27 (Cmake build)
2021-03-05 01:17:33 -06:00
Dave
a95a8ddb8d Remove redundant NUM_ROWS and NUM_COLS definition from test keymap 2021-03-05 01:00:40 -06:00
Dave
8088c0e157 Convert more keymaps to new scheme (untested)
- Replace asdf_keymap_defs_xxx.h files with asdf_keymap_xxx.[c,h] modules
- add _clang_format in keymaps directory
2021-03-05 01:00:40 -06:00
Dave
952e425986 New map scheme passes all tests. (Issue #25) 2021-03-05 01:00:40 -06:00
Dave
b688f1c56f Get virtual devices in new maps scheme to pass tests
Remove initialization from data structure.

Replace the previous virtual_init() with a virtual_init() that initializes the
data structures to a default state

Create virtual_sync() function to push the state of virtual devices to the
physical outputs.  Moved from the previous virtual_init() function.

The virtual device table is now built by direct calls to virtual_add() from the
setup function.

Toward issue [#23]
2021-03-05 01:00:39 -06:00
Dave
bcde21f3a8 Get keymap tests to pass (issues [#23] and [#25])
Clean compile of asdf_keymaps.c/h and tests

Clean up keymap pointer notation

Reduce number of keymaps to 16, matching number of DIP switches allocated for
keymap selection.
2021-03-05 01:00:19 -06:00
Dave
14ad7c4cc2 More keymap updates toward [#23] amd [#25]
App code now compiles clean, but test code still needs to be updated to set up
the test keymaps.  So, no passing tests yet.
2021-11-30 13:11:48 -06:00
David Fenyes
daa6ff672f WIP - non-compiling keymap updates
Please see ARCHITECTURE-keymaps.org for general idea and TODO list.
2021-03-05 00:59:46 -06:00
David Fenyes
99610395fc Get new keymap scheme to pass keymap tests
Toward issue #23
2021-03-05 00:59:40 -06:00
Dave
d6edb15734 Rebase newmaps branch to master
(WARNING: WIP) Gathered Work-in-progress on alternate keymap defs

Exploratory branch.  Code is messy and untested.
Examining creating a module for each keymap rather than header file.
2021-03-05 00:58:06 -06:00
Dave
859a5e03d1 Change order of version and architecture in build target name 2021-03-04 22:44:09 -06:00
Dave
fb3627e3a2 Change firmware version to 1.5 (in anticipation of 2.0 release) 2021-03-04 22:36:46 -06:00
Dave
e9c38e3c51 Replace Makefiles with CMake build system
- CMake build process handles dependencies much more effectively

- Cleaner separation of test and binary builds

- permit co-existing test and multiple architecture builds

- add support for AVR from cmake-avr:
      https://github.com/mkleemann/cmake-avr

- new build process avoids creating files in the src directory
2021-03-04 22:27:15 -06:00
Dave
b37f8165a4 Allow settling time for each row output change. 2020-08-06 15:22:52 -05:00
Dave
217d78a798 Physical devices attached to virtual dev change synchronously
Apply virtual device functions to each associated physical device synchronously
instead of sequentially.
2020-08-06 15:20:19 -05:00
Dave
098ae72f5f atmega2560: Increase row output settling time from 2 usec to 4 usec 2020-08-06 15:18:40 -05:00
Dave
2a02f74171 Notation fixes for pointers to functions 2020-08-06 15:17:28 -05:00
Dave
11fd44c0cb BUGFIX: repeat apparatus not initiazized on keymap switch.
Added call to asdf_repeat_init() form asdf_keymaps_select_keymap()
2020-07-20 14:13:53 -05:00
Dave
01731197af Add spaces arounce concatenation operator 2020-06-17 01:03:18 -05:00
Dave
7b05b6eadb Bug fix: long delay should invoke _delay_ms(), not _delay_us(). 2020-05-23 23:28:00 -05:00
Dave
25d0693eda minor hook cleanups
- Rename asdf_hook_do() to asdf_hook_execute()
- asdf.c: Call asdf_hook_execute() for ASDF_HOOK_EACH_SCAN hook call in the scan
  routine, instead of getting then calling the function via hook_get()
- asdf.c: move the fetch of scan function hook outside the scan loop.
2020-05-19 17:58:58 -05:00
Dave
b3b2a93cdb Added dummy strobe-set functions to arch_test.c,h. 2020-05-15 14:52:18 -05:00
Dave
97890eaf63 Apply clang-format to files 2020-05-15 14:48:40 -05:00
Dave
c9cc1a76fe Add missing DIP switch definition file to repository. 2020-05-15 14:45:42 -05:00
Dave
7801a17f56 Add DIP switch select for strobe polarity and autorepeat
- arch-* files: replace private arch_strobe_init() function with public
arch_set_neg_strobe() and arch_set_pos_strobe() functions

- asdf.c,h: add ACTION hooks to set strobe polarity and enable/disable
autorepeat

- break out DIP switch definitions into a separate header file, included by each
keymap.  This ensures consistent DIP switch behavior across keymaps.
2020-05-15 14:42:06 -05:00
Dave
64437908f7 Remove asdf_arch.[ch], which are copied from Arch directory 2020-05-14 01:36:20 -05:00
dfnr2
dff329ea42 Delete asdf_keymap_defs.h
Not a source file.  This file is copied from keymaps directory during build.
2020-05-13 15:53:22 -05:00
Dave
cc2b86fe32 Fix virtual output actions in keymap 2020-05-13 15:51:45 -05:00
Dave
27b151964a More gitignore updates 2020-05-13 11:14:43 -05:00
Dave
1040a9b5d4 Swap /RESET and LOCAL lines to place them on the correct Sol-20 pins 2020-05-12 17:26:07 -05:00
Dave
3c1d050abb Move F_CPU to header file and clean up 2560 read_row() code 2020-05-12 17:09:49 -05:00
Dave
9b41a77ea4 Moved clock speed definition (F_CPU) to arch header file 2020-05-12 17:09:13 -05:00
Dave
1687d0ccfd Use single makefile rather than one makefile per architecture 2020-05-12 14:52:06 -05:00
Dave
97d38282ae Cleanup read_row(), and remove duplicated Makefile 2020-05-12 14:50:56 -05:00
Dave
e9630edb03 Fix atmega2560 read_row routine 2020-05-09 03:51:24 -05:00
Dave
346784bd6b Enable output hook in main() 2020-05-06 15:56:23 -05:00
Dave
de346a1e59 Merge branch 'hooks' 2020-05-05 15:10:40 -05:00
Dave
5baf20a16b Get hook functionality running and DIP switch cleanup 2020-05-05 15:05:54 -05:00
Dave
c7b8641d0d Define dipswitch row in arch-dependent module.
Because the DIP switch row is hardwired on the controller board.
2020-05-03 12:05:27 -05:00
Dave
4d8bc2a9be (Development branch) Added in code to implement fuction hooks 2020-05-01 16:39:21 -05:00
Dave
77de6c7205 Fix wrong keymap assignment for SHIFT LOCK & other cleanups 2020-04-27 17:13:53 -05:00
Dave
fe5cafd8ab Add test of activate triple assignment (no function specified) 2020-04-27 17:12:39 -05:00
Dave
ef7a7bf320 Clean up shift/shiftlock cruft
* firmware/asdf/src/asdf_modifiers.h: C
2020-04-27 17:11:36 -05:00
Dave
8e2a12b9d5 Initial cut of OSI 542 keyboard scan support 2020-04-27 17:10:13 -05:00
Dave
80cb50eb7e Clean up physical device structures
- include callback function in device table instead of separate array.
2020-04-26 14:11:55 -05:00
Dave
f2eead4db8 Updated README to reflect progress 2020-04-15 15:23:42 -05:00
Dave
ae5aa3316d Fix Makefile typo 2020-04-15 10:59:26 -05:00
Dave
e294f0164e Add architecture-dependent files for ATMega2560, adjust Makefiles 2020-04-15 09:45:07 -05:00
Dave
fc4cb08d29 Clean ups
- Added comment clarifications

- Moved repeate_state_t definition from asdf_repeat.h to asdf_repeat.c, since
  this type is only used internally.
2020-04-09 15:47:27 -05:00
Dave
47bc7c586f More comment cleanups and clarifications.
Rename some variables to clarify use
2020-04-08 15:00:43 -05:00
Dave
644efa7122 Test cleanups 2020-04-08 14:23:13 -05:00
Dave
30cd305fe6 Fix and clarify comments, add COPYING file 2020-04-08 12:41:53 -05:00
David Fenyes
b7f5f29f7b Put correct DIP switch row in sol keycap definitions for rev 2.3 interface 2020-03-21 14:47:54 -05:00
David Fenyes
e37da4e969 Reset modifier states when keymap is reset
- asdf.c: remove asdf_modifiers_init() from asdf_init().
- asdf_keymaps.c: add a call do asdf_modifiers_init()
  to asdf_keymaps_select_keymap()
2020-03-21 14:26:57 -05:00
David Fenyes
0ba921f2ce Added SOL-20 keymap
- Add Keymaps/asdf_keymap_defs_sol.h, and add the hooks in the master keymap

- asdf.h: Change start of ACTION codes to 0xA0, since SOL-20 uses codes from 0x80-0x9a

- asdf_ascii.h: Add named ASCII control codes to
2020-03-21 11:53:51 -05:00
David Fenyes
8f09246a4d Remove reference to special indicator functions (now virtual) 2020-03-20 14:43:18 -05:00
David Fenyes
dae4b8d322 Replaced the Virtual out pulse function with long and short pulse
- Replace V_PULSE with V_PULSE_LONG and V_PULSE_SHORT functions.

- replace the asdf_arch_pulse_delay() with asdf_arch_pulse_delay_short() and
asdf_arch_pulse_delay_long() functions.

- modify keymaps to use long and short pulses.

- long pulse is 50 ms.  Short pulse is 10 us.

- Added localizing prefix to keymap definitions to avoid conflicts.
2020-03-17 01:42:51 -05:00
David Fenyes
93349ed6e9 Add support for "hi-z when low" outputs
The apple 1 CLEAR input requires a high-impedance inactive state to avoid
conflict with the pin output of the 7404 at D12 (via CR4). So, to cover this
condition most generally, this patch changes the adds a Hi-Z when low physical
device for each output line, to complement the Hi-Z-when-high open collector
emulation. The nomenclature is changed from OUT*_OC (emulated open collector) to
OUT*_OPEN_HI and OUT*_OPEN_LO to indicate which condition gets the Hi-Z state.

- added the set() functions to the asdf_arch_atmega328p.[ch] files and applied
the above nomenclature.

- Added the set() functions to the asdf_physical.[ch] files and applied the
above nomenclature

- Modified the SCREEN_CLEAR device to PHYSICAL_OUT1_OPEN_LO in the apple2 and
ascii keymaps.

- Changed the RESET from PHYSICAL_OUT1_OC to PHYSICAL_OUT1_OPEN_HI in the apple2
and ascii keymaps.
2020-03-16 12:56:21 -05:00
David Fenyes
702ed71d60 add a clear-screen (ACTION_CLEAR) to the Shift-RESET combination. 2020-03-14 21:55:03 -05:00
Dave
68d2dfb115 Fix typo 2020-03-14 10:40:20 -05:00
Dave
04321da29c Fix typecast for key repeat timer, and some header fixes. 2020-03-14 10:37:43 -05:00
Dave
ed761974e6 Modifiers cleanup
- asdf_modifiers.[ch]: Replace asdf_modifier_shiftlock_activate() with
  asdf_modifier_shiftlock_on_activate() and
  asdf_modifier_shiftlock_toggle_activate().  Instead of a configurateion
  setting for shiftlock state to switch between SHIFTLOCK locks on, SHIFT turns
  off, vs SHIFTLOCK toggles, and SHIFT turns off, create two different
  SHIFTLOCK functions, one for each behavior, and allow the keymap to bind the
  desired function.

- asdf.h: replace ACTION_SHIFTLOCK with ACTION_SHIFTLOCK_ON and
  ACTION_SHIFTLOCK_TOGGLE.

- asdf.h: move start of ACTION codes from 0x80 to 0x90, since SOL-20 uses codes
  from 0x80-0x8f.

- asdf.c: test for ACTION code using (code > ASDF_ACTION) instead of (code &
  ASDF_ACTION), since ASDF_ACTION need not be a power of 2.

- asdf_modifiers.[ch] and other files: remove
  asdf_modifiers_shiftlock_deactivate() and
  asdf_modifiers_capslock_deactivate(), and any references to these functions
  since they are null functions anyway.
2020-03-14 00:11:29 -05:00
David Fenyes
aeaac665af Comment fixes for accurate descriptions. 2020-03-13 21:51:19 -05:00
David Fenyes
bd7b2167fb Removed extraneous definitions from Apple2 keymap file. 2020-03-13 00:51:31 -05:00
David Fenyes
abc462e711 Improved comments
- Added physical PCB key mapping for reference
- Make sure CAPSLOCK LED doesn't toggle in the ALL CAPS keymaps.
2020-03-13 00:48:05 -05:00
dfnr2
bf4bca76ed Update README.md 2020-03-13 00:09:08 -05:00
David Fenyes
8740ab3262 Comment and nomenclature cleanups
- fix and clarify various function header comments
- use consistent nomenclature for virtual layer.
2020-03-12 23:56:09 -05:00
David Fenyes
01008af937 Break out physical resource functions into asdf_physical.[ch]
- Split asdf_virtual.c into asdf_physical.c and asdf_virtual.c, moving the
functions that handle the physical resources to asdf_physical.c

- cleaned up nomenclature to be more consistent and less confusing.

- fixed keymap files and tests to use asdf_physical.c/h and new nomenclature.

- added asdf_physical.c to Makefiles.
2020-03-12 00:45:59 -05:00
David Fenyes
5c2235e79c Apple 2 map fixes
Set the lamp under the caps lock key (next to RETURN, not in apple2 layout) to
off.

Remove the right square bracket "]" from the apple 2 map.
2020-03-11 02:08:37 -05:00
David Fenyes
5bbdbe1c49 remove ACTION_RESET and ACTION_CLEAR
These are now implemented through virtual outputs, defined in the keymap files.
2020-03-11 01:54:41 -05:00
David Fenyes
72a84f0363 add safeguards for virtual device assignment
Disallow assignment of invalid virtual or real devices
Disallow assignment of a real devices that have already been assigned.
add unit test cases for virtual devices
2020-03-11 01:52:47 -05:00
David Fenyes
73e2760d94 Add more unit tests for virtual layer
- use macros to designate which keymaps are used to setup the tests.
2020-03-11 01:50:27 -05:00
David Fenyes
23237fae88 Added unit tests for virtual outputs. 2020-03-09 05:16:52 -05:00
David Fenyes
5a6a64dd55 Remove #include "asdf_actions.h" from asdf.c 2020-03-08 15:08:10 -05:00
David Fenyes
3940b96e0d Remove asdf_actions.[ch] files, no longer used. 2020-03-08 15:06:06 -05:00
David Fenyes
1b388bc591 Add virtual output device module (compiles without warning)
* Created test fixture for virtual outputs

* Added virtual output configuration to keymap definitions removed special
actions_send_reset() and actions_send_screenclear() functions, and replaced with
virtual output definitions.

* asdf_actions.c is removed from build.

* asdf_arch_atmega328p.c: added functions to set/clear each real output

* asdf_arch_atmega328p.c: added pulse_delay() function

* asdf_arch_test.c: added mock machinery to emulate outputs, test output
settings, and detect properly and improperly-formed pulses on the outputs.

* asdf_keymaps.c: allocate initialzer array. asdf_keymaps_select_keymap() calls
asdf_virtual_init() with initializer list for the keymap to set up the LEDS and
outputs every time a new keymap is selected.
2020-03-08 14:45:40 -05:00
David Fenyes
44a49afdae modify the SHIFTLOCK and CAPSLOCK led functions to use virtual LEDs 2020-03-06 13:46:27 -06:00
David Fenyes
cff7f6052a Changes for virtual LED and output mapping.
Rough first cut, have not yet tried to compile or test.
2020-03-06 13:24:03 -06:00
David Fenyes
d0648019d6 Add the Apple 2 keymaps. 2020-02-21 00:28:36 -06:00
David Fenyes
a598eaaee1 Add support for LEDs
- asdf_modifier.c: refactor CAPS LOCK setting and add LED setting
- asdf_arch_atmega328p.[ch]: add in LED definitions and functions
- add dummy asdf_arch_caps_led() function to arch files so test can compile.
2020-02-20 16:48:17 -06:00