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.
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.
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.
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.
- 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.
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]
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.
(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.
- 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
- 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.
- 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.
- 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
- 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.
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.
- 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.
- 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.
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
* 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.