Commit Graph

86 Commits

Author SHA1 Message Date
Joel Spadin f946dc6893 feat(kscan): Improve matrix debouncing
Switched the GPIO matrix driver to debouncing using a simple integrator
algorithm. Whenever a key is pressed, we now scan at a rate controlled
by debounce-scan-period-ms (default 1 ms) until all keys are released,
then return to either waiting for an interrupt or polling more slowly.

The timers for key press and release can now be controlled separately,
so debounce-period is deprecated in favor of debounce-press-ms and
debounce-release-ms. Global Kconfig options
ZMK_KSCAN_DEBOUNCE_PRESS_MS and ZMK_KSCAN_DEBOUNCE_RELEASE_MS are also
added to make these easier to set.

Added documentation for debouncing options.
2021-10-26 23:52:13 -04:00
Pete Johanson c9a671d8d5 fix(kscan): Allow composite driver to handle missing children.
For split keyboards using an IO expander over TRRS/i2c, if the
right half isn't connected, we should be able to gracefully
fallback to the left side still working.
2021-09-14 20:48:28 -04:00
Pete Johanson 647110e5e5 feat(drivers): Add mcp23017 driver based on upstream mcp23s17 one.
* Upstream Zephyr has in progress driver, so doing this locally here,
  until we can move over to that driver.
2021-09-14 20:48:28 -04:00
Joel Spadin 82cb762698 refactor(kscan): Demacroify GPIO matrix driver
Refactored the GPIO matrix kscan driver so that only the data and config
structures are defined in the foreach macro. Functionality is unchanged
except for the addition of DT properties to adjust polling speed.

This should make it easier to add other enhancements later, like
improved and customizable debounce behavior.
2021-09-08 14:34:28 -04:00
Darryldh a124eb9f9e feat(display): IL0323 driver for EPD displays.
* Basic driver, using the GD7965 driver as a basis, since the ICs
  are very similar.
2021-08-24 22:15:42 -04:00
Joel Spadin a6de43e665 feat: Add nrf VDDH battery driver
Added a driver which uses the nRF52's ADC channel on the VDDH pin to
read the battery voltage when using high voltage mode.
2021-07-24 23:39:13 -05:00
Pete Johanson 2a69f31eb0 refactor(core): Move away from deprecated DT API.
* Move to `DEVICE_DT_INST_DEFINE` everywhere.

See: https://docs.zephyrproject.org/2.5.0/releases/release-notes-2.5.html#deprecated-in-this-release
PR: https://github.com/zmkfirmware/zmk/pull/736
2021-07-17 17:04:25 -04:00
Jay Greco f3bb90f9e1
fix(kscan): Fix nibble demux scan errors on encoder row
+ Add a 1us sleep to let the column selection settle in order to avoid spurious keypresses when row capacitance is high (like on the encoder row)
2021-06-08 20:59:35 -04:00
Pete Johanson 27c89e69c1 fix(kscan): Proper direct wire warning message. 2021-03-15 00:39:29 -04:00
Okke Formsma c01243d1c6 fix(logging): remove unnecessary newline 2021-03-10 18:08:22 -05:00
Pete Johanson 0f9fff7554 Fix the label for the GPIO kscan driver. 2021-02-27 14:32:42 -05:00
jrhrsmit e40ca1eb7c
fix(power): Add support for capacitors on ADC for BVD
Add a little delay so any capacitors connected to the ADC for the BVD can charge up when using power_gpios

Co-authored-by: Jasper Smit <jrhrsmit@gmail.com>
2021-02-04 07:56:27 -05:00
Pete Johanson 6c7ab0ce53 refactor(kscan): Fix polling of GPIO matrices.
* Add easier macros for conditional polling/interrupt code.
* Properly continue polling on intervals, without extra
  enable/disable code for pins that is superfluous when not trying to
  deal with interupts firing.
* Fix to allow multiple GPIO drivers when doing splits w/ IO expanders
2021-02-02 14:04:10 -05:00
Pete Johanson 2f352788c1 refactor(kscan): Remove explicit default n from kscan configs.
* Actually allow defaulting yes in other places.
2021-02-02 14:04:10 -05:00
innovaker 61893e453b
refactor(app): format with prettier (#563)
prettier --write .

PR: #563
2021-01-01 22:55:52 -05:00
innovaker 842aa5a842 refactor: replace filename hyphens with underscores
Aligns *.h and *.c to underscore naming convention.

These were kept (with warnings) for backwards compatibility with external boards/shields:
- kscan-mock.h
- matrix-transform.h
They should be removed in the future.

PR: #523
2020-12-28 01:15:35 -05:00
innovaker f7d9d52221 refactor(app): replace `void` with `const struct device *dev` in ISR CBs
See: https://docs.zephyrproject.org/latest/releases/release-notes-2.4.html
PR: #467
2020-12-14 12:41:25 -05:00
innovaker 00ca0d2f1c refactor(app): replace `struct device *` with `const struct device *`
Replaced with RegExp: /(?<!const )(struct device \*)/g

See: https://docs.zephyrproject.org/latest/releases/release-notes-2.4.html
PR: #467
2020-12-14 12:41:25 -05:00
innovaker 1411092a7b refactor(app): replace `driver_data` with `data`
See: https://docs.zephyrproject.org/latest/releases/release-notes-2.4.html
PR: #467
2020-12-14 12:41:25 -05:00
innovaker 3d7376d2e5 refactor(app): replace `config_info` with `config`
See: https://docs.zephyrproject.org/latest/releases/release-notes-2.4.html
PR: #467
2020-12-14 12:41:25 -05:00
innovaker bac1f17cf6 refactor(app): replace Zephyr integer types with C99 integer types
u8_t → uint8_t
u16_t → uint16_t
u32_t → uint32_t
u64_t → uint64_t
s8_t → int8_t
s16_t → int16_t
s32_t → int32_t
s64_t → int64_t

Prerequisite for #223
See: https://github.com/zephyrproject-rtos/zephyr/releases/tag/zephyr-v2.4.0
PR: #467
2020-12-14 12:41:25 -05:00
Pete Johanson e6a27b15c1 fix(kscan): Fix building kscan for tests. 2020-12-08 22:20:12 -05:00
Pete Johanson ca38894e07 fix(drivers): Remove conditional from directories. 2020-12-04 16:25:32 -05:00
innovaker 8d9ae1fdf3 refactor: Align drivers with Zephyr file system conventions
PR: #400
2020-12-03 21:06:01 -05:00
Pete Johanson e0fede4aa5 refactor(kscan): Use PORT events for direct driver
* Switch interrupt configuration so nRF52 uses
  PORT events for lower power use, and wake
  from deep sleep.
* Closes #272
2020-12-02 16:46:05 -05:00
4pplet 924a598920 Updated function calls with missing reference. GPIO missing.
Updated function calls with missing reference. GPIO missing.

To my understanding:
DT_INST_GPIO_PIN() should be called instead if DT_INST_PIN()
DT_INST_GPIO_FLAGS() should be called instead if DT_INST_GPIO_FLAGS()

Current implementation does not compile when using control pin.
2020-11-29 21:12:26 -05:00
innovaker 67a6646cd7 chore: add copyright to core Kconfig 2020-11-20 22:25:28 -05:00
innovaker 1c8321566a fix(drivers): rename module.yaml to module.yml
module.yaml is not a valid module filename.

See Zephyr `scripts/zephyr_module.py`
2020-11-20 22:23:20 -05:00
Nick 8779563896 fix(bvd): Add SENSOR_CHAN_ALL support 2020-11-01 23:00:54 -05:00
Jay Greco 8a98212a02 Update demux kscan driver as per PR feedback
- Remove kscan_gpio_irq_callback
- Remove kscan_gpio_irq_callback_handler
- Remove irq_callbacks
+ Add TODO noting timer and sleep state interactions
2020-10-27 12:44:59 -07:00
Jay Greco 1522c91d73 Add new kscan_gpio_demux driver
+ zmk,kscan_gpio_demux is now a compatible kscan option
+ kscan_gpio_demux is based heavily off of the implementation of
kscan_gpio_matrix, modified to address cols using an n-to-1
demultiplexer chip instead of discrete IO
+ Added zmk,kscan_gpio_demux.yaml file
* modified CMakeLists to include new source files
2020-10-27 18:58:58 +00:00
Nick a008731103 Implement Kconfig and enhance error checks 2020-10-26 16:01:57 -05:00
Nick 63007fb6c1 fix: clang-format 2020-10-24 18:54:56 -05:00
Nick adb07926b1 Remove newlib dep 2020-10-24 18:52:34 -05:00
Nick a67a8cd3b8 Check if fetch channel is supported 2020-10-23 22:37:44 -05:00
Nick 6047415b1c Fix build for boards without voltage divider 2020-10-23 01:19:47 -05:00
Nick Winans 70ffcca3b4
Merge branch 'main' into bluetooth/battery-reporting 2020-10-23 00:55:50 -05:00
Nick 162c6b77db clang-format and add missing defconfig values 2020-10-23 00:50:39 -05:00
Nick 3082455aec Refactor driver to use Sensor API 2020-10-23 00:45:59 -05:00
Nuxiom 1c0c02e097
Reformatted according to clang-format lint 2020-10-11 17:51:06 +11:00
Nuxiom 78cb6c8b21
Fix kscan_gpio_irq_callback_handler_##n conditional macro 2020-10-11 17:33:07 +11:00
Pete Johanson 12b9a37005
Merge pull request #211 from petejohanson/core/keymap-port-event-exploration
Use PORT events for kscan matrix interrupts, add option for deep sleep.
2020-10-06 17:32:35 -04:00
Pete Johanson a7496ab064 feat(power): Initial deep sleep work.
* New ZMK_SLEEP Kconfig symbol to enable the functionality.
* Switch to PORT events that allows wake from deep sleep.
* Initial basic power management policy, with idle ms,
  and ignoring deep sleep if we detect a USB connection.
2020-10-06 17:24:36 -04:00
Pete Johanson 9be566603e feat(kscan): Use PORT events for kscan matrix interrupts
* Lower power usage compared to regular interrupts on nrf52.
2020-10-04 22:03:21 -04:00
Joel Spadin 4121b07f7f fix(kscan): fix direct GPIO when using interrupts
Fixed initializing interrupts for direct GPIO when
CONFIG_ZMK_KSCAN_DIRECT_POLLING is not enabled. IS_ENABLED() is needed to map
the possibly-undefined value to 0 or 1 so COND_CODE_0() and COND_CODE_1() work.
2020-10-04 14:07:20 -05:00
Joel Spadin f6f8abe055 fix(ec11): allow more than one encoder
Fixes "device.h:101:11: error: redefinition of '__device_ec11'" in firmware that
has more than one encoder.
2020-10-03 14:05:05 -05:00
Pete Johanson 028dfae92e chore: Fix remaining formatting issues. 2020-10-01 11:43:00 -04:00
Pete Johanson e993378b2a chore: Fix some accidental formatting issues. 2020-10-01 11:24:57 -04:00
Jason Chestnut c2a861c0e6 Modify preprocessor directives to use basic #if !defined() rather than Zephyr macros where appropriate. 2020-09-28 08:24:51 -04:00
jason 9392c4f9ff Fix preprocessor flag issues for pull request. 2020-09-27 21:27:30 -04:00