Compare commits

...

4 Commits

Author SHA1 Message Date
invrtd 49e1ee859d
Merge 54bac09bd7 into ad7fbfef92 2025-12-04 11:09:57 -08:00
Artem ad7fbfef92
feat(ble): Use appearance set in the BT_DEVICE_APPEARANCE config (#3115)
Properly use the BT_DEVICE_APPEARANCE Zephyr symbol to advertise
the correct appearance, allowing overrides, for e.g. mice.

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-12-04 13:53:47 -05:00
invrtd 54bac09bd7
Merge branch 'zmkfirmware:main' into nice!view-180 2025-01-10 21:14:27 -08:00
invrtd 867c5556f0 feat(sheild): Nice!view Added flag to rotate custom widget 180 degrees 2024-12-24 22:36:30 -08:00
9 changed files with 218 additions and 6 deletions

View File

@ -25,6 +25,9 @@ config USB_DEVICE_PID
config USB_DEVICE_MANUFACTURER
default "ZMK Project"
config BT_DEVICE_APPEARANCE
default 961
config BT_DIS_PNP_VID
default 0x1D50

View File

@ -39,6 +39,10 @@ config NICE_VIEW_WIDGET_STATUS
config NICE_VIEW_WIDGET_INVERTED
bool "Invert custom status widget colors"
config NICE_VIEW_ROTATE_180
bool "Rotates screen 180"
if !ZMK_SPLIT || ZMK_SPLIT_ROLE_CENTRAL
config NICE_VIEW_WIDGET_STATUS

View File

@ -25,3 +25,11 @@ CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=y
CONFIG_ZMK_LV_FONT_DEFAULT_SMALL_MONTSERRAT_26=y
CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26=y
```
## Rotate screen
You can rotate the custom widget by 180 degrees To use add the following item to your `.conf` file:
```
CONFIG_NICE_VIEW_ROTATE_180=y
```

View File

@ -26,6 +26,90 @@ const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BALLOON u
0xff, 0xff, 0xff, 0xff, /*Color of index 1*/
#endif
#ifdef CONFIG_NICE_VIEW_ROTATE_180
0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xea, 0xaa, 0xab, 0xfe, 0xaf, 0xff, 0xff, 0x00, 0x00,
0x3f, 0xe6, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xf5, 0x57, 0x57, 0xff, 0x5d, 0xff,
0xff, 0x00, 0x00, 0x1f, 0xcf, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xae, 0xab,
0xff, 0xaf, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xcf, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd,
0xff, 0xd5, 0x55, 0xff, 0xdd, 0xff, 0xfc, 0x01, 0x54, 0x5f, 0xdf, 0xf0, 0xff, 0xff, 0xff,
0xff, 0xbf, 0xff, 0xff, 0xfe, 0xab, 0xff, 0xef, 0xff, 0xf0, 0x0a, 0xaa, 0xab, 0x9f, 0xf0,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfd, 0x55, 0xff, 0xdf, 0xff, 0xe5, 0x55, 0x55,
0x55, 0xbf, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0xaa, 0xff, 0xaf, 0xff,
0xf2, 0xaa, 0xaa, 0xaf, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x55,
0x7f, 0xdf, 0xff, 0xf8, 0x55, 0x55, 0x58, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xaa, 0xbe, 0xff, 0xff, 0xfe, 0x2a, 0xaa, 0xa8, 0x07, 0xf0, 0xff, 0xdf, 0xbf,
0xdf, 0xff, 0xff, 0xff, 0xfd, 0x55, 0x55, 0xdf, 0xff, 0xff, 0x15, 0x55, 0x5f, 0xe7, 0xf0,
0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xfa, 0xaa, 0xaf, 0xff, 0xfd, 0xff, 0x8a, 0xaa,
0xab, 0xe7, 0xb0, 0xff, 0xdf, 0xcf, 0xdf, 0xfe, 0xff, 0xff, 0xdd, 0x55, 0x57, 0xdf, 0xff,
0xff, 0xc5, 0x54, 0x56, 0x07, 0x70, 0xff, 0xef, 0xef, 0xbf, 0xfe, 0xbf, 0xff, 0xfa, 0xaa,
0xab, 0xbf, 0xff, 0xff, 0xc2, 0xa8, 0x2a, 0x07, 0xb0, 0xff, 0xdf, 0xdf, 0xdf, 0xfc, 0x7f,
0xff, 0xdd, 0x55, 0x55, 0xff, 0xff, 0xff, 0xe1, 0x14, 0x07, 0xe7, 0x70, 0xff, 0xef, 0xdf,
0xff, 0xf2, 0x7f, 0xff, 0xba, 0xaa, 0xab, 0xff, 0xff, 0xff, 0xe0, 0x8a, 0x0f, 0xe7, 0xb0,
0xff, 0xdf, 0xbf, 0xff, 0xfc, 0xff, 0xff, 0xdd, 0x55, 0x55, 0xff, 0xbf, 0xff, 0xc0, 0x45,
0x08, 0x07, 0xf0, 0xff, 0xbf, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xbe, 0xaa, 0xaa, 0xff, 0xdf,
0xf7, 0xc0, 0x22, 0x88, 0x07, 0xf0, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x55,
0x5d, 0x7f, 0xbf, 0xcf, 0x80, 0x01, 0x0f, 0xff, 0xf0, 0xff, 0xbf, 0xfe, 0x00, 0x03, 0xff,
0xff, 0xfe, 0xaa, 0xba, 0xbf, 0xff, 0xbf, 0x80, 0x02, 0x88, 0x27, 0xf0, 0xff, 0xdf, 0xf0,
0x00, 0x7c, 0x00, 0x03, 0xff, 0xd5, 0x5d, 0x7f, 0xff, 0xdf, 0x00, 0x01, 0x48, 0x27, 0xf0,
0xff, 0xff, 0xc0, 0x20, 0x1f, 0xff, 0xfc, 0x1f, 0xaa, 0xaa, 0xbf, 0xff, 0xef, 0x00, 0x00,
0xa9, 0x27, 0xe0, 0xff, 0xdf, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xf7, 0xd5, 0x55, 0x77, 0xff,
0xef, 0x00, 0x10, 0x49, 0x27, 0xd0, 0xff, 0xff, 0x20, 0x20, 0x03, 0xff, 0xff, 0xff, 0xaa,
0xaa, 0xbf, 0xfb, 0xf6, 0x00, 0x08, 0x28, 0x07, 0xa0, 0xff, 0xde, 0x54, 0x00, 0x00, 0x1f,
0xff, 0xff, 0xd5, 0x55, 0x7f, 0xff, 0xfc, 0x04, 0x04, 0x58, 0x07, 0xd0, 0xff, 0xfc, 0xa2,
0xaa, 0x01, 0x20, 0x7f, 0xff, 0xee, 0xaa, 0xbf, 0xff, 0xf8, 0x2a, 0x8a, 0x7f, 0xff, 0xa0,
0xff, 0xd9, 0x1f, 0x05, 0x40, 0xcf, 0x87, 0xff, 0xf7, 0x55, 0xdf, 0xff, 0xf0, 0x55, 0x44,
0x48, 0x07, 0xd0, 0xef, 0xfa, 0x7f, 0xaa, 0xa0, 0xf7, 0xfd, 0xff, 0xee, 0xaa, 0xff, 0xff,
0xc2, 0xaa, 0x82, 0x48, 0x07, 0xa0, 0xff, 0xf5, 0xff, 0xa5, 0x55, 0x79, 0xff, 0xff, 0xf7,
0x56, 0xff, 0xff, 0x81, 0x55, 0x41, 0x7f, 0xff, 0xd0, 0xef, 0xf3, 0xff, 0xaa, 0xaa, 0x1e,
0x7f, 0xff, 0xee, 0xab, 0x7f, 0xff, 0x00, 0x2a, 0xa2, 0x88, 0x1f, 0xe0, 0xdf, 0xf7, 0xe0,
0x00, 0x15, 0x60, 0x17, 0xff, 0xff, 0x56, 0xff, 0xfe, 0x00, 0x15, 0x41, 0x08, 0x1f, 0xf0,
0xef, 0xe6, 0x0a, 0xa8, 0x02, 0x3f, 0x80, 0x7f, 0xef, 0xae, 0xff, 0xfc, 0x00, 0x0a, 0xa2,
0x8f, 0xe7, 0xf0, 0xd7, 0xe1, 0x55, 0x24, 0x00, 0x00, 0xf5, 0x0f, 0xff, 0xd7, 0xff, 0xf1,
0x50, 0x05, 0x51, 0x4f, 0xe7, 0xf0, 0xef, 0xea, 0xaa, 0xaa, 0x00, 0x3d, 0x21, 0x73, 0xff,
0xef, 0xff, 0xe2, 0xaa, 0x02, 0xa0, 0xa8, 0x1f, 0xf0, 0xff, 0xe5, 0x55, 0x25, 0x00, 0x79,
0x05, 0x7e, 0xff, 0xd7, 0xff, 0xf8, 0x55, 0x05, 0x51, 0x48, 0x1f, 0xf0, 0xef, 0xea, 0xaa,
0xaa, 0x00, 0x3d, 0xe1, 0x7f, 0xff, 0xaf, 0xff, 0xfc, 0x2a, 0x82, 0xa8, 0xff, 0xff, 0xb0,
0xff, 0xe1, 0x55, 0x25, 0x00, 0x00, 0xf1, 0x7f, 0xff, 0x57, 0xff, 0xff, 0x85, 0x41, 0x51,
0x80, 0x67, 0x70, 0xef, 0xe6, 0x0a, 0xaa, 0x82, 0x3f, 0x80, 0x7f, 0xfe, 0xab, 0xff, 0xff,
0xe2, 0xa0, 0xa8, 0x80, 0x64, 0x70, 0xdf, 0xf7, 0xe0, 0x00, 0x15, 0x60, 0x17, 0x87, 0xff,
0x57, 0xdd, 0xff, 0xf1, 0x50, 0x54, 0xff, 0xfc, 0x70, 0xff, 0xf3, 0xff, 0xaf, 0xea, 0x1e,
0x7f, 0xf9, 0xfe, 0xab, 0xfe, 0xef, 0xf8, 0xa8, 0xa8, 0xa8, 0x24, 0x70, 0xff, 0xf5, 0xff,
0xaf, 0xd4, 0x79, 0xff, 0xff, 0x7f, 0x55, 0xfd, 0xf7, 0xfd, 0x54, 0x54, 0x58, 0x24, 0x70,
0xff, 0xfa, 0x7f, 0xaf, 0xe0, 0xe7, 0xff, 0xff, 0xff, 0xaa, 0xff, 0xff, 0xfc, 0xaa, 0x2a,
0xa9, 0x24, 0x30, 0xff, 0xf9, 0x1f, 0xaf, 0xc0, 0xdf, 0xff, 0xff, 0xff, 0xd5, 0x7f, 0xf7,
0xfe, 0x55, 0x15, 0x59, 0x24, 0x10, 0xff, 0xfc, 0xa3, 0xae, 0x21, 0x3f, 0xff, 0xff, 0xff,
0xaa, 0xbf, 0xef, 0xfe, 0x2a, 0xaa, 0xa8, 0x04, 0x00, 0xff, 0xfe, 0x54, 0x01, 0x50, 0x0f,
0xff, 0xf7, 0xff, 0xd5, 0x5f, 0xf7, 0xbf, 0x11, 0x15, 0x58, 0x04, 0x00, 0xff, 0xff, 0x2a,
0xaa, 0xa3, 0xf0, 0x0f, 0xfb, 0xff, 0xea, 0xaf, 0xff, 0xff, 0x28, 0x8a, 0xaf, 0xfc, 0x00,
0xff, 0xff, 0x95, 0x25, 0x4f, 0xff, 0xf3, 0xff, 0xff, 0xf7, 0x7f, 0xf7, 0xff, 0x84, 0x55,
0x09, 0x64, 0x00, 0xfb, 0xee, 0xca, 0xaa, 0x9f, 0xff, 0xfe, 0xfb, 0xdf, 0xfe, 0xff, 0xff,
0xfd, 0x82, 0xaa, 0x89, 0xa4, 0x20, 0xff, 0xf5, 0xf1, 0x24, 0x7f, 0xff, 0xff, 0xff, 0xe7,
0xf5, 0xff, 0xff, 0xfb, 0xc0, 0x55, 0x49, 0x64, 0x40, 0xfb, 0xf1, 0xfe, 0x00, 0x03, 0xff,
0xff, 0xfb, 0xdf, 0xeb, 0xff, 0xff, 0xfb, 0xe2, 0x2a, 0x89, 0xe4, 0xa0, 0xf7, 0xf3, 0xff,
0xff, 0xfc, 0x00, 0x7f, 0xf7, 0xf7, 0xf7, 0xff, 0xff, 0xf7, 0xf1, 0x15, 0x48, 0x06, 0x50,
0xfb, 0xe3, 0xff, 0xff, 0xff, 0xff, 0x83, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xf8, 0x2a,
0xa8, 0x06, 0xa0, 0xf7, 0xc9, 0xff, 0xff, 0x7f, 0xff, 0xfc, 0x7f, 0xf7, 0xd7, 0xdf, 0xef,
0xf3, 0xf8, 0x15, 0x7f, 0xfe, 0x50, 0xfb, 0xbf, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xdb, 0xfb,
0xaf, 0xef, 0xff, 0xfd, 0xf8, 0x0a, 0xc8, 0x07, 0xb0, 0xf5, 0xff, 0xfd, 0xff, 0xf7, 0xff,
0xff, 0xff, 0xf7, 0x5f, 0xdf, 0xff, 0xfd, 0xf0, 0x05, 0x48, 0x07, 0x50, 0xfb, 0xff, 0xff,
0xff, 0xbb, 0xff, 0xff, 0xff, 0xfb, 0xaf, 0xef, 0xff, 0xfe, 0xf0, 0x02, 0xff, 0xff, 0x30,
0xf5, 0xff, 0xfd, 0xff, 0x7d, 0xff, 0xff, 0xff, 0x77, 0x5f, 0xd7, 0xff, 0xff, 0xe0, 0x05,
0x58, 0x07, 0x10, 0xfb, 0xff, 0xfb, 0xff, 0xbb, 0xff, 0xfb, 0xfa, 0xbb, 0xaf, 0xef, 0xff,
0xff, 0xc0, 0x02, 0xa8, 0x05, 0xa0, 0xfd, 0xff, 0xfd, 0xff, 0xdb, 0xff, 0xff, 0xf5, 0x55,
0x5f, 0x57, 0xff, 0xff, 0x10, 0x01, 0x59, 0xff, 0x90, 0xfb, 0xff, 0xfb, 0xff, 0xbf, 0xef,
0xfb, 0xea, 0xba, 0xae, 0xaf, 0xff, 0xfc, 0x08, 0x00, 0xa9, 0xff, 0x80, 0xff, 0xff, 0xfd,
0xff, 0x5f, 0xff, 0xff, 0xf5, 0x55, 0x5f, 0x5f, 0xff, 0xf0, 0x05, 0x01, 0x58, 0x07, 0x80,
0xfb, 0xff, 0xfb, 0xfe, 0xbf, 0xef, 0xff, 0xea, 0xba, 0xae, 0xaf, 0xff, 0xc0, 0x02, 0x80,
0xa8, 0x07, 0x00, 0xff, 0xff, 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xd5, 0x55, 0x57, 0x5f, 0xff,
0x00, 0x01, 0x40, 0x4f, 0xff, 0x40, 0xfb, 0xfb, 0xff, 0xfe, 0xbf, 0xef, 0xff, 0xea, 0xba,
0xaf, 0xef, 0xff, 0x82, 0xa0, 0xa8, 0x0a, 0xaf, 0xa0, 0xf7, 0xfd, 0xfd, 0xff, 0xff, 0xd7,
0xfd, 0xd5, 0x75, 0x57, 0xff, 0xff, 0xc5, 0x50, 0x54, 0x15, 0x47, 0x50, 0xff, 0xff, 0xff,
0xff, 0xbf, 0xef, 0xea, 0xea, 0xba, 0xab, 0xef, 0xff, 0xf2, 0xaa, 0x2a, 0x0a, 0xa2, 0xa0,
0xff, 0xfd, 0xfd, 0xff, 0x7f, 0xd7, 0xd5, 0x55, 0x55, 0x7d, 0xff, 0xff, 0xf8, 0x55, 0x15,
0x15, 0x52, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xaa, 0xaa, 0xba, 0xff, 0xff, 0xff,
0xfe, 0x2a, 0x8a, 0x0a, 0xa8, 0xf0, 0xff, 0xfd, 0xff, 0xff, 0xf5, 0xd7, 0x55, 0x55, 0x75,
0xff, 0xff, 0xff, 0xff, 0x95, 0x45, 0x05, 0x57, 0xf0
#else
0xfe, 0xaa, 0x0a, 0x2a, 0x9f, 0xff, 0xff, 0xff, 0xfa, 0xea, 0xaa, 0xae, 0xba, 0xff, 0xff,
0xfb, 0xff, 0xf0, 0xf1, 0x55, 0x05, 0x15, 0x47, 0xff, 0xff, 0xff, 0xf5, 0xd5, 0x55, 0x5f,
0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xa4, 0xaa, 0x8a, 0x8a, 0xa1, 0xff, 0xff, 0xfb, 0xea,
@ -108,6 +192,7 @@ const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BALLOON u
0xff, 0xff, 0xf0, 0xff, 0x3f, 0x80, 0x00, 0x0f, 0xff, 0xfb, 0xaf, 0xfe, 0xae, 0xaa, 0xfb,
0xff, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0xf6, 0x7f, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0x57, 0xfd,
0x55, 0x55, 0x77, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0,
#endif
};
const lv_img_dsc_t balloon = {
@ -134,6 +219,90 @@ const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_MOUNTAIN
0xff, 0xff, 0xff, 0xff, /*Color of index 1*/
#endif
#ifdef CONFIG_NICE_VIEW_ROTATE_180
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0x02,
0xfe, 0x80, 0x00, 0x00, 0x00, 0x30, 0x80, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x60, 0x01,
0xc0, 0x00, 0x06, 0x3f, 0x40, 0x00, 0x00, 0x00, 0x10, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xff, 0xc7, 0xff, 0x07, 0xff, 0xfc, 0x17, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x98, 0x1f, 0xc0,
0x0f, 0xfe, 0x7f, 0x1c, 0x0f, 0xfe, 0x1f, 0xff, 0xfc, 0x01, 0xbf, 0xff, 0xff, 0xf0, 0x10,
0x90, 0x0f, 0xe0, 0x0f, 0xfe, 0xff, 0x38, 0x1f, 0xfc, 0x7f, 0xff, 0xf8, 0x00, 0x1b, 0xff,
0xff, 0xf0, 0x10, 0x90, 0x0f, 0xe0, 0x0f, 0xfc, 0xfe, 0x71, 0x3f, 0xf8, 0xff, 0xff, 0xf0,
0x00, 0x01, 0xbf, 0xff, 0xa0, 0x10, 0x90, 0x0f, 0xf0, 0x0f, 0xfd, 0xfc, 0xf3, 0xff, 0xf9,
0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xfe, 0x40, 0x10, 0x90, 0x0f, 0xf0, 0x1f, 0xfb, 0xf9,
0xe3, 0xff, 0xf1, 0xff, 0xf3, 0xc0, 0x00, 0x03, 0x7f, 0xff, 0xe0, 0x10, 0x90, 0x0f, 0xf8,
0x1f, 0xff, 0xf3, 0xc7, 0xff, 0xe3, 0xff, 0xc0, 0x00, 0x00, 0x37, 0xff, 0xff, 0xf0, 0x10,
0x90, 0x07, 0xf8, 0x9f, 0xff, 0xf7, 0x8f, 0xff, 0xe7, 0xff, 0x80, 0x00, 0x06, 0x7f, 0xff,
0xff, 0xf0, 0x10, 0x90, 0x07, 0xff, 0x9f, 0xff, 0xef, 0x1f, 0xff, 0xe7, 0xfe, 0x00, 0x00,
0x2f, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x90, 0x07, 0xff, 0xbf, 0xff, 0xdf, 0x3f, 0xff, 0xc7,
0xf8, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x90, 0x27, 0xff, 0xbf, 0xff, 0xfe,
0x3f, 0xff, 0xcf, 0xe0, 0x00, 0x00, 0x17, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x90, 0x67, 0xff,
0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xcf, 0xe0, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xf0, 0x10,
0x98, 0x73, 0xff, 0x3f, 0xff, 0xf8, 0xff, 0xff, 0x8f, 0xc0, 0x00, 0x00, 0x00, 0x6f, 0xff,
0xff, 0xf0, 0x10, 0x9e, 0xf3, 0xff, 0x7f, 0xff, 0xf1, 0xff, 0xff, 0x9f, 0x80, 0x00, 0x00,
0x00, 0x05, 0xff, 0xff, 0xf0, 0x10, 0x9f, 0xfb, 0xff, 0x7f, 0xff, 0xe3, 0xff, 0xff, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xe0, 0x10, 0x9f, 0xff, 0xff, 0x7f, 0xf1, 0x87,
0xff, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xff, 0xe0, 0x10, 0x9f, 0xff, 0xff,
0xff, 0xf0, 0x0f, 0xff, 0xfc, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x10,
0x97, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
0xaf, 0xc0, 0x10, 0x93, 0xff, 0xff, 0xff, 0xe6, 0x3f, 0xff, 0xf1, 0x98, 0x00, 0x00, 0x00,
0x00, 0x00, 0xdf, 0xd5, 0x80, 0x10, 0x91, 0xff, 0xff, 0xff, 0xe7, 0x7e, 0x3f, 0xe3, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x10, 0x90, 0xff, 0xff, 0xff, 0xe7, 0xfc,
0x19, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xff, 0xf8, 0x00, 0x10, 0x90, 0x7f, 0xff,
0xff, 0xc7, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xf8, 0x06, 0x10,
0x90, 0x7f, 0xff, 0xff, 0x8f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xf8, 0x0f, 0x90, 0x91, 0x3f, 0xff, 0xfe, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x7f, 0xff, 0xf0, 0x1f, 0xf0, 0x91, 0xdf, 0xff, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xf0, 0x1b, 0xf0, 0x93, 0xef, 0xff, 0xf8, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f, 0xe0, 0x37, 0xf0, 0x9f, 0xff, 0xff,
0xf1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc0, 0x3f, 0xf0,
0x9f, 0xff, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
0xc0, 0x74, 0xd0, 0x9f, 0xff, 0xff, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0x6b, 0x30, 0x9f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x30, 0xdf, 0xf0, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x9f, 0xff, 0xf0, 0x80, 0x0f, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xdf, 0x2f, 0xf0,
0x80, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff,
0xcf, 0xd5, 0x70, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0xff, 0xff, 0xef, 0xfb, 0xb0, 0x9f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xe5, 0xff, 0xf0, 0x9f, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7f, 0xff, 0xff, 0xe6, 0xbf, 0xf0, 0x9f, 0xff, 0xff,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xf3, 0x5a, 0xf0,
0x9f, 0x7d, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f, 0xff, 0xff, 0xff,
0xf1, 0xf3, 0xb0, 0x9c, 0xfb, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff,
0xff, 0xff, 0xff, 0xf1, 0xf1, 0x50, 0x91, 0xf7, 0xf9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xe1, 0xf0, 0x93, 0xe7, 0xf6, 0xff, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xff, 0xff, 0xf0, 0xe1, 0xf0, 0x97, 0xcf, 0xf6,
0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0xd0,
0x9f, 0x9f, 0xf9, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xff,
0xf0, 0xc0, 0xf0, 0x9f, 0x3f, 0xff, 0xdf, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0xff, 0xff, 0xf0, 0x80, 0xd0, 0x9e, 0x7f, 0xff, 0xef, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xe0, 0x00, 0xf0, 0x9c, 0x7f, 0x7f, 0xef, 0xff, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x70, 0x98, 0xfe, 0x7f,
0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xff, 0xe0, 0x00, 0x70,
0x91, 0xfe, 0xff, 0xe7, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff,
0xc0, 0x00, 0x70, 0xa3, 0xfc, 0xff, 0xe7, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaf, 0xff, 0xff, 0x80, 0x00, 0x30, 0xc7, 0x80, 0xff, 0xe7, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0xff, 0xff, 0xfe, 0x43, 0x00, 0x30, 0x87, 0x00, 0xff, 0xc3, 0xff, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xf7, 0x80, 0x30, 0x8f, 0x01, 0xff,
0xc3, 0xfb, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x30,
0x9f, 0x01, 0xff, 0xc1, 0xfd, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xff,
0xff, 0xc0, 0x10, 0xbc, 0x01, 0xef, 0xc1, 0xfc, 0xfe, 0x00, 0x00, 0x00, 0x03, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xc0, 0x10, 0xd8, 0x01, 0xef, 0xe1, 0xfe, 0x7f, 0x00, 0x00, 0x00,
0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x10, 0x90, 0x03, 0xcf, 0xe0, 0xfe, 0x7f,
0x80, 0x00, 0x01, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x10, 0x90, 0x03, 0xdf,
0xc0, 0xff, 0x3f, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x10,
0x90, 0x03, 0xdf, 0x80, 0xff, 0x3f, 0xc0, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xe0, 0x10, 0x90, 0x07, 0xdf, 0x80, 0x7f, 0x1f, 0xe0, 0x00, 0x00, 0x1b, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe0, 0x10, 0x90, 0x07, 0x9f, 0x80, 0x7e, 0x0f, 0xf0, 0x00, 0x00,
0x01, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x10, 0x98, 0x07, 0x9f, 0x00, 0x7c, 0x07,
0xf8, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x10, 0x8f, 0xff, 0x9f,
0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x10,
0x80, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x10, 0xc0, 0x00, 0x90, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07,
0x40, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
#else
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x90, 0x00, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xa0, 0x00, 0x00,
@ -216,6 +385,7 @@ const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_MOUNTAIN
0x00, 0x00, 0x10, 0xc0, 0x00, 0x00, 0x00, 0x17, 0xf4, 0x00, 0x00, 0xe0, 0x00, 0xc0, 0x00,
0x88, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
#endif
};
const lv_img_dsc_t mountain = {

View File

@ -107,17 +107,25 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_peripheral_status, struct peripheral_status_s
output_status_update_cb, get_state)
ZMK_SUBSCRIPTION(widget_peripheral_status, zmk_split_peripheral_status_changed);
#ifdef CONFIG_NICE_VIEW_ROTATE_180 // sets positions for default and flipped canvases
int art_pos = 20;
int top_pos = 0;
#else
int art_pos = 0;
int top_pos = 92;
#endif
int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) {
widget->obj = lv_obj_create(parent);
lv_obj_set_size(widget->obj, 160, 68);
lv_obj_t *top = lv_canvas_create(widget->obj);
lv_obj_align(top, LV_ALIGN_TOP_RIGHT, 0, 0);
lv_obj_align(top, LV_ALIGN_TOP_LEFT, top_pos, 0);
lv_canvas_set_buffer(top, widget->cbuf, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR);
lv_obj_t *art = lv_img_create(widget->obj);
bool random = sys_rand32_get() & 1;
lv_img_set_src(art, random ? &balloon : &mountain);
lv_obj_align(art, LV_ALIGN_TOP_LEFT, 0, 0);
lv_obj_align(art, LV_ALIGN_TOP_LEFT, art_pos, 0);
sys_slist_append(&widgets, &widget->node);
widget_battery_status_init();

View File

@ -329,17 +329,28 @@ ZMK_DISPLAY_WIDGET_LISTENER(widget_wpm_status, struct wpm_status_state, wpm_stat
wpm_status_get_state)
ZMK_SUBSCRIPTION(widget_wpm_status, zmk_wpm_state_changed);
#ifdef CONFIG_NICE_VIEW_ROTATE_180 // sets positions for default and flipped canvases
int top_pos = 0;
int middle_pos = 68;
int bottom_pos = 136;
#else
int top_pos = 92;
int middle_pos = 24;
int bottom_pos = -44;
#endif
int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) {
widget->obj = lv_obj_create(parent);
lv_obj_set_size(widget->obj, 160, 68);
lv_obj_t *top = lv_canvas_create(widget->obj);
lv_obj_align(top, LV_ALIGN_TOP_RIGHT, 0, 0);
lv_obj_align(top, LV_ALIGN_TOP_LEFT, top_pos, 0);
lv_canvas_set_buffer(top, widget->cbuf, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR);
lv_obj_t *middle = lv_canvas_create(widget->obj);
lv_obj_align(middle, LV_ALIGN_TOP_LEFT, 24, 0);
lv_obj_align(middle, LV_ALIGN_TOP_LEFT, middle_pos, 0);
lv_canvas_set_buffer(middle, widget->cbuf2, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR);
lv_obj_t *bottom = lv_canvas_create(widget->obj);
lv_obj_align(bottom, LV_ALIGN_TOP_LEFT, -44, 0);
lv_obj_align(bottom, LV_ALIGN_TOP_LEFT, bottom_pos, 0);
lv_canvas_set_buffer(bottom, widget->cbuf3, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR);
sys_slist_append(&widgets, &widget->node);

View File

@ -20,8 +20,13 @@ void rotate_canvas(lv_obj_t *canvas, lv_color_t cbuf[]) {
img.header.h = CANVAS_SIZE;
lv_canvas_fill_bg(canvas, LVGL_BACKGROUND, LV_OPA_COVER);
#ifdef CONFIG_NICE_VIEW_ROTATE_180
lv_canvas_transform(canvas, &img, -900, LV_IMG_ZOOM_NONE, -1, 0, CANVAS_SIZE / 2,
CANVAS_SIZE / 2 - 1, true);
#else
lv_canvas_transform(canvas, &img, 900, LV_IMG_ZOOM_NONE, -1, 0, CANVAS_SIZE / 2,
CANVAS_SIZE / 2, true);
#endif
}
void draw_battery(lv_obj_t *canvas, const struct status_state *state) {

View File

@ -65,13 +65,15 @@ static uint8_t active_profile;
#define DEVICE_NAME CONFIG_BT_DEVICE_NAME
#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1)
#define DEVICE_APPEARANCE \
(uint8_t) CONFIG_BT_DEVICE_APPEARANCE, (uint8_t)(CONFIG_BT_DEVICE_APPEARANCE >> 8)
BUILD_ASSERT(
DEVICE_NAME_LEN <= CONFIG_BT_DEVICE_NAME_MAX,
"ERROR: BLE device name is too long. Max length: " STRINGIFY(CONFIG_BT_DEVICE_NAME_MAX));
static struct bt_data zmk_ble_ad[] = {
BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xC1, 0x03),
BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, DEVICE_APPEARANCE),
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
BT_DATA_BYTES(BT_DATA_UUID16_SOME, 0x12, 0x18, /* HID Service */
0x0f, 0x18 /* Battery Service */

View File

@ -16,3 +16,4 @@ See [Configuration Overview](index.md) for instructions on how to change these s
| `CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES` | bool | Aggregate config that enables both `CONFIG_ZMK_BLE_EXPERIMENTAL_CONN` and `CONFIG_ZMK_BLE_EXPERIMENTAL_SEC`. | n |
| `CONFIG_ZMK_BLE_PASSKEY_ENTRY` | bool | Enable passkey entry during pairing for enhanced security. (Note: After enabling this, you will need to re-pair all previously paired hosts.) | n |
| `CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION` | bool | Low level setting for GATT subscriptions. Set to `n` to work around an annoying Windows bug with battery notifications. | y |
| `CONFIG_BT_DEVICE_APPEARANCE` | int | Bluetooth device [appearance value](https://bluetooth.com/specifications/assigned-numbers) (should be converted from hexadecimal to decimal). | 961 |