1
0
Fork 0
forked from forks/qmk_firmware
qmk_firmware/platforms/avr
Takeshi ISHII 80405c6d96
Fix platforms/avr/drivers/ws2812.c (#17043)
* Fix platforms/avr/drivers/ws2812.c

`platforms/avr/drivers/ws2812.c` has been changed to use `DDRx_ADDRESS()` and `PORTx_ADDRESS()` instead of `_SFR_IO8()` in #8646.  To use them, `#include <pin_defs.h>` is required.

 ## Error Log
* create new keyboard
```shell
bash-3.2$ qmk new-keyboard
Ψ Generating a new QMK keyboard directory

Name Your Keyboard Project
For more infomation, see:
https://docs.qmk.fm/#/hardware_keyboard_guidelines?id=naming-your-keyboardproject

Keyboard Name? ws2812_test
..................................
     36. WB32F3G71
Please enter your choice:  [12]
Ψ Created a new keyboard called ws2812_test.
Ψ To start working on things, `cd` into keyboards/ws2812_test,
Ψ or open the directory in your preferred text editor.
Ψ And build with qmk compile -kb ws2812_test -km default.
```
* Enable RGBLIGHT.
```shell
bash-3.2$ echo RGBLIGHT_ENABLE=yes >> ./keyboards/ws2812_test/rules.mk
bash-3.2$ echo '#define RGB_DI_PIN B1' >> ./keyboards/ws2812_test/config.h
bash-3.2$ echo '#define RGBLED_NUM 6' >> ./keyboards/ws2812_test/config.h
```
* Compile
```shell
bash-3.2$ make ws2812_test:default

QMK Firmware 0.16.9
Making ws2812_test with keymap default

avr-gcc (Homebrew AVR GCC 8.4.0_2) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

.....................
Compiling: quantum/process_keycode/process_rgb.c                                                    [OK]
Compiling: platforms/avr/drivers/ws2812.c                                                          platforms/avr/drivers/ws2812.c: In function 'ws2812_setleds':
platforms/avr/drivers/ws2812.c:40:5: error: implicit declaration of function 'DDRx_ADDRESS' [-Werror=implicit-function-declaration]
     DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(RGB_DI_PIN);
     ^~~~~~~~~~~~
In file included from <command-line>:
./keyboards/ws2812_test/config.h:21:20: error: 'B1' undeclared (first use in this function); did you mean 'PB1'?
 #define RGB_DI_PIN B1
                    ^~
platforms/avr/drivers/ws2812.c:40:18: note: in expansion of macro 'RGB_DI_PIN'
     DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(RGB_DI_PIN);
                  ^~~~~~~~~~
./keyboards/ws2812_test/config.h:21:20: note: each undeclared identifier is reported only once for each function it appears in
 #define RGB_DI_PIN B1
                    ^~
platforms/avr/drivers/ws2812.c:40:18: note: in expansion of macro 'RGB_DI_PIN'
     DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(RGB_DI_PIN);
                  ^~~~~~~~~~
platforms/avr/drivers/ws2812.c:42:47: error: implicit declaration of function 'PORTx_ADDRESS' [-Werror=implicit-function-declaration]
     uint8_t masklo = ~(pinmask(RGB_DI_PIN)) & PORTx_ADDRESS(RGB_DI_PIN);
                                               ^~~~~~~~~~~~~
In file included from /usr/local/Cellar/avr-gcc@8/8.4.0_2/avr/include/avr/io.h:99,
                 from /usr/local/Cellar/avr-gcc@8/8.4.0_2/avr/include/avr/interrupt.h:38,
                 from platforms/avr/drivers/ws2812.c:24:
platforms/avr/drivers/ws2812.c: In function 'ws2812_sendarray_mask':
./keyboards/ws2812_test/config.h:21:20: error: 'B1' undeclared (first use in this function); did you mean 'PB1'?
 #define RGB_DI_PIN B1
                    ^~
platforms/avr/drivers/ws2812.c:167:69: note: in expansion of macro 'RGB_DI_PIN'
                      : "r"(curbyte), "I"(_SFR_IO_ADDR(PORTx_ADDRESS(RGB_DI_PIN))), "r"(maskhi), "r"(masklo));
                                                                     ^~~~~~~~~~
cc1: all warnings being treated as errors
 [ERRORS]
 |
 |
 |
make[1]: *** [.build/obj_ws2812_test_default/ws2812.o] Error 1
make: *** [ws2812_test:default] Error 1
Make finished with errors
```

* change include order
2022-05-18 20:58:03 +01:00
..
bootloaders Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
drivers Fix platforms/avr/drivers/ws2812.c (#17043) 2022-05-18 20:58:03 +01:00
_print.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
_timer.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
_wait.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
atomic_util.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
bootloader_size.c Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
flash.mk Align usbasp flashing behaviour (#14928) 2021-10-24 14:18:57 +01:00
gpio.h Add open-drain GPIO support. (#15282) 2021-12-27 11:52:10 +11:00
pin_defs.h Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
platform.c Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
platform.mk Followup to #16220, more test error output. (#16221) 2022-02-05 12:51:23 +11:00
platform_deps.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
printf.c Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
printf.mk Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
sleep_led.c Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
suspend.c Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
timer.c Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
timer_avr.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
xprintf.h Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00
xprintf.S Move tmk_core/common/<plat> (#13918) 2021-11-19 10:41:02 -08:00