Commit Graph

184 Commits

Author SHA1 Message Date
9ee1282019 LED Matrix: rename LED_DRIVER_LED_COUNT to DRIVER_LED_TOTAL (#11858) 2021-02-15 11:55:13 +11:00
627ceebef3 ws2812: Fix number of nops for AVR at 8 MHz (#9559)
* ws2812: Fix number of nops for AVR at 8 MHz

When trying to calculate the number of nops for AVR running at 8 MHz,
the value of `w3` is expected to be negative; however, because `F_CPU`
is defined in tmk_core/avr.mk with the `UL` suffix, the preprocessor
performs its calculations using `unsigned long`, getting a very large
positive number instead of the expected negative number; this then
results in generating code with a huge number of nops.  Fix the broken
calculations by performing a comparison before subtraction, so that the
unsigned number wraparound does not occur.

The keyboard which triggers the problem is `handwired/promethium`; the
buggy code silently compiles, but the resulting timings would be
completely wrong.

* ws2812: Clean up the code after the 8 MHz fix

Remove old code which was unsuccessfully trying to clamp negative w1, w2
and w3 values to 0, and set w1_nops, w2_nops and w3_nops directly.
2021-02-09 08:33:04 +11:00
3d70766327 Add BGR byte order for WS2812 drivers (#11562)
* add byte order bgr for ws2812

* update docs for driver change

* Update ws2812_driver.md

* Update docs/ws2812_driver.md

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2021-01-16 08:42:30 +11:00
f3ac792c09 Align ChibiOS spi_master behaviour with AVR (#11404)
* Align ChibiOS spi_master behaviour with AVR

* Rollback `spi_transmit()` and `spi_receive()` to preserve DMA
2021-01-03 14:53:53 +11:00
1b7b72c0e9 Ensure single newline at EOF for core files (#11310) 2020-12-28 04:36:32 +11:00
1d1d5da43f Change include guards in tmk_core/ and drivers/ to pragma once (#11240) 2020-12-26 15:56:11 +11:00
a9f7d4dccc Various compilation fixes for avr-gcc 10 (#9269) 2020-12-18 17:28:29 +00:00
6ea4b06f9f Run cformat and dos2unix manually (#11235) 2020-12-17 14:06:30 +00:00
9366ed7282 Normalise include statements in keyboard code (#11185) 2020-12-16 14:27:23 +11:00
70f40339c2 Add i2c 24LC64 eeprom (#11200)
* add 24LC64 eeprom

* docs update

* Update docs/eeprom_driver.md

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2020-12-14 05:50:50 +11:00
501f2fdef1 Normalise include statements in core code (#11153)
* Normalise include statements in core code

* Missed one
2020-12-11 13:45:24 +11:00
6b1f96dca8 Update is31fl3731-simple (#7610)
* update simple

* Update is31fl3731-simple.c
2020-12-06 17:18:02 +11:00
c59f87a5d7 add definition WS2812_BYTE_ORDER to fix RGB LED issues (#10184)
* add define for WS2812B-2020 to fix RGB issues

* update driver doc

* add WS2812_BYTE_ORDER definition to correct RGB byte issues

* add definition variable thing

* update per PR request

* update per PR reqs

* update per PR request

* inital changes

* move defines to color.h and add rgbw incase

* Update docs/ws2812_driver.md

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: hineybush <hineybushkeyboards@gmail.com>
Co-authored-by: Xelus22 <preyas22@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-12-06 17:15:48 +11:00
cba76092eb Added OLED Initialized checks (#11129) 2020-12-06 12:53:47 +11:00
5cf70f3993 Fix error handling in SPI master. (#11122)
Co-authored-by: Dimitris Papavasiliou <dpapavas@gmail.com>
2020-12-06 12:50:02 +11:00
c66df16644 2020 November 28 Breaking Changes Update (#11053)
* Branch point for 2020 November 28 Breaking Change                                                

* Remove matrix_col_t to allow MATRIX_ROWS > 32 (#10183)                                           

* Add support for soft serial to ATmega32U2 (#10204)                                               

* Change MIDI velocity implementation to allow direct control of velocity value (#9940)            

* Add ability to build a subset of all keyboards based on platform.                                

* Actually use eeprom_driver_init().                                                               

* Make bootloader_jump weak for ChibiOS. (#10417)                                                  

* Joystick 16-bit support (#10439)                                                                 

* Per-encoder resolutions (#10259)                                                                 

* Share button state from mousekey to pointing_device (#10179)                                     

* Add hotfix for chibios keyboards not wake (#10088)                                               

* Add advanced/efficient RGB Matrix Indicators (#8564)                                             

* Naming change.                                                                                   

* Support for STM32 GPIOF,G,H,I,J,K (#10206)                                                       

* Add milc as a dependency and remove the installed milc (#10563)                                  

* ChibiOS upgrade: early init conversions (#10214)                                                 

* ChibiOS upgrade: configuration file migrator (#9952)                                             

* Haptic and solenoid cleanup (#9700)                                                              

* XD75 cleanup (#10524)                                                                            

* OLED display update interval support (#10388)                                                    

* Add definition based on currently-selected serial driver. (#10716)                               

* New feature: Retro Tapping per key (#10622)                                                      

* Allow for modification of output RGB values when using rgblight/rgb_matrix. (#10638)             

* Add housekeeping task callbacks so that keyboards/keymaps are capable of executing code for each main loop iteration. (#10530)

* Rescale both ChibiOS and AVR backlighting.                                                       

* Reduce Helix keyboard build variation (#8669)                                                    

* Minor change to behavior allowing display updates to continue between task ticks (#10750)        

* Some GPIO manipulations in matrix.c change to atomic. (#10491)                                   

* qmk cformat (#10767)                                                                             

* [Keyboard] Update the Speedo firmware for v3.0 (#10657)                                          

* Maartenwut/Maarten namechange to evyd13/Evy (#10274)                                             

* [quantum] combine repeated lines of code (#10837)                                                

* Add step sequencer feature (#9703)                                                               

* aeboards/ext65 refactor (#10820)                                                                 

* Refactor xelus/dawn60 for Rev2 later (#10584)                                                    

* add DEBUG_MATRIX_SCAN_RATE_ENABLE to common_features.mk (#10824)                                 

* [Core] Added `add_oneshot_mods` & `del_oneshot_mods` (#10549)                                    

* update chibios os usb for the otg driver (#8893)                                                 

* Remove HD44780 References, Part 4 (#10735)                                                       

* [Keyboard] Add Valor FRL TKL (+refactor) (#10512)                                                

* Fix cursor position bug in oled_write_raw functions (#10800)                                     

* Fixup version.h writing when using SKIP_VERSION=yes (#10972)                                     

* Allow for certain code in the codebase assuming length of string. (#10974)                       

* Add AT90USB support for serial.c (#10706)                                                        

* Auto shift: support repeats and early registration (#9826)                                       

* Rename ledmatrix.h to match .c file (#7949)                                                      

* Split RGB_MATRIX_ENABLE into _ENABLE and _DRIVER (#10231)                                        

* Split LED_MATRIX_ENABLE into _ENABLE and _DRIVER (#10840)                                        

* Merge point for 2020 Nov 28 Breaking Change
2020-11-28 12:02:18 -08:00
3afe0ea9b9 ST7565 tidyup (#10907) 2020-11-26 23:44:17 +11:00
5cecc1ea1e Add brightness level API to OLED driver (#10772)
* Add brightness level API to OLED driver

* Set default brightness to 255
2020-10-29 00:12:50 -07:00
5e9c078c78 [Core] IS31FL3731/36/37 bug fix (#10612)
* 3731 bug fix

* bug fixes
2020-10-23 18:08:17 +11:00
459ccb681f OLED driver fixes (#10377)
* Fix dirtying in oled_write_pixel()

Set the dirty bit for the block only if oled_write_pixel() actually
changed the buffer state.  Without this check oled_write_pixel() could
not be used inside the oled_task_user() code using the “redraw always”
style, because the blocks touched by oled_write_pixel() would always
appear dirty, and oled_render() would not proceed beyond the first such
dirty block.

* Fix oled_write_pixel() with 90/270 degree rotation

Use oled_rotation_width instead of OLED_DISPLAY_WIDTH, so that a rotated
display would be handled correctly.

* Fix compilation with custom OLED_BLOCK_COUNT and OLED_BLOCK_SIZE

Some OLED sizes (e.g., 64×48) may require a nonstandard value of
OLED_BLOCK_COUNT.  The documentation says that this value may be
redefined in config.h, but actually trying to redefine it caused a
compile error, because the macro was redefined in oled_driver.c.
Make the OLED_BLOCK_COUNT definition in oled_driver.c respect any
user override, and do the same for OLED_BLOCK_SIZE just in case.

* Fix handling of out-of-range bits in oled_dirty

If a custom OLED_BLOCK_COUNT value is specified, some bits in oled_dirty
may not correspond to existing blocks; however, if those bits are set
somewhere (e.g., by code with sets oled_dirty to ~0 or even -1),
oled_render() would try to handle them and could access memory beyond
oled_buffer and perform hardware operations with out of range values.
Prevent this by masking off unused bits in oled_render(), and also avoid
setting those bits in other functions.

* Fix potentially wrong dirtying in oled_write_char()

oled_write_char() tried to mark the position just beyond the written
character as dirty; use (OLED_FONT_WIDTH - 1) to dirty the last position
still belonging to the character instead.

* Fix `#define OLED_BLOCK_TYPE uint32_t` on AVR

Using uint32_t as OLED_BLOCK_TYPE did not work properly on AVR, because
some bit shifts were performed using 16-bit int.  Add explicit casts to
OLED_BLOCK_TYPE to those shifts.
2020-10-04 05:44:19 +11:00
1fe7743af8 IS31FL3741 driver fixup (#10519)
* Fix issue with data transfer of CS1_SW7 to CS18_SW7.

* Fix issue with handling of scaling register buffer's dirty flag.

* Remove unused extern declaration.

* Compaction of struct is31_led utilizing bit fields.
2020-10-04 05:15:44 +11:00
c23667608c Add OLED driver function to determine if the screen is currently on (#10382) 2020-09-21 18:39:50 -07:00
e9b3a12c6e Fix ssd1306 compilation on avr-gcc 10 (#9267) 2020-09-17 10:42:24 +10:00
25e93b4b67 format code according to conventions [skip ci] 2020-09-03 11:25:14 +00:00
2f26e14dc6 Update ISSI3741 (#9912)
* [Driver] bugfix reset the scaling register flag to FALSE

* Update drivers/issi/is31fl3741.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Add CS & SW defines for ISSI3741

* Make IS31FL3741 control register update clearer

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Jumail Mundekkat <mundekkat@hotmail.com>
2020-09-03 20:37:04 +10:00
a3db72df72 format code according to conventions [skip ci] 2020-08-29 22:57:48 +00:00
15df82cdf3 Fix DMA stream ID calculation in ws2812_pwm (#10008)
Some STM32 chips have STM32_DMA1_STREAM1 as the first DMA stream, others
(F4xx, F7xx, H7xx) have STM32_DMA1_STREAM0.  Instead of those names, use
STM32_DMA_STREAM(0), which should always give the first stm32_dma_stream_t
structure in the DMA streams array, so that the stream ID would be
calculated correctly.
2020-08-29 14:30:02 -07:00
fa6cf85727 Add a method to read the OLED display buffer from user space (#8777)
* Adding extern and declaration

* Change to mediated buffer read

* Adding raw byte read

* Restore write raw... D'Oh

* Working struct return

* Pack that struct

* Remove conditional packing and add example to docs

* Cleanup tab/spaces

* Update docs/feature_oled_driver.md

Prettify formatting

* Update drivers/oled/oled_driver.h

Prettify formatting
2020-08-29 14:30:02 -07:00
d4be07dad3 Hid joystick interface (#4226)
* add support for hid gamepad interface
add documentation for HID joystick
Add joystick_task to read analog axes values even when no key is pressed or release. update doc
Update docs/feature_joystick.md
Manage pin setup and read to maintain matrix scan after analog read

* Incorporates patches and changes to HID reporting

There are some patches provided by @a-chol incorporated on this commit,
and also some changes I made to the HID Report structure.

The most interesting is the one dealing with number of buttons: Linux
doesn't seem to care, but Windows requires the HID structure to be byte
aligned (that's in the spec). So if one declares 8/16/32... buttons they
should not have any issues, but this is what happens when you have 9
buttons:

```
 bits |0|1|2|3|4|5|6|7|
      |*|*|*|*|*|*|*|*| axis 0 (report size 8)
      |*|*|*|*|*|*|*|*| ...
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*| axis 6
      |*|*|*|*|*|*|*|*| first 8 buttons (report size 1)
      |*| | | | | | | | last of 9 buttons, not aligned
```

So for that I added a conditonal that will add a number of reports with
size 1 to make sure it aligns to the next multiple of 8. Those reports
send dummy inputs that don't do anything aside from aligning the data.

Tested on Linux, Windows 10 and Street Fighter (where the joystick is
recognized as direct-input)

* Add save and restore of each pin used in reading joystick (AVR).
Allow output pin to be JS_VIRTUAL_AXIS if the axis is connected to Vcc
instead of an output pin from the MCU.

Fix joystick report id

Fix broken v-usb hid joystick interface. Make it more resilient to unusual settings (none multiple of eight button count, 0 buttons or 0 axes)

Correct adc reading for multiple axes. Piecewise range conversion for uncentered raw value range. Input, output and ground pin configuration per axis.

Documentation fixes

* Fix port addressing for joystick analog read

* The other required set of changes
As per the PR, the changes still holding it up.
Add onekey for testing.
Fix ARM builds.
Fix device descriptor when either axes or buttons is zero.
Add compile-time check for at least one axis or button.
Move definition to try to fix conflict.
PR review comments.
qmk cformat

* avoid float functions to compute range mapping for axis adc reading

* Remove V-USB support for now. Updated docs accordingly.

* Update tmk_core/protocol/lufa/lufa.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add support for joystick adc reading for stm32 MCUs. Fix joystick hid report sending for chibios

* Fix HID joystick report sending for ChibiOS.
Add one analog axis to the onekey:joystick keymap.
Fix pin state save and restore during joystick analog read for STM32
MCUs.

* Update tmk_core/protocol/chibios/usb_main.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/lufa/lufa.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add missing mcuconf.h and halconf.h to onekey:joystick keymap.
Add suggested fixes from PR.

* Switch saveState and restoreState signature to use pin_t type.
onekey:joystick : add a second axis, virtual and programmatically animated.

* Update docs/feature_joystick.md

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update docs/feature_joystick.md

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add PR corrections

* Remove halconf.h and mcuconf.h from onekey keymaps

* Change ADC_PIN to A0

Co-authored-by: achol <allecooll@hotmail.com>
Co-authored-by: José Júnior <jose.junior@gmail.com>
Co-authored-by: a-chol <achol@notamail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-08-29 14:30:02 -07:00
c6b7a0d386 Add support for DMAMUX-capable MCU configuration with WS2812 PWM driver. (#9471) 2020-08-29 14:30:02 -07:00
e7434c874b Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
385d49cc39 Initial work for consolidation of ChibiOS platform files (#8327)
* Initial work for consolidation of board files and default ChibiOS configs.

* Migrate F401/F411 black pills for testing.

* Add early init bootloader jump flag.

* Add support for I2C in order to use i2c_scanner keymap.

* Add F401/F411 HSE bypass to get things booting.

* Exempt "hooked" ChibiOS conf files from updater script.

* Fix up ordering for bootloader_defs file check.

* Match previous $(KEYBOARD_PATHS) value for Proton-C, updated for all board configs.
2020-08-29 14:30:02 -07:00
d91987ab9a Enable OLED support for Teensy 3.2/LC (#7591)
* I2C_TIMEOUT is not defined on arm teensy

* Work round teensy having different ChibiOS config options

* Stash OLED conf files

* update comment

* update comment

* Remove stm32 alias to allow teensy alt mode
2020-07-26 07:50:56 +10:00
92d0a71af7 OLED driver function to set pixels (#9713)
* Add a function to set individual pixels

* Add documentation for oled_write_pixel

* use smaller data type for oled_write_pixel

* Fix boundary check edge case

* Update oled_write_pixel doc

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2020-07-16 15:48:04 +10:00
fe744eb1ad [Driver] bugfix reset the scaling register flag to FALSE (#9507)
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-07-06 22:38:41 +10:00
3d6d899666 qmk cformat (#9500) 2020-06-22 11:21:48 +10:00
d9eae3ef03 Support IS31FL3741 and IS31FL3741A. (#9201) 2020-06-20 14:49:15 +10:00
8b572de523 format code according to conventions [skip ci] 2020-06-20 03:37:04 +00:00
18e561b82c Fix incorrect delay when setting WS2812 (and similar) leds (#9302)
* Fix incorrect delay when setting WS2812 (and similar) leds

* Add documentation for WS2812_DELAY_MICROSECONDS

* Remove improper cast to uint8_t

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Remove unneeded cast to uint8_t and correct math

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* microseconds -> µs

Co-authored-by: Ryan <fauxpark@gmail.com>

* Make documentation better match the spec sheet.

Co-authored-by: Ryan <fauxpark@gmail.com>

* Rename macro to match spec sheet

* Further correction to the delay maths for the SPI case.

Co-authored-by: Joel Challis <git@zvecr.com>

* Move ws2812_common.h to the drivers directory

* Revert "Further correction to the delay maths for the SPI case."

This reverts commit e61b56a2cfc7dfec9992a7a3af92afa50e5b8ec0.

* Remove ws2812_setleds_pin(); consolidate ws2812.h

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2020-06-20 12:59:28 +10:00
c785148445 STM32 WS2812 Open Drain Configuration (#9414)
* update docs stm32 only and applies  to all 3 driver
* cformat
2020-06-20 08:35:32 +10:00
7aa4cc9603 adds support for the atmega328 (#9043)
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-06-10 22:23:11 +01:00
ac447d8acb ISSI driver compile error fix (#9169) 2020-05-27 01:18:13 +01:00
e4823aadec Fix capitalisation of "GitHub" (#9184) 2020-05-25 19:43:14 -07:00
883dd2df80 Fix i2c EEPROM compile issue when Console is enabled (#9186)
* Fix i2c EEPROM compile issue when Console is enabled

* Only use if both console and debugging is enabled
2020-05-24 23:02:13 +01:00
2ac3a51d71 Fix SPI EEPROM compile issue when Console is enabled (#9193) 2020-05-24 23:02:00 +01:00
b95979560c Initial arm serial partially based on old lets split code 2020-05-21 18:04:30 +01:00
65150984bd ARM split - Add uart half duplex transport support (#7987)
* ARM split - Add uart half duplex transport support

* Fix for f103

* initial full duplex pass

* partially remove full duplex

* Correct speeds within driver docs

Co-authored-by: Nick Brassel <nick@tzarc.org>

Co-authored-by: Nick Brassel <nick@tzarc.org>
2020-05-21 18:00:21 +01:00
54b04d9665 Add SPI 25xx EEPROM support. (#8780) 2020-05-19 10:34:00 +10:00
8ca4ed9a98 Fix off by one error with oled_write_raw_P (#9045) 2020-05-10 04:14:07 +01:00
16a15c1cfc QMK-ify some GPIO macros (#8315) 2020-04-30 16:24:47 +10:00