mirror of
https://github.com/m5stack/StackChan.git
synced 2026-04-27 11:02:40 +00:00
Merge main into remote-dev
This commit is contained in:
@@ -2,7 +2,8 @@
|
|||||||
# CMakeLists in this exact order for cmake to work correctly
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
set(PROJECT_VER "2.1.0")
|
set(PROJECT_VER "1.2.4")
|
||||||
|
add_definitions(-DFIRMWARE_VERSION=\"${PROJECT_VER}\")
|
||||||
|
|
||||||
# Add this line to disable the specific warning
|
# Add this line to disable the specific warning
|
||||||
add_compile_options(-Wno-missing-field-initializers)
|
add_compile_options(-Wno-missing-field-initializers)
|
||||||
|
|||||||
+1
-2
@@ -1,4 +1,3 @@
|
|||||||
# StackChan Firmware
|
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
@@ -10,7 +9,7 @@ python3 ./fetch_repos.py
|
|||||||
|
|
||||||
### Tool Chains
|
### Tool Chains
|
||||||
|
|
||||||
[ESP-IDF v5.5.1](https://docs.espressif.com/projects/esp-idf/en/v5.5.1/esp32s3/index.html)
|
[ESP-IDF v5.5.4](https://docs.espressif.com/projects/esp-idf/en/v5.5.4/esp32s3/index.html)
|
||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
|
|||||||
+219
-96
@@ -1,40 +1,22 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
78/esp-ml307:
|
78/esp-ml307:
|
||||||
component_hash: d4de9738baaaa5e6655c686a6083e699f3605de54dc83233ff3328cf55a4f543
|
component_hash: 5231991281a2f48f0e34ec705c2982936264d8b14f6f9373e60b153fd4b62123
|
||||||
dependencies:
|
dependencies:
|
||||||
|
- name: 78/uart-uhci
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
rules:
|
||||||
|
- if: target not in [esp32]
|
||||||
|
version: ~0.2.1
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
version: '>=5.3'
|
version: '>=5.5.2'
|
||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 3.5.3
|
version: 3.6.5
|
||||||
78/esp-opus:
|
|
||||||
component_hash: 8182b733f071d7bfe1e837f4c9f8649a63e4c937177f089e65772880c02f2e17
|
|
||||||
dependencies:
|
|
||||||
- name: idf
|
|
||||||
require: private
|
|
||||||
version: '>=5.0'
|
|
||||||
source:
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
type: service
|
|
||||||
version: 1.0.5
|
|
||||||
78/esp-opus-encoder:
|
|
||||||
component_hash: b80e5b6d6dc4bf6b0bf1a3729f52b80500e9e6b1003b3e827b78ba738283a296
|
|
||||||
dependencies:
|
|
||||||
- name: 78/esp-opus
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
require: private
|
|
||||||
version: ^1.0.5
|
|
||||||
- name: idf
|
|
||||||
require: private
|
|
||||||
version: '>=5.3'
|
|
||||||
source:
|
|
||||||
registry_url: https://components.espressif.com/
|
|
||||||
type: service
|
|
||||||
version: 2.4.1
|
|
||||||
78/esp-wifi-connect:
|
78/esp-wifi-connect:
|
||||||
component_hash: bf996fc603af1ff529668c788c7b38a8d94b1d43455af56d116d27ebb04b742a
|
component_hash: e64ce09a795dd3b4883e1f68be10b0dd11260331f021a5f0b1f3bfd9a25d413b
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -42,7 +24,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 3.0.2
|
version: 3.1.2
|
||||||
78/esp_lcd_nv3023:
|
78/esp_lcd_nv3023:
|
||||||
component_hash: fa88abfc19a312eb5e6f2ffa187e0a9faf67e01e758bfb979d3f9d92561a494f
|
component_hash: fa88abfc19a312eb5e6f2ffa187e0a9faf67e01e758bfb979d3f9d92561a494f
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -57,8 +39,36 @@ dependencies:
|
|||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
78/uart-eth-modem:
|
||||||
|
component_hash: 7a33284e4ba22f420191be8021cd4fe3e49f5e50eea1db70370b217a18147d8e
|
||||||
|
dependencies:
|
||||||
|
- name: 78/uart-uhci
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: ~0.2.1
|
||||||
|
- name: espressif/iot_eth
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: ^0.1.0
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.5.2'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 0.3.4
|
||||||
|
78/uart-uhci:
|
||||||
|
component_hash: 200eb10923cb750dddbee5504a36d7b5eaac611afbf52fb9066dc7130159f696
|
||||||
|
dependencies:
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.5.2'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
type: service
|
||||||
|
version: 0.2.1
|
||||||
78/xiaozhi-fonts:
|
78/xiaozhi-fonts:
|
||||||
component_hash: e5526ea3c290742963ef6ab64023669260b72aefdc37bb218c34c618962ef2a8
|
component_hash: 19ee829a7439702e18084a313b7b86017d3b8d17a094684575edc76bb6d11023
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -66,7 +76,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 1.5.5
|
version: 1.6.0
|
||||||
espressif/adc_battery_estimation:
|
espressif/adc_battery_estimation:
|
||||||
component_hash: b915167c87ed5a84b13d680bd011c2ed9a15121f1e247c6903141b9f138f3606
|
component_hash: b915167c87ed5a84b13d680bd011c2ed9a15121f1e247c6903141b9f138f3606
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -82,7 +92,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 0.2.1
|
version: 0.2.1
|
||||||
espressif/adc_mic:
|
espressif/adc_mic:
|
||||||
component_hash: ca6ef69bba4dc0d3e0ce53937635ed2734d38ac947881da81b8526e6851a71a4
|
component_hash: 3bb576d530564cb8e805fc34309d485de393f634651f3d31579fe3037b581d4f
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: espressif/cmake_utilities
|
- name: espressif/cmake_utilities
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
@@ -98,7 +108,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 0.2.1
|
version: 0.2.2
|
||||||
espressif/bmi270_sensor:
|
espressif/bmi270_sensor:
|
||||||
component_hash: fac23a5ecd2effdac0fb0705988d853745b8ffb99a384f87a307b3b25d15d432
|
component_hash: fac23a5ecd2effdac0fb0705988d853745b8ffb99a384f87a307b3b25d15d432
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -118,7 +128,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 0.1.1
|
version: 0.1.1
|
||||||
espressif/button:
|
espressif/button:
|
||||||
component_hash: fccb18c37f1cfe0797b74a53a44d3f400f5fd01f4993b40052dfb7f401915089
|
component_hash: d0afa32f0e50d60bc0c6fc23f7eea98adc6b02cfe70b590bc52c23c506745287
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: espressif/cmake_utilities
|
- name: espressif/cmake_utilities
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
@@ -130,7 +140,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 4.1.5
|
version: 4.1.6
|
||||||
espressif/cmake_utilities:
|
espressif/cmake_utilities:
|
||||||
component_hash: 351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f
|
component_hash: 351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -148,7 +158,7 @@ dependencies:
|
|||||||
require: private
|
require: private
|
||||||
version: '>=5.0'
|
version: '>=5.0'
|
||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com
|
||||||
type: service
|
type: service
|
||||||
version: 0.3.1
|
version: 0.3.1
|
||||||
espressif/esp-dsp:
|
espressif/esp-dsp:
|
||||||
@@ -158,9 +168,58 @@ dependencies:
|
|||||||
require: private
|
require: private
|
||||||
version: '>=4.2'
|
version: '>=4.2'
|
||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com
|
||||||
type: service
|
type: service
|
||||||
version: 1.7.0
|
version: 1.7.0
|
||||||
|
espressif/esp-sr:
|
||||||
|
component_hash: 46b1f70f8b561714b958d1c455213cca07162755d1b8df53498081199f15136f
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/dl_fft
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: '>=0.2.0'
|
||||||
|
- name: espressif/esp-dsp
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: 1.7.0
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.0'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 2.3.1
|
||||||
|
espressif/esp32-camera:
|
||||||
|
component_hash: ac4228c825b891378bc0806869170d4ebc5d45ba8ebc519b4f8886a56ad2d123
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/esp_jpeg
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: public
|
||||||
|
version: ^1.3.1
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.1'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 2.1.5
|
||||||
|
espressif/esp_audio_codec:
|
||||||
|
component_hash: af4663830bc73eca58febcc34a976d003465e78ed57458aa00a14b231e392ca1
|
||||||
|
dependencies:
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=4.4'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 2.4.1
|
||||||
|
espressif/esp_audio_effects:
|
||||||
|
component_hash: 8fa2bf7356a3c7fb9a9c7d2185aba474fa033b0506886c70752f67c42cd81b3f
|
||||||
|
dependencies: []
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 1.2.1
|
||||||
espressif/esp_cam_sensor:
|
espressif/esp_cam_sensor:
|
||||||
component_hash: 35c1648ea87aac81da7a085d35f61b6d5ad88574bd0c5fdc4ab75efdef4ee6c1
|
component_hash: 35c1648ea87aac81da7a085d35f61b6d5ad88574bd0c5fdc4ab75efdef4ee6c1
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -207,7 +266,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
espressif/esp_io_expander:
|
espressif/esp_io_expander:
|
||||||
component_hash: abf3ea0d71407d79d15500550aa3ba433848459b0fa94717cf9478822593ee5d
|
component_hash: 7b7f91270172e46ca4597e3874f48d8412e280e8c295559f5922ec38656e3e5f
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -215,7 +274,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
type: service
|
type: service
|
||||||
version: 1.1.0
|
version: 1.2.1
|
||||||
espressif/esp_io_expander_tca9554:
|
espressif/esp_io_expander_tca9554:
|
||||||
component_hash: 8a9e3a7dbef589a54f814ff22e9121da86bce19d0e1ccffa53f5df6bb346a140
|
component_hash: 8a9e3a7dbef589a54f814ff22e9121da86bce19d0e1ccffa53f5df6bb346a140
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -231,19 +290,29 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
espressif/esp_io_expander_tca95xx_16bit:
|
espressif/esp_io_expander_tca95xx_16bit:
|
||||||
component_hash: c384d55e429775d6a1eef26512fbc33bc41823745a8c2ad6d5927729f33a2c21
|
component_hash: a9608ba5753ae2a72e79fccd376fc4283343c0306d23505fbf8a46fafdbde2a2
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: espressif/esp_io_expander
|
- name: espressif/esp_io_expander
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
require: public
|
require: public
|
||||||
version: ^1.0.1
|
version: ^1.2.0
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
version: '>=5.2'
|
version: '>=5.2'
|
||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 2.0.1
|
version: 2.0.2
|
||||||
|
espressif/esp_jpeg:
|
||||||
|
component_hash: defb83669293cbf86d0fa86b475ba5517aceed04ed70db435388c151ab37b5d7
|
||||||
|
dependencies:
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.0'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
type: service
|
||||||
|
version: 1.3.1
|
||||||
espressif/esp_lcd_axs15231b:
|
espressif/esp_lcd_axs15231b:
|
||||||
component_hash: e614bd75827e95800e39df1ba9474166060ab26c3807d06df9cc312a27021cda
|
component_hash: e614bd75827e95800e39df1ba9474166060ab26c3807d06df9cc312a27021cda
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -262,6 +331,20 @@ dependencies:
|
|||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 1.0.1~1
|
version: 1.0.1~1
|
||||||
|
espressif/esp_lcd_co5300:
|
||||||
|
component_hash: 7004162c496b65a5e0ee7c92800c33c12b373ea70d07199318a182cb16c741b7
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/cmake_utilities
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: 0.*
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.4'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 2.0.3
|
||||||
espressif/esp_lcd_gc9a01:
|
espressif/esp_lcd_gc9a01:
|
||||||
component_hash: 09ddc8f5c9d718a659ffa30a4040e1ae75077e68492c38aec8c2beaaa7b3a9bc
|
component_hash: 09ddc8f5c9d718a659ffa30a4040e1ae75077e68492c38aec8c2beaaa7b3a9bc
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -457,7 +540,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
espressif/esp_lvgl_port:
|
espressif/esp_lvgl_port:
|
||||||
component_hash: 3264cc85d86a7c32b67d26a1353a57c67e7986bb293ebb1731801936b056e632
|
component_hash: b6360960f47b6776462e7092861b3ea66477ffb762a01baa0aecbb3d74cd50f4
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -469,7 +552,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 2.6.3
|
version: 2.7.2
|
||||||
espressif/esp_mmap_assets:
|
espressif/esp_mmap_assets:
|
||||||
component_hash: 91d785326b03db15e2f7f1314d8c976d38f21aa5759b570dcbbc89bcf247fd27
|
component_hash: 91d785326b03db15e2f7f1314d8c976d38f21aa5759b570dcbbc89bcf247fd27
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -501,7 +584,7 @@ dependencies:
|
|||||||
- esp32c6
|
- esp32c6
|
||||||
version: 0.6.1
|
version: 0.6.1
|
||||||
espressif/esp_sccb_intf:
|
espressif/esp_sccb_intf:
|
||||||
component_hash: 44dfa738680ccbc3705ae6940f59be603165f4f7e4d05c3eb5f433705fdc92be
|
component_hash: c071b189e49f40940722aea01a5489f873385cc39cd5b14012341135b85d1a9d
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -509,7 +592,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
type: service
|
type: service
|
||||||
version: 0.0.7
|
version: 0.0.8
|
||||||
espressif/esp_video:
|
espressif/esp_video:
|
||||||
component_hash: fbad1178f39cb5a81ed808c460c851b911a9858db833e2e667ada988022c0660
|
component_hash: fbad1178f39cb5a81ed808c460c851b911a9858db833e2e667ada988022c0660
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -560,18 +643,8 @@ dependencies:
|
|||||||
- esp32c6
|
- esp32c6
|
||||||
- esp32c61
|
- esp32c61
|
||||||
version: 1.3.1
|
version: 1.3.1
|
||||||
espressif/freetype:
|
|
||||||
component_hash: cd5e2d8458e6e8d73f1120ac474467cabb669d8ea4b25050bf6a348c1e89225e
|
|
||||||
dependencies:
|
|
||||||
- name: idf
|
|
||||||
require: private
|
|
||||||
version: '>=4.4'
|
|
||||||
source:
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
type: service
|
|
||||||
version: 2.13.3~1
|
|
||||||
espressif/i2c_bus:
|
espressif/i2c_bus:
|
||||||
component_hash: 4e990dc11734316186b489b362c61d41f23f79d58bc169795cec215e528cba14
|
component_hash: 804ec068d163570fd367b279a310ca383484630d2310c586b50def0bcf21de13
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: espressif/cmake_utilities
|
- name: espressif/cmake_utilities
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
@@ -583,7 +656,65 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
type: service
|
type: service
|
||||||
version: 1.5.0
|
version: 1.5.1
|
||||||
|
espressif/iot_eth:
|
||||||
|
component_hash: ffcea72f079264b6905e428a406cb6d2512dfede10d100c49d3486dd78dc1873
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/cmake_utilities
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: '*'
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=4.4'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
type: service
|
||||||
|
version: 0.1.0
|
||||||
|
espressif/iot_usbh_cdc:
|
||||||
|
component_hash: 6b30e8eeef1a3320a3bc0c27980c62826ed134b681be6f424366f3d78c291814
|
||||||
|
dependencies:
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.1'
|
||||||
|
- name: espressif/cmake_utilities
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: '*'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
type: service
|
||||||
|
targets:
|
||||||
|
- esp32s2
|
||||||
|
- esp32s3
|
||||||
|
- esp32p4
|
||||||
|
version: 3.0.0
|
||||||
|
espressif/iot_usbh_rndis:
|
||||||
|
component_hash: 0d91d9c79980fe0d2b59ecae9341d91852b7eb3356cc0e708f76425a3604ff5b
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/cmake_utilities
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: private
|
||||||
|
version: '*'
|
||||||
|
- name: espressif/iot_eth
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: public
|
||||||
|
version: '*'
|
||||||
|
- name: espressif/iot_usbh_cdc
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: public
|
||||||
|
version: ^3.0
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.2'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
targets:
|
||||||
|
- esp32s2
|
||||||
|
- esp32s3
|
||||||
|
- esp32p4
|
||||||
|
version: 0.3.1
|
||||||
espressif/knob:
|
espressif/knob:
|
||||||
component_hash: 138ed090b4c9090a0a678f695b9d1884b368130c729b7333ed35bd7f4e8da80e
|
component_hash: 138ed090b4c9090a0a678f695b9d1884b368130c729b7333ed35bd7f4e8da80e
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -599,7 +730,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 1.0.2
|
version: 1.0.2
|
||||||
espressif/led_strip:
|
espressif/led_strip:
|
||||||
component_hash: f0d1b7f93eb3ee57bcfd220656176b0b5616e1947f89ed44364555cf910c4840
|
component_hash: 28621486f77229aaf81c71f5e15d6fbf36c2949cf11094e07090593e659e7639
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: idf
|
- name: idf
|
||||||
require: private
|
require: private
|
||||||
@@ -607,7 +738,7 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 3.0.2
|
version: 3.0.3
|
||||||
espressif/usb_host_uvc:
|
espressif/usb_host_uvc:
|
||||||
component_hash: b0cb9a3a2eaa09dc6e5cc3e47e04d0a73e47c2d3dcfb3afce959224a1fe5fb5e
|
component_hash: b0cb9a3a2eaa09dc6e5cc3e47e04d0a73e47c2d3dcfb3afce959224a1fe5fb5e
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -631,32 +762,6 @@ dependencies:
|
|||||||
- esp32h4
|
- esp32h4
|
||||||
- linux
|
- linux
|
||||||
version: 2.3.1
|
version: 2.3.1
|
||||||
espressif2022/esp_emote_gfx:
|
|
||||||
component_hash: 67986ead33c11de895eb7ba9a069ea89949ec911ce7cf0989478cc9da2e54735
|
|
||||||
dependencies:
|
|
||||||
- name: espressif/cmake_utilities
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
require: private
|
|
||||||
version: 0.*
|
|
||||||
- name: espressif/esp_new_jpeg
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
require: public
|
|
||||||
version: 0.6.*
|
|
||||||
- name: espressif/freetype
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
require: private
|
|
||||||
version: 2.*
|
|
||||||
- name: idf
|
|
||||||
require: private
|
|
||||||
version: '>=5.0'
|
|
||||||
- name: lvgl/lvgl
|
|
||||||
registry_url: https://components.espressif.com
|
|
||||||
require: public
|
|
||||||
version: '*'
|
|
||||||
source:
|
|
||||||
registry_url: https://components.espressif.com/
|
|
||||||
type: service
|
|
||||||
version: 2.0.0
|
|
||||||
espressif2022/image_player:
|
espressif2022/image_player:
|
||||||
component_hash: 0e42ed1c9665debd15f2f3e7e56519100e75e446410962226cb5e5402da3fa43
|
component_hash: 0e42ed1c9665debd15f2f3e7e56519100e75e446410962226cb5e5402da3fa43
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -674,14 +779,14 @@ dependencies:
|
|||||||
idf:
|
idf:
|
||||||
source:
|
source:
|
||||||
type: idf
|
type: idf
|
||||||
version: 5.5.1
|
version: 5.5.4
|
||||||
lvgl/lvgl:
|
lvgl/lvgl:
|
||||||
component_hash: b702d642e03e95928046d5c6726558e6444e112420c77efa5fdb6650b0a13c5d
|
component_hash: 17e68bfd21f0edf4c3ee838e2273da840bf3930e5dbc3bfa6c1190c3aed41f9f
|
||||||
dependencies: []
|
dependencies: []
|
||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 9.3.0
|
version: 9.4.0
|
||||||
tny-robotics/sh1106-esp-idf:
|
tny-robotics/sh1106-esp-idf:
|
||||||
component_hash: 7be190d7c58cd635adf8b74b3a841f8245f2f82f36d135a64d8e53cfab39124d
|
component_hash: 7be190d7c58cd635adf8b74b3a841f8245f2f82f36d135a64d8e53cfab39124d
|
||||||
dependencies: []
|
dependencies: []
|
||||||
@@ -690,7 +795,7 @@ dependencies:
|
|||||||
type: service
|
type: service
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
txp666/otto-emoji-gif-component:
|
txp666/otto-emoji-gif-component:
|
||||||
component_hash: 5a722dd0a40014b31d5998ea5b21f0b53a99d1025626d765d08710b47636ee97
|
component_hash: 8da812ae44707af319a20e164e8b544199fe401436167c206e684594e0a38c5d
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: lvgl/lvgl
|
- name: lvgl/lvgl
|
||||||
registry_url: https://components.espressif.com
|
registry_url: https://components.espressif.com
|
||||||
@@ -699,7 +804,21 @@ dependencies:
|
|||||||
source:
|
source:
|
||||||
registry_url: https://components.espressif.com/
|
registry_url: https://components.espressif.com/
|
||||||
type: service
|
type: service
|
||||||
version: 1.0.4
|
version: 1.1.1
|
||||||
|
waveshare/custom_io_expander_ch32v003:
|
||||||
|
component_hash: fefced27c762ed97a3523c9d90d66050deea7eeb7e9eae6328e4ab1a71125d26
|
||||||
|
dependencies:
|
||||||
|
- name: espressif/esp_io_expander
|
||||||
|
registry_url: https://components.espressif.com
|
||||||
|
require: public
|
||||||
|
version: ^1.0.1
|
||||||
|
- name: idf
|
||||||
|
require: private
|
||||||
|
version: '>=5.3'
|
||||||
|
source:
|
||||||
|
registry_url: https://components.espressif.com/
|
||||||
|
type: service
|
||||||
|
version: 1.0.1
|
||||||
waveshare/esp_lcd_sh8601:
|
waveshare/esp_lcd_sh8601:
|
||||||
component_hash: 1a2829e9db4e0515bad6ce83368f199dec60519fbba40251d6c8249f5d070ae1
|
component_hash: 1a2829e9db4e0515bad6ce83368f199dec60519fbba40251d6c8249f5d070ae1
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -744,22 +863,25 @@ dependencies:
|
|||||||
version: 1.0.2
|
version: 1.0.2
|
||||||
direct_dependencies:
|
direct_dependencies:
|
||||||
- 78/esp-ml307
|
- 78/esp-ml307
|
||||||
- 78/esp-opus-encoder
|
|
||||||
- 78/esp-wifi-connect
|
- 78/esp-wifi-connect
|
||||||
- 78/esp_lcd_nv3023
|
- 78/esp_lcd_nv3023
|
||||||
|
- 78/uart-eth-modem
|
||||||
- 78/xiaozhi-fonts
|
- 78/xiaozhi-fonts
|
||||||
- espressif/adc_battery_estimation
|
- espressif/adc_battery_estimation
|
||||||
- espressif/adc_mic
|
- espressif/adc_mic
|
||||||
- espressif/bmi270_sensor
|
- espressif/bmi270_sensor
|
||||||
- espressif/button
|
- espressif/button
|
||||||
- espressif/cmake_utilities
|
- espressif/cmake_utilities
|
||||||
- espressif/dl_fft
|
- espressif/esp-sr
|
||||||
- espressif/esp-dsp
|
- espressif/esp32-camera
|
||||||
|
- espressif/esp_audio_codec
|
||||||
|
- espressif/esp_audio_effects
|
||||||
- espressif/esp_codec_dev
|
- espressif/esp_codec_dev
|
||||||
- espressif/esp_image_effects
|
- espressif/esp_image_effects
|
||||||
- espressif/esp_io_expander_tca9554
|
- espressif/esp_io_expander_tca9554
|
||||||
- espressif/esp_io_expander_tca95xx_16bit
|
- espressif/esp_io_expander_tca95xx_16bit
|
||||||
- espressif/esp_lcd_axs15231b
|
- espressif/esp_lcd_axs15231b
|
||||||
|
- espressif/esp_lcd_co5300
|
||||||
- espressif/esp_lcd_gc9a01
|
- espressif/esp_lcd_gc9a01
|
||||||
- espressif/esp_lcd_ili9341
|
- espressif/esp_lcd_ili9341
|
||||||
- espressif/esp_lcd_panel_io_additions
|
- espressif/esp_lcd_panel_io_additions
|
||||||
@@ -776,17 +898,18 @@ direct_dependencies:
|
|||||||
- espressif/esp_mmap_assets
|
- espressif/esp_mmap_assets
|
||||||
- espressif/esp_new_jpeg
|
- espressif/esp_new_jpeg
|
||||||
- espressif/esp_video
|
- espressif/esp_video
|
||||||
|
- espressif/iot_usbh_rndis
|
||||||
- espressif/knob
|
- espressif/knob
|
||||||
- espressif/led_strip
|
- espressif/led_strip
|
||||||
- espressif2022/esp_emote_gfx
|
|
||||||
- espressif2022/image_player
|
- espressif2022/image_player
|
||||||
- idf
|
- idf
|
||||||
- lvgl/lvgl
|
- lvgl/lvgl
|
||||||
- tny-robotics/sh1106-esp-idf
|
- tny-robotics/sh1106-esp-idf
|
||||||
- txp666/otto-emoji-gif-component
|
- txp666/otto-emoji-gif-component
|
||||||
|
- waveshare/custom_io_expander_ch32v003
|
||||||
- waveshare/esp_lcd_sh8601
|
- waveshare/esp_lcd_sh8601
|
||||||
- waveshare/esp_lcd_touch_cst9217
|
- waveshare/esp_lcd_touch_cst9217
|
||||||
- wvirgil123/sscma_client
|
- wvirgil123/sscma_client
|
||||||
manifest_hash: 58298729f89f9edb041dac03ee9a91c4f6f97f277634f6349f91981c9b4b715f
|
manifest_hash: 350e17991f1a3226438480b027525b7cde67c34ed4ec6c5847cdfcb22e18dc4a
|
||||||
target: esp32s3
|
target: esp32s3
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ list(APPEND STACK_CHAN_SOURCES main.cpp)
|
|||||||
# Define source files
|
# Define source files
|
||||||
set(SOURCES "audio/audio_codec.cc"
|
set(SOURCES "audio/audio_codec.cc"
|
||||||
"audio/audio_service.cc"
|
"audio/audio_service.cc"
|
||||||
|
"audio/demuxer/ogg_demuxer.cc"
|
||||||
"audio/codecs/no_audio_codec.cc"
|
"audio/codecs/no_audio_codec.cc"
|
||||||
"audio/codecs/box_audio_codec.cc"
|
"audio/codecs/box_audio_codec.cc"
|
||||||
"audio/codecs/es8311_audio_codec.cc"
|
"audio/codecs/es8311_audio_codec.cc"
|
||||||
@@ -38,7 +39,7 @@ set(SOURCES "audio/audio_codec.cc"
|
|||||||
"display/lcd_display.cc"
|
"display/lcd_display.cc"
|
||||||
"display/oled_display.cc"
|
"display/oled_display.cc"
|
||||||
"display/lvgl_display/lvgl_display.cc"
|
"display/lvgl_display/lvgl_display.cc"
|
||||||
"display/emote_display.cc"
|
# "display/emote_display.cc"
|
||||||
"display/lvgl_display/emoji_collection.cc"
|
"display/lvgl_display/emoji_collection.cc"
|
||||||
"display/lvgl_display/lvgl_theme.cc"
|
"display/lvgl_display/lvgl_theme.cc"
|
||||||
"display/lvgl_display/lvgl_font.cc"
|
"display/lvgl_display/lvgl_font.cc"
|
||||||
@@ -63,15 +64,34 @@ set(SOURCES "audio/audio_codec.cc"
|
|||||||
# Transform relative paths to absolute paths from xiaozhi-esp32/main
|
# Transform relative paths to absolute paths from xiaozhi-esp32/main
|
||||||
list(TRANSFORM SOURCES PREPEND "${XIAOZHI_MAIN_DIR}/")
|
list(TRANSFORM SOURCES PREPEND "${XIAOZHI_MAIN_DIR}/")
|
||||||
|
|
||||||
set(INCLUDE_DIRS "." "display" "display/lvgl_display" "display/lvgl_display/jpg" "audio" "protocols")
|
set(INCLUDE_DIRS "." "display" "display/lvgl_display" "display/lvgl_display/jpg" "audio" "audio/demuxer" "protocols")
|
||||||
# Transform include dirs to absolute paths from xiaozhi-esp32/main
|
# Transform include dirs to absolute paths from xiaozhi-esp32/main
|
||||||
list(TRANSFORM INCLUDE_DIRS PREPEND "${XIAOZHI_MAIN_DIR}/")
|
list(TRANSFORM INCLUDE_DIRS PREPEND "${XIAOZHI_MAIN_DIR}/")
|
||||||
|
|
||||||
# Add board common files
|
# Add board common files
|
||||||
file(GLOB BOARD_COMMON_SOURCES ${XIAOZHI_MAIN_DIR}/boards/common/*.cc)
|
list(APPEND SOURCES
|
||||||
list(APPEND SOURCES ${BOARD_COMMON_SOURCES} ${STACK_CHAN_SOURCES})
|
"${XIAOZHI_MAIN_DIR}/boards/common/board.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/wifi_board.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/ml307_board.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/nt26_board.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/dual_network_board.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/adc_battery_monitor.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/afsk_demod.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/axp2101.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/backlight.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/button.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/i2c_device.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/knob.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/power_save_timer.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/press_to_talk_mcp_tool.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/sleep_timer.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/sy6970.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/system_reset.cc"
|
||||||
|
${STACK_CHAN_SOURCES}
|
||||||
|
)
|
||||||
list(APPEND INCLUDE_DIRS ${XIAOZHI_MAIN_DIR}/boards/common ${STACK_CHAN_INCLUDE_DIRS})
|
list(APPEND INCLUDE_DIRS ${XIAOZHI_MAIN_DIR}/boards/common ${STACK_CHAN_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
|
||||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||||
# Function to find component dynamically by pattern
|
# Function to find component dynamically by pattern
|
||||||
function(find_component_by_pattern PATTERN COMPONENT_VAR PATH_VAR)
|
function(find_component_by_pattern PATTERN COMPONENT_VAR PATH_VAR)
|
||||||
@@ -89,6 +109,8 @@ endfunction()
|
|||||||
set(BUILTIN_TEXT_FONT font_puhui_14_1)
|
set(BUILTIN_TEXT_FONT font_puhui_14_1)
|
||||||
set(BUILTIN_ICON_FONT font_awesome_14_1)
|
set(BUILTIN_ICON_FONT font_awesome_14_1)
|
||||||
|
|
||||||
|
set(EMOTE_RESOLUTION "320_240")
|
||||||
|
|
||||||
# Add board files according to BOARD_TYPE
|
# Add board files according to BOARD_TYPE
|
||||||
# Set default assets if the board uses partition table V2
|
# Set default assets if the board uses partition table V2
|
||||||
if(CONFIG_BOARD_TYPE_M5STACK_STACK_CHAN)
|
if(CONFIG_BOARD_TYPE_M5STACK_STACK_CHAN)
|
||||||
@@ -98,10 +120,17 @@ if(CONFIG_BOARD_TYPE_M5STACK_STACK_CHAN)
|
|||||||
set(DEFAULT_EMOJI_COLLECTION twemoji_64)
|
set(DEFAULT_EMOJI_COLLECTION twemoji_64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB BOARD_SOURCES
|
if(MANUFACTURER)
|
||||||
${XIAOZHI_MAIN_DIR}/boards/${BOARD_TYPE}/*.cc
|
file(GLOB BOARD_SOURCES
|
||||||
${XIAOZHI_MAIN_DIR}/boards/${BOARD_TYPE}/*.c
|
${XIAOZHI_MAIN_DIR}/boards/${MANUFACTURER}/${BOARD_TYPE}/*.cc
|
||||||
)
|
${XIAOZHI_MAIN_DIR}/boards/${MANUFACTURER}/${BOARD_TYPE}/*.c
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
file(GLOB BOARD_SOURCES
|
||||||
|
${XIAOZHI_MAIN_DIR}/boards/${BOARD_TYPE}/*.cc
|
||||||
|
${XIAOZHI_MAIN_DIR}/boards/${BOARD_TYPE}/*.c
|
||||||
|
)
|
||||||
|
endif()
|
||||||
list(APPEND SOURCES ${BOARD_SOURCES})
|
list(APPEND SOURCES ${BOARD_SOURCES})
|
||||||
|
|
||||||
# Select audio processor according to Kconfig
|
# Select audio processor according to Kconfig
|
||||||
@@ -119,7 +148,7 @@ endif()
|
|||||||
|
|
||||||
# Auto Select Additional Sources
|
# Auto Select Additional Sources
|
||||||
if (CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING)
|
if (CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING)
|
||||||
list(APPEND SOURCES "${XIAOZHI_MAIN_DIR}/boards/common/blufi.cpp")
|
list(APPEND SOURCES "boards/common/blufi.cpp")
|
||||||
endif ()
|
endif ()
|
||||||
# Select language directory according to Kconfig
|
# Select language directory according to Kconfig
|
||||||
if(CONFIG_LANGUAGE_ZH_CN)
|
if(CONFIG_LANGUAGE_ZH_CN)
|
||||||
@@ -228,7 +257,7 @@ if(NOT LANG_DIR STREQUAL "en-US")
|
|||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# file(GLOB COMMON_SOUNDS ${XIAOZHI_MAIN_DIR}/assets/common/*.ogg)
|
# file(GLOB COMMON_SOUNDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/common/*.ogg)
|
||||||
file(GLOB COMMON_SOUNDS
|
file(GLOB COMMON_SOUNDS
|
||||||
${XIAOZHI_MAIN_DIR}/assets/common/*.ogg
|
${XIAOZHI_MAIN_DIR}/assets/common/*.ogg
|
||||||
assets/sfx/*.ogg
|
assets/sfx/*.ogg
|
||||||
@@ -240,16 +269,53 @@ if(CONFIG_IDF_TARGET_ESP32)
|
|||||||
"audio/codecs/es8388_audio_codec.cc"
|
"audio/codecs/es8388_audio_codec.cc"
|
||||||
"audio/codecs/es8389_audio_codec.cc"
|
"audio/codecs/es8389_audio_codec.cc"
|
||||||
"led/gpio_led.cc"
|
"led/gpio_led.cc"
|
||||||
"${XIAOZHI_MAIN_DIR}/boards/common/esp32_camera.cc"
|
|
||||||
"display/lvgl_display/jpg/image_to_jpeg.cpp"
|
"display/lvgl_display/jpg/image_to_jpeg.cpp"
|
||||||
"display/lvgl_display/jpg/jpeg_to_image.c"
|
"display/lvgl_display/jpg/jpeg_to_image.c"
|
||||||
|
"boards/common/nt26_board.cc"
|
||||||
|
"boards/common/ml307_board.cc"
|
||||||
|
"boards/common/dual_network_board.cc"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Include EspVideo if target is ESP32S3 or ESP32P4
|
||||||
|
if(CONFIG_IDF_TARGET_ESP32S3 OR CONFIG_IDF_TARGET_ESP32P4)
|
||||||
|
list(APPEND SOURCES "${XIAOZHI_MAIN_DIR}/boards/common/esp_video.cc"
|
||||||
|
"${XIAOZHI_MAIN_DIR}/boards/common/rndis_board.cc"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Include Esp32Camera if target is ESP32S3
|
||||||
|
if(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
|
list(APPEND SOURCES "${XIAOZHI_MAIN_DIR}/boards/common/esp32_camera.cc")
|
||||||
|
endif()
|
||||||
|
|
||||||
idf_component_register(SRCS ${SOURCES}
|
idf_component_register(SRCS ${SOURCES}
|
||||||
EMBED_FILES ${LANG_SOUNDS} ${COMMON_SOUNDS}
|
EMBED_FILES ${LANG_SOUNDS} ${COMMON_SOUNDS}
|
||||||
INCLUDE_DIRS ${INCLUDE_DIRS}
|
INCLUDE_DIRS ${INCLUDE_DIRS}
|
||||||
WHOLE_ARCHIVE
|
WHOLE_ARCHIVE
|
||||||
|
PRIV_REQUIRES
|
||||||
|
esp_pm
|
||||||
|
esp_psram
|
||||||
|
esp_netif
|
||||||
|
esp_driver_gpio
|
||||||
|
esp_driver_uart
|
||||||
|
esp_driver_spi
|
||||||
|
esp_driver_i2c
|
||||||
|
esp_driver_i2s
|
||||||
|
esp_driver_jpeg
|
||||||
|
esp_driver_ppa
|
||||||
|
esp_app_format
|
||||||
|
app_update
|
||||||
|
spi_flash
|
||||||
|
console
|
||||||
|
efuse
|
||||||
|
bt
|
||||||
|
fatfs
|
||||||
|
ArduinoJson
|
||||||
|
esp-now
|
||||||
|
mooncake
|
||||||
|
mooncake_log
|
||||||
|
smooth_ui_toolkit
|
||||||
)
|
)
|
||||||
|
|
||||||
# Use target_compile_definitions to define BOARD_TYPE, BOARD_NAME
|
# Use target_compile_definitions to define BOARD_TYPE, BOARD_NAME
|
||||||
@@ -265,12 +331,12 @@ target_compile_definitions(${COMPONENT_LIB}
|
|||||||
# Add generation rules
|
# Add generation rules
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${LANG_HEADER}
|
OUTPUT ${LANG_HEADER}
|
||||||
COMMAND python ${PROJECT_DIR}/xiaozhi-esp32/scripts/gen_lang.py
|
COMMAND python ${XIAOZHI_MAIN_DIR}/../scripts/gen_lang.py
|
||||||
--language "${LANG_DIR}"
|
--language "${LANG_DIR}"
|
||||||
--output "${LANG_HEADER}"
|
--output "${LANG_HEADER}"
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${LANG_JSON}
|
${LANG_JSON}
|
||||||
${PROJECT_DIR}/xiaozhi-esp32/scripts/gen_lang.py
|
${XIAOZHI_MAIN_DIR}/../scripts/gen_lang.py
|
||||||
COMMENT "Generating ${LANG_DIR} language config"
|
COMMENT "Generating ${LANG_DIR} language config"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -362,10 +428,10 @@ function(build_default_assets_bin)
|
|||||||
# Create custom command to build assets
|
# Create custom command to build assets
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${GENERATED_ASSETS_BIN}
|
OUTPUT ${GENERATED_ASSETS_BIN}
|
||||||
COMMAND python ${PROJECT_DIR}/xiaozhi-esp32/scripts/build_default_assets.py ${BUILD_ARGS}
|
COMMAND python ${XIAOZHI_MAIN_DIR}/../scripts/build_default_assets.py ${BUILD_ARGS}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${SDKCONFIG}
|
${SDKCONFIG}
|
||||||
${PROJECT_DIR}/xiaozhi-esp32/scripts/build_default_assets.py
|
${XIAOZHI_MAIN_DIR}/../scripts/build_default_assets.py
|
||||||
COMMENT "Building default assets.bin based on configuration"
|
COMMENT "Building default assets.bin based on configuration"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
@@ -452,6 +518,14 @@ if ("${size}" AND "${offset}")
|
|||||||
get_assets_local_file("${CONFIG_CUSTOM_ASSETS_FILE}" ASSETS_LOCAL_FILE)
|
get_assets_local_file("${CONFIG_CUSTOM_ASSETS_FILE}" ASSETS_LOCAL_FILE)
|
||||||
esptool_py_flash_to_partition(flash "assets" "${ASSETS_LOCAL_FILE}")
|
esptool_py_flash_to_partition(flash "assets" "${ASSETS_LOCAL_FILE}")
|
||||||
message(STATUS "Custom assets flash configured: ${ASSETS_LOCAL_FILE} -> assets partition")
|
message(STATUS "Custom assets flash configured: ${ASSETS_LOCAL_FILE} -> assets partition")
|
||||||
|
elseif(CONFIG_FLASH_EXPRESSION_ASSETS)
|
||||||
|
set(ASSETS_NAME "expression_assets")
|
||||||
|
set(ASSETS_PARTITION "assets")
|
||||||
|
set(ASSETS_FILE "${CMAKE_BINARY_DIR}/${ASSETS_NAME}.bin")
|
||||||
|
|
||||||
|
build_speaker_assets_bin("${ASSETS_PARTITION}" ${EMOTE_RESOLUTION} ${ASSETS_FILE} ${CONFIG_MMAP_FILE_NAME_LENGTH})
|
||||||
|
message(STATUS "Generated emote assets: ${ASSETS_FILE} -> ${ASSETS_PARTITION} partition")
|
||||||
|
esptool_py_flash_to_partition(flash "${ASSETS_PARTITION}" "${ASSETS_FILE}")
|
||||||
elseif(CONFIG_FLASH_NONE_ASSETS)
|
elseif(CONFIG_FLASH_NONE_ASSETS)
|
||||||
message(STATUS "Assets flashing disabled (FLASH_NONE_ASSETS)")
|
message(STATUS "Assets flashing disabled (FLASH_NONE_ASSETS)")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+138
-43
@@ -8,7 +8,8 @@ config OTA_URL
|
|||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "Flash Assets"
|
prompt "Flash Assets"
|
||||||
default FLASH_DEFAULT_ASSETS
|
default FLASH_DEFAULT_ASSETS if !USE_EMOTE_MESSAGE_STYLE
|
||||||
|
default FLASH_EXPRESSION_ASSETS if USE_EMOTE_MESSAGE_STYLE
|
||||||
help
|
help
|
||||||
Select the assets to flash.
|
Select the assets to flash.
|
||||||
|
|
||||||
@@ -16,8 +17,12 @@ choice
|
|||||||
bool "Do not flash assets"
|
bool "Do not flash assets"
|
||||||
config FLASH_DEFAULT_ASSETS
|
config FLASH_DEFAULT_ASSETS
|
||||||
bool "Flash Default Assets"
|
bool "Flash Default Assets"
|
||||||
|
depends on !USE_EMOTE_MESSAGE_STYLE
|
||||||
config FLASH_CUSTOM_ASSETS
|
config FLASH_CUSTOM_ASSETS
|
||||||
bool "Flash Custom Assets"
|
bool "Flash Custom Assets"
|
||||||
|
config FLASH_EXPRESSION_ASSETS
|
||||||
|
bool "Flash Emote Assets"
|
||||||
|
depends on USE_EMOTE_MESSAGE_STYLE
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config CUSTOM_ASSETS_FILE
|
config CUSTOM_ASSETS_FILE
|
||||||
@@ -129,6 +134,9 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_BREAD_COMPACT_ML307
|
config BOARD_TYPE_BREAD_COMPACT_ML307
|
||||||
bool "Bread Compact ML307/EC801E (面包板 4G)"
|
bool "Bread Compact ML307/EC801E (面包板 4G)"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_BREAD_COMPACT_NT26
|
||||||
|
bool "Bread Compact NT26 (面包板 4G)"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_BREAD_COMPACT_ESP32
|
config BOARD_TYPE_BREAD_COMPACT_ESP32
|
||||||
bool "Bread Compact ESP32 DevKit (面包板)"
|
bool "Bread Compact ESP32 DevKit (面包板)"
|
||||||
depends on IDF_TARGET_ESP32
|
depends on IDF_TARGET_ESP32
|
||||||
@@ -147,9 +155,15 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_ESP_KORVO2_V3
|
config BOARD_TYPE_ESP_KORVO2_V3
|
||||||
bool "Espressif Korvo2 V3"
|
bool "Espressif Korvo2 V3"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_ESP_KORVO2_V3_RNDIS
|
||||||
|
bool "Espressif Korvo2 V3 RNDIS"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_ESP_SPARKBOT
|
config BOARD_TYPE_ESP_SPARKBOT
|
||||||
bool "Espressif SparkBot"
|
bool "Espressif SparkBot"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_ESP_SENSAIRSHUTTLE
|
||||||
|
bool "Espressif ESP-SensairShuttle"
|
||||||
|
depends on IDF_TARGET_ESP32C5
|
||||||
config BOARD_TYPE_ESP_SPOT_S3
|
config BOARD_TYPE_ESP_SPOT_S3
|
||||||
bool "Espressif Spot-S3"
|
bool "Espressif Spot-S3"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
@@ -201,6 +215,15 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_LICHUANG_DEV_C3
|
config BOARD_TYPE_LICHUANG_DEV_C3
|
||||||
bool "立创·实战派 ESP32-C3"
|
bool "立创·实战派 ESP32-C3"
|
||||||
depends on IDF_TARGET_ESP32C3
|
depends on IDF_TARGET_ESP32C3
|
||||||
|
config BOARD_TYPE_EDA_TV_PRO
|
||||||
|
bool "EDA课程案例 EDA-TV-Pro"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_EDA_ROBOT_PRO
|
||||||
|
bool "EDA课程案例 EDA-Robot-Pro"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_EDA_SUPER_BEAR
|
||||||
|
bool "EDA课程案例 EDA-Super-Bear"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_DF_K10
|
config BOARD_TYPE_DF_K10
|
||||||
bool "DFRobot 行空板 k10"
|
bool "DFRobot 行空板 k10"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
@@ -240,77 +263,110 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_M5STACK_ATOM_ECHOS3R
|
config BOARD_TYPE_M5STACK_ATOM_ECHOS3R
|
||||||
bool "M5Stack AtomEchoS3R"
|
bool "M5Stack AtomEchoS3R"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_M5STACK_CARDPUTER_ADV
|
||||||
|
bool "M5Stack Cardputer Adv"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_M5STACK_ATOM_MATRIX_ECHO_BASE
|
config BOARD_TYPE_M5STACK_ATOM_MATRIX_ECHO_BASE
|
||||||
bool "M5Stack AtomMatrix + Echo Base"
|
bool "M5Stack AtomMatrix + Echo Base"
|
||||||
depends on IDF_TARGET_ESP32
|
depends on IDF_TARGET_ESP32
|
||||||
config BOARD_TYPE_WAVESHARE_S3_AUDIO_BOARD
|
config BOARD_TYPE_WAVESHARE_ESP32_TOUCH_LCD_3_5
|
||||||
|
bool "Waveshare ESP32-Touch-LCD-3.5"
|
||||||
|
depends on IDF_TARGET_ESP32
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_AUDIO_BOARD
|
||||||
bool "Waveshare ESP32-S3-Audio-Board"
|
bool "Waveshare ESP32-S3-Audio-Board"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_1_8
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_8
|
||||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8"
|
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_2_06
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06
|
||||||
bool "Waveshare ESP32-S3-Touch-AMOLED-2.06"
|
bool "Waveshare ESP32-S3-Touch-AMOLED-2.06"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_C6_TOUCH_AMOLED_2_06
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_2_06
|
||||||
bool "Waveshare ESP32-C6-Touch-AMOLED-2.06"
|
bool "Waveshare ESP32-C6-Touch-AMOLED-2.06"
|
||||||
depends on IDF_TARGET_ESP32C6
|
depends on IDF_TARGET_ESP32C6
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_1_75
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75
|
||||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.75"
|
bool "Waveshare ESP32-S3-Touch-AMOLED-1.75"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_1_83
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C
|
||||||
|
bool "Waveshare ESP32-S3-Touch-AMOLED-1.75C"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-1.83"
|
bool "Waveshare ESP32-S3-Touch-LCD-1.83"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_4B
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-4B"
|
bool "Waveshare ESP32-S3-Touch-LCD-4B"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_1_85C
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4_3C
|
||||||
|
bool "Waveshare ESP32-S3-Touch-LCD-4.3C"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85C
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85C"
|
bool "Waveshare ESP32-S3-Touch-LCD-1.85C"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_1_85
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85"
|
bool "Waveshare ESP32-S3-Touch-LCD-1.85"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_1_46
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_46
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-1.46"
|
bool "Waveshare ESP32-S3-Touch-LCD-1.46"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_C6_LCD_1_69
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_LCD_1_69
|
||||||
bool "Waveshare ESP32-C6-LCD-1.69"
|
bool "Waveshare ESP32-C6-LCD-1.69"
|
||||||
depends on IDF_TARGET_ESP32C6
|
depends on IDF_TARGET_ESP32C6
|
||||||
config BOARD_TYPE_WAVESHARE_C6_TOUCH_LCD_1_83
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_LCD_1_83
|
||||||
bool "Waveshare ESP32-C6-Touch-LCD-1.83"
|
bool "Waveshare ESP32-C6-Touch-LCD-1.83"
|
||||||
depends on IDF_TARGET_ESP32C6
|
depends on IDF_TARGET_ESP32C6
|
||||||
config BOARD_TYPE_WAVESHARE_C6_TOUCH_AMOLED_1_43
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_43
|
||||||
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.43"
|
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.43"
|
||||||
depends on IDF_TARGET_ESP32C6
|
depends on IDF_TARGET_ESP32C6
|
||||||
config BOARD_TYPE_WAVESHARE_C6_TOUCH_AMOLED_1_32
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_32
|
||||||
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.32"
|
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.32"
|
||||||
depends on IDF_TARGET_ESP32C6
|
depends on IDF_TARGET_ESP32C6
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_1_32
|
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_8
|
||||||
|
bool "Waveshare ESP32-C6-Touch-AMOLED-1.8"
|
||||||
|
depends on IDF_TARGET_ESP32C6
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_32
|
||||||
bool "Waveshare ESP32-S3-Touch-AMOLOED-1.32"
|
bool "Waveshare ESP32-S3-Touch-AMOLOED-1.32"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_3_49
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-3.49"
|
bool "Waveshare ESP32-S3-Touch-LCD-3.49"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_3_5
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5"
|
bool "Waveshare ESP32-S3-Touch-LCD-3.5"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_ePaper_1_54
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v1
|
||||||
bool "Waveshare ESP32-S3-ePaper-1.54"
|
bool "Waveshare ESP32-S3-ePaper-1.54_v1"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_3_5B
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v2
|
||||||
|
bool "Waveshare ESP32-S3-ePaper-1.54_v2"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2
|
||||||
|
bool "Waveshare ESP32-S3-RLCD-4.2"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5B
|
||||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5B"
|
bool "Waveshare ESP32-S3-Touch-LCD-3.5B"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_WAVESHARE_P4_NANO
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_NANO
|
||||||
bool "Waveshare ESP32-P4-NANO"
|
bool "Waveshare ESP32-P4-NANO"
|
||||||
depends on IDF_TARGET_ESP32P4
|
depends on IDF_TARGET_ESP32P4
|
||||||
config BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_4B
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B
|
||||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4B"
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4B"
|
||||||
depends on IDF_TARGET_ESP32P4
|
depends on IDF_TARGET_ESP32P4
|
||||||
config BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_7B
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B
|
||||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7B"
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7B"
|
||||||
depends on IDF_TARGET_ESP32P4
|
depends on IDF_TARGET_ESP32P4
|
||||||
config BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_XC
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C
|
||||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C or ESP32-P4-WIFI6-Touch-LCD-4C"
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C"
|
||||||
|
depends on IDF_TARGET_ESP32P4
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C
|
||||||
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4C"
|
||||||
|
depends on IDF_TARGET_ESP32P4
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7
|
||||||
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7"
|
||||||
|
depends on IDF_TARGET_ESP32P4
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8
|
||||||
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-8"
|
||||||
|
depends on IDF_TARGET_ESP32P4
|
||||||
|
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1
|
||||||
|
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-10.1"
|
||||||
depends on IDF_TARGET_ESP32P4
|
depends on IDF_TARGET_ESP32P4
|
||||||
config BOARD_TYPE_TUDOUZI
|
config BOARD_TYPE_TUDOUZI
|
||||||
bool "土豆子"
|
bool "土豆子"
|
||||||
@@ -390,6 +446,9 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_XINGZHI_METAL_1_54_WIFI
|
config BOARD_TYPE_XINGZHI_METAL_1_54_WIFI
|
||||||
bool "无名科技星智1.54 METAL(wifi)"
|
bool "无名科技星智1.54 METAL(wifi)"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_XINGZHI_ABS_2_0
|
||||||
|
bool "无名科技星智ABS 2.0"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_SEEED_STUDIO_SENSECAP_WATCHER
|
config BOARD_TYPE_SEEED_STUDIO_SENSECAP_WATCHER
|
||||||
bool "Seeed Studio SenseCAP Watcher"
|
bool "Seeed Studio SenseCAP Watcher"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
@@ -414,6 +473,12 @@ choice BOARD_TYPE
|
|||||||
config BOARD_TYPE_ZHENGCHEN_1_54TFT_ML307
|
config BOARD_TYPE_ZHENGCHEN_1_54TFT_ML307
|
||||||
bool "征辰科技1.54(ML307)"
|
bool "征辰科技1.54(ML307)"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_ZHENGCHEN_CAM
|
||||||
|
bool "征辰科技AI Camera"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
|
config BOARD_TYPE_ZHENGCHEN_CAM_ML307
|
||||||
|
bool "征辰科技AI Camera(ML307)"
|
||||||
|
depends on IDF_TARGET_ESP32S3
|
||||||
config BOARD_TYPE_MINSI_K08_DUAL
|
config BOARD_TYPE_MINSI_K08_DUAL
|
||||||
bool "敏思科技K08(DUAL)"
|
bool "敏思科技K08(DUAL)"
|
||||||
depends on IDF_TARGET_ESP32S3
|
depends on IDF_TARGET_ESP32S3
|
||||||
@@ -486,7 +551,7 @@ choice ESP_S3_LCD_EV_Board_Version_TYPE
|
|||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
choice DISPLAY_OLED_TYPE
|
choice DISPLAY_OLED_TYPE
|
||||||
depends on BOARD_TYPE_BREAD_COMPACT_WIFI || BOARD_TYPE_BREAD_COMPACT_ML307 || BOARD_TYPE_BREAD_COMPACT_ESP32 || BOARD_TYPE_HU_087
|
depends on BOARD_TYPE_BREAD_COMPACT_WIFI || BOARD_TYPE_BREAD_COMPACT_ML307 || BOARD_TYPE_BREAD_COMPACT_NT26 || BOARD_TYPE_BREAD_COMPACT_ESP32 || BOARD_TYPE_HU_087
|
||||||
prompt "OLED Type"
|
prompt "OLED Type"
|
||||||
default OLED_SSD1306_128X32
|
default OLED_SSD1306_128X32
|
||||||
help
|
help
|
||||||
@@ -500,7 +565,7 @@ choice DISPLAY_OLED_TYPE
|
|||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
choice DISPLAY_LCD_TYPE
|
choice DISPLAY_LCD_TYPE
|
||||||
depends on BOARD_TYPE_BREAD_COMPACT_WIFI_LCD || BOARD_TYPE_BREAD_COMPACT_ESP32_LCD || BOARD_TYPE_CGC || BOARD_TYPE_WAVESHARE_P4_NANO || BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_XC || BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
depends on BOARD_TYPE_BREAD_COMPACT_WIFI_LCD || BOARD_TYPE_BREAD_COMPACT_ESP32_LCD || BOARD_TYPE_CGC || BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
||||||
prompt "LCD Type"
|
prompt "LCD Type"
|
||||||
default LCD_ST7789_240X320
|
default LCD_ST7789_240X320
|
||||||
help
|
help
|
||||||
@@ -535,20 +600,12 @@ choice DISPLAY_LCD_TYPE
|
|||||||
bool "ILI9341 240*320, Non-IPS"
|
bool "ILI9341 240*320, Non-IPS"
|
||||||
config LCD_GC9A01_240X240
|
config LCD_GC9A01_240X240
|
||||||
bool "GC9A01 240*240 Circle"
|
bool "GC9A01 240*240 Circle"
|
||||||
config LCD_TYPE_800_1280_10_1_INCH
|
|
||||||
bool "Waveshare 101M-8001280-IPS-CT-K Display"
|
|
||||||
config LCD_TYPE_800_1280_10_1_INCH_A
|
|
||||||
bool "Waveshare 10.1-DSI-TOUCH-A Display"
|
|
||||||
config LCD_TYPE_800_800_3_4_INCH
|
|
||||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C with 800*800 3.4inch round display"
|
|
||||||
config LCD_TYPE_720_720_4_INCH
|
|
||||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4C with 720*720 4inch round display"
|
|
||||||
config LCD_CUSTOM
|
config LCD_CUSTOM
|
||||||
bool "Custom LCD (自定义屏幕参数)"
|
bool "Custom LCD (自定义屏幕参数)"
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
choice DISPLAY_ESP32S3_KORVO2_V3
|
choice DISPLAY_ESP32S3_KORVO2_V3
|
||||||
depends on BOARD_TYPE_ESP_KORVO2_V3
|
depends on BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_ESP_KORVO2_V3_RNDIS
|
||||||
prompt "ESP32S3_KORVO2_V3 LCD Type"
|
prompt "ESP32S3_KORVO2_V3 LCD Type"
|
||||||
default ESP32S3_KORVO2_V3_LCD_ST7789
|
default ESP32S3_KORVO2_V3_LCD_ST7789
|
||||||
help
|
help
|
||||||
@@ -560,7 +617,7 @@ choice DISPLAY_ESP32S3_KORVO2_V3
|
|||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
choice DISPLAY_ESP32S3_AUDIO_BOARD
|
choice DISPLAY_ESP32S3_AUDIO_BOARD
|
||||||
depends on BOARD_TYPE_WAVESHARE_S3_AUDIO_BOARD
|
depends on BOARD_TYPE_WAVESHARE_ESP32_S3_AUDIO_BOARD
|
||||||
prompt "ESP32S3_AUDIO_BOARD LCD Type"
|
prompt "ESP32S3_AUDIO_BOARD LCD Type"
|
||||||
default AUDIO_BOARD_LCD_JD9853
|
default AUDIO_BOARD_LCD_JD9853
|
||||||
help
|
help
|
||||||
@@ -571,6 +628,19 @@ choice DISPLAY_ESP32S3_AUDIO_BOARD
|
|||||||
bool "ST7789 240*320"
|
bool "ST7789 240*320"
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
choice DISPLAY_ESP32S3_TOUCH_LCD_1_85C
|
||||||
|
depends on BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85C
|
||||||
|
prompt "ESP32S3_TOUCH_LCD_1_85C version"
|
||||||
|
default VERSION_2_0
|
||||||
|
help
|
||||||
|
hardware version
|
||||||
|
config VERSION_1_0
|
||||||
|
bool "version 1.0"
|
||||||
|
config VERSION_2_0
|
||||||
|
bool "version 2.0"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
|
||||||
choice DISPLAY_STYLE
|
choice DISPLAY_STYLE
|
||||||
prompt "Select display style"
|
prompt "Select display style"
|
||||||
default USE_DEFAULT_MESSAGE_STYLE
|
default USE_DEFAULT_MESSAGE_STYLE
|
||||||
@@ -585,9 +655,22 @@ choice DISPLAY_STYLE
|
|||||||
|
|
||||||
config USE_EMOTE_MESSAGE_STYLE
|
config USE_EMOTE_MESSAGE_STYLE
|
||||||
bool "Emote animation style"
|
bool "Emote animation style"
|
||||||
depends on BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ECHOEAR || BOARD_TYPE_LICHUANG_DEV_S3
|
depends on BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_3 \
|
||||||
|
|| BOARD_TYPE_ECHOEAR || BOARD_TYPE_LICHUANG_DEV_S3 \
|
||||||
|
|| BOARD_TYPE_ESP_SENSAIRSHUTTLE
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
config USE_MULTILINE_CHAT_MESSAGE
|
||||||
|
bool "Use multiline chat message display (default mode only)"
|
||||||
|
depends on USE_DEFAULT_MESSAGE_STYLE
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
When enabled, the chat message area in the default display mode shows
|
||||||
|
multiple wrapped lines that grow upward from the bottom of the screen,
|
||||||
|
with auto-adaptive height.
|
||||||
|
When disabled (default), a single-line horizontally scrolling label
|
||||||
|
is shown at the bottom of the screen.
|
||||||
|
|
||||||
choice WAKE_WORD_TYPE
|
choice WAKE_WORD_TYPE
|
||||||
prompt "Wake Word Implementation Type"
|
prompt "Wake Word Implementation Type"
|
||||||
default USE_AFE_WAKE_WORD if (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
default USE_AFE_WAKE_WORD if (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
||||||
@@ -649,6 +732,16 @@ config SEND_WAKE_WORD_DATA
|
|||||||
help
|
help
|
||||||
Send wake word data to the server as the first message of the conversation and wait for response
|
Send wake word data to the server as the first message of the conversation and wait for response
|
||||||
|
|
||||||
|
config WAKE_WORD_DETECTION_IN_LISTENING
|
||||||
|
bool "Enable Wake Word Detection in Listening Mode"
|
||||||
|
default n
|
||||||
|
depends on USE_AFE_WAKE_WORD || USE_CUSTOM_WAKE_WORD
|
||||||
|
help
|
||||||
|
Enable wake word detection while in listening mode.
|
||||||
|
When enabled, the device can detect wake word during listening,
|
||||||
|
which allows interrupting the current conversation.
|
||||||
|
When disabled (default), wake word detection is turned off during listening.
|
||||||
|
|
||||||
config USE_AUDIO_PROCESSOR
|
config USE_AUDIO_PROCESSOR
|
||||||
bool "Enable Audio Noise Reduction"
|
bool "Enable Audio Noise Reduction"
|
||||||
default y
|
default y
|
||||||
@@ -660,10 +753,12 @@ config USE_DEVICE_AEC
|
|||||||
bool "Enable Device-Side AEC"
|
bool "Enable Device-Side AEC"
|
||||||
default n
|
default n
|
||||||
depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE \
|
depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE \
|
||||||
|| BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_1_75 || BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_1_83\
|
|| BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83\
|
||||||
|| BOARD_TYPE_WAVESHARE_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_7B \
|
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B \
|
||||||
|| BOARD_TYPE_WAVESHARE_P4_WIFI6_TOUCH_LCD_XC || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_YUNLIAO_S3 \
|
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_YUNLIAO_S3 \
|
||||||
|| BOARD_TYPE_ECHOEAR || BOARD_TYPE_WAVESHARE_S3_TOUCH_LCD_3_49)
|
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1 \
|
||||||
|
|| BOARD_TYPE_ECHOEAR || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49 || BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2 || BOARD_TYPE_ZHENGCHEN_CAM || BOARD_TYPE_ZHENGCHEN_CAM_ML307 \
|
||||||
|
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4_3C)
|
||||||
help
|
help
|
||||||
To work properly, device-side AEC requires a clean output reference path from the speaker signal and physical acoustic isolation between the microphone and speaker.
|
To work properly, device-side AEC requires a clean output reference path from the speaker signal and physical acoustic isolation between the microphone and speaker.
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ AppAiAgent::AppAiAgent()
|
|||||||
// Configure App name
|
// Configure App name
|
||||||
setAppInfo().name = "AI.AGENT";
|
setAppInfo().name = "AI.AGENT";
|
||||||
// Configure App icon
|
// Configure App icon
|
||||||
setAppInfo().icon = (void*)&icon_ai_agent;
|
static auto icon = assets::get_image("icon_ai_agent.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
// Configure App theme color
|
// Configure App theme color
|
||||||
static uint32_t theme_color = 0x33CC99;
|
static uint32_t theme_color = 0x33CC99;
|
||||||
setAppInfo().userData = (void*)&theme_color;
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "app_app_center.h"
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <assets/assets.h>
|
||||||
|
#include <apps/common/common.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
using namespace mooncake;
|
||||||
|
using namespace smooth_ui_toolkit::lvgl_cpp;
|
||||||
|
|
||||||
|
AppAppCenter::AppAppCenter()
|
||||||
|
{
|
||||||
|
// 配置 App 名
|
||||||
|
setAppInfo().name = "APP.CENTER";
|
||||||
|
// 配置 App 图标
|
||||||
|
static auto icon = assets::get_image("icon_app_center.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
|
// 配置 App 主题颜色
|
||||||
|
static uint32_t theme_color = 0xF4A354;
|
||||||
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppAppCenter::onCreate()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on create");
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppAppCenter::onOpen()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on open");
|
||||||
|
|
||||||
|
// Create loading page
|
||||||
|
std::unique_ptr<view::LoadingPage> loading_page;
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page = std::make_unique<view::LoadingPage>(0xF4A354, 0x332609);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start network
|
||||||
|
GetHAL().startNetwork([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fetch app list
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage("Fetching app list...");
|
||||||
|
}
|
||||||
|
_app_list = GetHAL().fetchAppList();
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
// Destroy loading page
|
||||||
|
loading_page.reset();
|
||||||
|
|
||||||
|
_app_list_page = std::make_unique<view::AppListPage>(_app_list);
|
||||||
|
|
||||||
|
view::create_home_indicator([&]() { close(); }, 0xFFDF9A, 0x47330A);
|
||||||
|
view::create_status_bar(0xFFDF9A, 0x47330A);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppAppCenter::onRunning()
|
||||||
|
{
|
||||||
|
if (_launch_requested) {
|
||||||
|
GetHAL().launchApp(_app_list[_selected_index].firmwareUrl, [&](int percent) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
if (_app_install_page) {
|
||||||
|
_app_install_page->setProgress(percent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
if (_app_list_page) {
|
||||||
|
_selected_index = _app_list_page->isSelected();
|
||||||
|
if (_selected_index >= 0) {
|
||||||
|
mclog::tagInfo(getAppInfo().name, "selected index: {}", _selected_index);
|
||||||
|
_app_list_page.reset();
|
||||||
|
_app_detail_page = std::make_unique<view::AppDetailPage>(_app_list[_selected_index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_app_detail_page) {
|
||||||
|
if (_app_detail_page->checkBack()) {
|
||||||
|
mclog::tagInfo(getAppInfo().name, "back to app list");
|
||||||
|
_app_detail_page.reset();
|
||||||
|
_app_list_page = std::make_unique<view::AppListPage>(_app_list);
|
||||||
|
} else if (_app_detail_page->checkLaunch()) {
|
||||||
|
mclog::tagInfo(getAppInfo().name, "launch app");
|
||||||
|
_app_detail_page.reset();
|
||||||
|
_app_install_page = std::make_unique<view::AppInstallPage>(_app_list[_selected_index]);
|
||||||
|
_launch_requested = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
view::update_home_indicator();
|
||||||
|
view::update_status_bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppAppCenter::onClose()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on close");
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
_app_list.clear();
|
||||||
|
_app_list_page.reset();
|
||||||
|
_app_detail_page.reset();
|
||||||
|
_app_install_page.reset();
|
||||||
|
_selected_index = -1;
|
||||||
|
_launch_requested = false;
|
||||||
|
|
||||||
|
view::destroy_home_indicator();
|
||||||
|
view::destroy_status_bar();
|
||||||
|
|
||||||
|
GetHAL().requestWarmReboot(3);
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include "view/view.h"
|
||||||
|
#include <mooncake.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 派生 App
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppAppCenter : public mooncake::AppAbility {
|
||||||
|
public:
|
||||||
|
AppAppCenter();
|
||||||
|
|
||||||
|
// 重写生命周期回调
|
||||||
|
void onCreate() override;
|
||||||
|
void onOpen() override;
|
||||||
|
void onRunning() override;
|
||||||
|
void onClose() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<app_center::AppInfo_t> _app_list;
|
||||||
|
std::unique_ptr<view::AppListPage> _app_list_page;
|
||||||
|
std::unique_ptr<view::AppDetailPage> _app_detail_page;
|
||||||
|
std::unique_ptr<view::AppInstallPage> _app_install_page;
|
||||||
|
int _selected_index = -1;
|
||||||
|
bool _launch_requested = false;
|
||||||
|
};
|
||||||
@@ -0,0 +1,278 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <smooth_lvgl.hpp>
|
||||||
|
#include <uitk/short_namespace.hpp>
|
||||||
|
#include <assets/assets.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace view {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppListPage {
|
||||||
|
public:
|
||||||
|
AppListPage(const app_center::AppInfoList_t& app_list)
|
||||||
|
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setAlign(LV_ALIGN_CENTER);
|
||||||
|
_panel->setBgColor(lv_color_hex(0xFFFAD6));
|
||||||
|
_panel->setFlexFlow(LV_FLEX_FLOW_COLUMN);
|
||||||
|
_panel->setFlexAlign(LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||||
|
_panel->setPadding(52, 72, 0, 0);
|
||||||
|
_panel->setPadRow(18);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setScrollbarMode(LV_SCROLLBAR_MODE_ACTIVE);
|
||||||
|
|
||||||
|
_bg_image = assets::get_image("app_center_bg.png");
|
||||||
|
if (_bg_image.data_size != 0) {
|
||||||
|
lv_obj_set_style_bg_image_src(_panel->get(), &_bg_image, LV_PART_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
_title_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
_title_panel->setSize(320, 28);
|
||||||
|
_title_panel->align(LV_ALIGN_TOP_MID, 0, 0);
|
||||||
|
_title_panel->setBgColor(lv_color_hex(0xF4A354));
|
||||||
|
_title_panel->setPadding(0, 0, 0, 0);
|
||||||
|
_title_panel->setRadius(0);
|
||||||
|
_title_panel->setBorderWidth(0);
|
||||||
|
_title_panel->setScrollbarMode(LV_SCROLLBAR_MODE_ACTIVE);
|
||||||
|
|
||||||
|
_title = std::make_unique<uitk::lvgl_cpp::Label>(*_title_panel);
|
||||||
|
_title->setText("App Center");
|
||||||
|
_title->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_title->setTextColor(lv_color_hex(0xFFF8C7));
|
||||||
|
_title->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for (const auto& app : app_list) {
|
||||||
|
auto btn = std::make_unique<uitk::lvgl_cpp::Button>(*_panel);
|
||||||
|
btn->setSize(282, 52);
|
||||||
|
btn->setRadius(18);
|
||||||
|
btn->setBorderWidth(0);
|
||||||
|
btn->setShadowWidth(0);
|
||||||
|
btn->setBgColor(lv_color_hex(0xFFDF9A));
|
||||||
|
|
||||||
|
btn->label().setText(app.name);
|
||||||
|
btn->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
btn->label().setTextColor(lv_color_hex(0x47330A));
|
||||||
|
btn->label().setLongMode(LV_LABEL_LONG_SCROLL_CIRCULAR);
|
||||||
|
btn->label().setWidth(220);
|
||||||
|
btn->label().setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
btn->label().setAlign(LV_ALIGN_CENTER);
|
||||||
|
|
||||||
|
btn->onClick().connect([this, index]() { _clicked_index = index; });
|
||||||
|
|
||||||
|
_buttons.push_back(std::move(btn));
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int isSelected()
|
||||||
|
{
|
||||||
|
int temp = _clicked_index;
|
||||||
|
_clicked_index = -1;
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _title_panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::vector<std::unique_ptr<uitk::lvgl_cpp::Button>> _buttons;
|
||||||
|
lv_image_dsc_t _bg_image;
|
||||||
|
|
||||||
|
int _clicked_index = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppDetailPage {
|
||||||
|
public:
|
||||||
|
AppDetailPage(const app_center::AppInfo_t& app_info)
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xFFFAD6));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
_panel->setFlexFlow(LV_FLEX_FLOW_COLUMN);
|
||||||
|
_panel->setFlexAlign(LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||||
|
_panel->setPadding(48, 72, 0, 0);
|
||||||
|
_panel->setPadRow(18);
|
||||||
|
_panel->setScrollbarMode(LV_SCROLLBAR_MODE_ACTIVE);
|
||||||
|
|
||||||
|
_bg_image = assets::get_image("app_center_bg.png");
|
||||||
|
if (_bg_image.data_size != 0) {
|
||||||
|
lv_obj_set_style_bg_image_src(_panel->get(), &_bg_image, LV_PART_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
_title = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_title->setText(app_info.name);
|
||||||
|
_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_title->setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_title->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_title->setLongMode(LV_LABEL_LONG_SCROLL_CIRCULAR);
|
||||||
|
_title->setWidth(220);
|
||||||
|
_title->setHeight(28);
|
||||||
|
|
||||||
|
_desc_label = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_desc_label->setText(app_info.description);
|
||||||
|
_desc_label->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_desc_label->setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_desc_label->setTextAlign(LV_TEXT_ALIGN_LEFT);
|
||||||
|
_desc_label->setWidth(260);
|
||||||
|
_desc_label->setLongMode(LV_LABEL_LONG_WRAP);
|
||||||
|
|
||||||
|
_btn_container = std::make_unique<uitk::lvgl_cpp::Container>(*_panel);
|
||||||
|
_btn_container->setSize(LV_PCT(100), 80);
|
||||||
|
_btn_container->setBgOpa(LV_OPA_TRANSP);
|
||||||
|
_btn_container->setBorderWidth(0);
|
||||||
|
_btn_container->setPadding(0, 0, 0, 0);
|
||||||
|
_btn_container->setPadColumn(28);
|
||||||
|
_btn_container->setFlexFlow(LV_FLEX_FLOW_ROW);
|
||||||
|
_btn_container->setFlexAlign(LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||||
|
|
||||||
|
_btn_back = std::make_unique<uitk::lvgl_cpp::Button>(*_btn_container);
|
||||||
|
_btn_back->setSize(112, 48);
|
||||||
|
_btn_back->setRadius(18);
|
||||||
|
_btn_back->setBgColor(lv_color_hex(0xFFDF9A));
|
||||||
|
_btn_back->setBorderWidth(0);
|
||||||
|
_btn_back->setShadowWidth(0);
|
||||||
|
_btn_back->label().setText("Back");
|
||||||
|
_btn_back->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_back->label().setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_btn_back->onClick().connect([this]() { _is_back = true; });
|
||||||
|
|
||||||
|
_btn_launch = std::make_unique<uitk::lvgl_cpp::Button>(*_btn_container);
|
||||||
|
_btn_launch->setSize(112, 48);
|
||||||
|
_btn_launch->setRadius(18);
|
||||||
|
_btn_launch->setBgColor(lv_color_hex(0xFFAC6D));
|
||||||
|
_btn_launch->setBorderWidth(0);
|
||||||
|
_btn_launch->setShadowWidth(0);
|
||||||
|
_btn_launch->label().setText("Launch");
|
||||||
|
_btn_launch->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_launch->label().setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_btn_launch->onClick().connect([this]() { _is_launch = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkBack()
|
||||||
|
{
|
||||||
|
if (_is_back) {
|
||||||
|
_is_back = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkLaunch()
|
||||||
|
{
|
||||||
|
if (_is_launch) {
|
||||||
|
_is_launch = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _desc_label;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _btn_container;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_back;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_launch;
|
||||||
|
lv_image_dsc_t _bg_image;
|
||||||
|
|
||||||
|
bool _is_back = false;
|
||||||
|
bool _is_launch = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppInstallPage {
|
||||||
|
public:
|
||||||
|
AppInstallPage(const app_center::AppInfo_t& app_info)
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xFFFAD6));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
_panel->setPadding(0, 0, 0, 0);
|
||||||
|
|
||||||
|
_bg_image = assets::get_image("app_center_bg.png");
|
||||||
|
if (_bg_image.data_size != 0) {
|
||||||
|
lv_obj_set_style_bg_image_src(_panel->get(), &_bg_image, LV_PART_MAIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
_title = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_title->setText(app_info.name);
|
||||||
|
_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_title->setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_title->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_title->align(LV_ALIGN_TOP_MID, 0, 15);
|
||||||
|
_title->setLongMode(LV_LABEL_LONG_SCROLL_CIRCULAR);
|
||||||
|
_title->setWidth(220);
|
||||||
|
_title->setHeight(28);
|
||||||
|
|
||||||
|
_tips = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_tips->setText("Downloading...");
|
||||||
|
_tips->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_tips->setTextColor(lv_color_hex(0xA36135));
|
||||||
|
_tips->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_tips->setLongMode(LV_LABEL_LONG_SCROLL_CIRCULAR);
|
||||||
|
_tips->align(LV_ALIGN_CENTER, 0, -40);
|
||||||
|
|
||||||
|
_progress_bar = std::make_unique<uitk::lvgl_cpp::Bar>(*_panel);
|
||||||
|
_progress_bar->setSize(260, 92);
|
||||||
|
_progress_bar->setRadius(18);
|
||||||
|
_progress_bar->setRadius(0, LV_PART_INDICATOR);
|
||||||
|
_progress_bar->align(LV_ALIGN_CENTER, 0, 23);
|
||||||
|
_progress_bar->setBgColor(lv_color_hex(0xFFDF9A));
|
||||||
|
_progress_bar->setBgColor(lv_color_hex(0xFF9E5D), LV_PART_INDICATOR);
|
||||||
|
_progress_bar->setBgOpa(LV_OPA_COVER);
|
||||||
|
_progress_bar->setRange(0, 100);
|
||||||
|
_progress_bar->setValue(0);
|
||||||
|
|
||||||
|
_progress = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_progress->setTextFont(&lv_font_montserrat_24);
|
||||||
|
_progress->setTextColor(lv_color_hex(0x47330A));
|
||||||
|
_progress->align(LV_ALIGN_CENTER, 0, 23);
|
||||||
|
_progress->setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
void setProgress(int percent)
|
||||||
|
{
|
||||||
|
_progress->setText(fmt::format("{}%", percent));
|
||||||
|
_progress_bar->setValue(percent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _tips;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _progress;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Bar> _progress_bar;
|
||||||
|
lv_image_dsc_t _bg_image;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace view
|
||||||
@@ -47,7 +47,8 @@ AppAvatar::AppAvatar()
|
|||||||
// 配置 App 名
|
// 配置 App 名
|
||||||
setAppInfo().name = "AVATAR";
|
setAppInfo().name = "AVATAR";
|
||||||
// 配置 App 图标
|
// 配置 App 图标
|
||||||
setAppInfo().icon = (void*)&icon_sentinel;
|
static auto icon = assets::get_image("icon_sentinel.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
// 配置 App 主题颜色
|
// 配置 App 主题颜色
|
||||||
static uint32_t theme_color = 0xFF6699;
|
static uint32_t theme_color = 0xFF6699;
|
||||||
setAppInfo().userData = (void*)&theme_color;
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
|||||||
@@ -0,0 +1,155 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "app_dance.h"
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <stackchan/stackchan.h>
|
||||||
|
#include <apps/common/common.h>
|
||||||
|
#include <assets/assets.h>
|
||||||
|
|
||||||
|
using namespace mooncake;
|
||||||
|
using namespace stackchan;
|
||||||
|
|
||||||
|
AppDance::AppDance()
|
||||||
|
{
|
||||||
|
// 配置 App 名
|
||||||
|
setAppInfo().name = "DANCE";
|
||||||
|
// 配置 App 图标
|
||||||
|
static auto icon = assets::get_image("icon_dance.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
|
// 配置 App 主题颜色
|
||||||
|
static uint32_t theme_color = 0xB77BFF;
|
||||||
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// App 被安装时会被调用
|
||||||
|
void AppDance::onCreate()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on create");
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppDance::onOpen()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on open");
|
||||||
|
|
||||||
|
// Create loading page
|
||||||
|
std::unique_ptr<view::LoadingPage> loading_page;
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page = std::make_unique<view::LoadingPage>(0xB77BFF, 0x422268);
|
||||||
|
loading_page->setMessage("Starting\n BLE server...");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start BLE service
|
||||||
|
GetHAL().startBleServer();
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
// Destroy loading page
|
||||||
|
loading_page.reset();
|
||||||
|
|
||||||
|
// Create default avatar
|
||||||
|
auto avatar = std::make_unique<avatar::DefaultAvatar>();
|
||||||
|
avatar->init(lv_screen_active());
|
||||||
|
GetStackChan().attachAvatar(std::move(avatar));
|
||||||
|
|
||||||
|
/* ------------------------------- BLE events ------------------------------- */
|
||||||
|
GetHAL().onBleAvatarData.connect([&](const char* data) {
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
if (_ble_avatar_data.update_flag) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ble_avatar_data.update_flag = true;
|
||||||
|
_ble_avatar_data.data_ptr = (char*)data;
|
||||||
|
});
|
||||||
|
|
||||||
|
GetHAL().onBleMotionData.connect([&](const char* data) {
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
if (_ble_motion_data.update_flag) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ble_motion_data.update_flag = true;
|
||||||
|
_ble_motion_data.data_ptr = (char*)data;
|
||||||
|
});
|
||||||
|
|
||||||
|
GetHAL().onBleRgbData.connect([&](const char* data) {
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
if (_ble_rgb_data.update_flag) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ble_rgb_data.update_flag = true;
|
||||||
|
_ble_rgb_data.data_ptr = (char*)data;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ----------------------------- Common widgets ----------------------------- */
|
||||||
|
view::create_home_indicator([&]() { close(); }, 0xB77BFF, 0x422268);
|
||||||
|
view::create_status_bar(0xB77BFF, 0x422268);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppDance::onRunning()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
|
||||||
|
LvglLockGuard lvgl_lock;
|
||||||
|
|
||||||
|
if (_ble_avatar_data.update_flag) {
|
||||||
|
GetStackChan().updateAvatarFromJson(_ble_avatar_data.data_ptr);
|
||||||
|
_ble_avatar_data.update_flag = false;
|
||||||
|
_ble_avatar_data.data_ptr = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_ble_motion_data.update_flag) {
|
||||||
|
check_auto_angle_sync_mode();
|
||||||
|
GetStackChan().updateMotionFromJson(_ble_motion_data.data_ptr);
|
||||||
|
_ble_motion_data.update_flag = false;
|
||||||
|
_ble_motion_data.data_ptr = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_ble_rgb_data.update_flag) {
|
||||||
|
GetStackChan().updateNeonLightFromJson(_ble_rgb_data.data_ptr);
|
||||||
|
_ble_rgb_data.update_flag = false;
|
||||||
|
_ble_rgb_data.data_ptr = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetStackChan().update();
|
||||||
|
|
||||||
|
view::update_home_indicator();
|
||||||
|
view::update_status_bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppDance::onClose()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on close");
|
||||||
|
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
GetStackChan().resetAvatar();
|
||||||
|
|
||||||
|
GetHAL().onBleAvatarData.clear();
|
||||||
|
GetHAL().onBleMotionData.clear();
|
||||||
|
|
||||||
|
view::destroy_home_indicator();
|
||||||
|
view::destroy_status_bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
GetHAL().requestWarmReboot(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppDance::check_auto_angle_sync_mode()
|
||||||
|
{
|
||||||
|
auto& motion = GetStackChan().motion();
|
||||||
|
|
||||||
|
// If far from last command, enable auto angle sync
|
||||||
|
if (GetHAL().millis() - _last_motion_cmd_tick > 2000) {
|
||||||
|
motion.setAutoAngleSyncEnabled(true);
|
||||||
|
} else {
|
||||||
|
motion.setAutoAngleSyncEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
_last_motion_cmd_tick = GetHAL().millis();
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppDance : public mooncake::AppAbility {
|
||||||
|
public:
|
||||||
|
AppDance();
|
||||||
|
|
||||||
|
void onCreate() override;
|
||||||
|
void onOpen() override;
|
||||||
|
void onRunning() override;
|
||||||
|
void onClose() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::mutex _mutex;
|
||||||
|
|
||||||
|
struct BleHandlerData_t {
|
||||||
|
bool update_flag = false;
|
||||||
|
char* data_ptr = nullptr;
|
||||||
|
};
|
||||||
|
BleHandlerData_t _ble_avatar_data;
|
||||||
|
BleHandlerData_t _ble_motion_data;
|
||||||
|
BleHandlerData_t _ble_rgb_data;
|
||||||
|
|
||||||
|
uint32_t _last_motion_cmd_tick = 0;
|
||||||
|
|
||||||
|
void check_auto_angle_sync_mode();
|
||||||
|
};
|
||||||
@@ -26,7 +26,8 @@ AppEspnowControl::AppEspnowControl()
|
|||||||
// 配置 App 名
|
// 配置 App 名
|
||||||
setAppInfo().name = "ESPNOW.REMOTE";
|
setAppInfo().name = "ESPNOW.REMOTE";
|
||||||
// 配置 App 图标
|
// 配置 App 图标
|
||||||
setAppInfo().icon = (void*)&icon_controller;
|
static auto icon = assets::get_image("icon_controller.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
// 配置 App 主题颜色
|
// 配置 App 主题颜色
|
||||||
static uint32_t theme_color = 0x7ACE74;
|
static uint32_t theme_color = 0x7ACE74;
|
||||||
setAppInfo().userData = (void*)&theme_color;
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ private:
|
|||||||
* @param options
|
* @param options
|
||||||
* @return int Selected option index
|
* @return int Selected option index
|
||||||
*/
|
*/
|
||||||
static inline int create_page_selector_and_wait(std::string_view label, const std::vector<std::string> options)
|
static inline int create_page_selector_and_wait(std::string_view label, const std::vector<std::string>& options)
|
||||||
{
|
{
|
||||||
GetHAL().lvglLock();
|
GetHAL().lvglLock();
|
||||||
auto page_selector = std::make_unique<view::PageSelector>(label, options);
|
auto page_selector = std::make_unique<view::PageSelector>(label, options);
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "app_ezdata.h"
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <assets/assets.h>
|
||||||
|
#include <stackchan/stackchan.h>
|
||||||
|
|
||||||
|
using namespace mooncake;
|
||||||
|
using namespace stackchan;
|
||||||
|
|
||||||
|
AppEzdata::AppEzdata()
|
||||||
|
{
|
||||||
|
// 配置 App 名
|
||||||
|
setAppInfo().name = "EZDATA";
|
||||||
|
// 配置 App 图标
|
||||||
|
static auto icon = assets::get_image("icon_ezdata.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
|
// 配置 App 主题颜色
|
||||||
|
static uint32_t theme_color = 0x60A5FA;
|
||||||
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppEzdata::onCreate()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on create");
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppEzdata::onOpen()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on open");
|
||||||
|
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
// Create default avatar
|
||||||
|
auto avatar = std::make_unique<avatar::DefaultAvatar>();
|
||||||
|
avatar->init(lv_screen_active());
|
||||||
|
GetStackChan().attachAvatar(std::move(avatar));
|
||||||
|
|
||||||
|
// Create loading page
|
||||||
|
_loading_page = std::make_unique<view::LoadingPage>(0x60A5FA, 0x072448);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start ezdata service
|
||||||
|
GetHAL().startEzDataService([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
_loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
/* --------------------------------- Events --------------------------------- */
|
||||||
|
GetHAL().onEzdataPairCode.connect([this](std::string_view code) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
// Destroy loading page
|
||||||
|
_loading_page.reset();
|
||||||
|
|
||||||
|
// Client connected
|
||||||
|
if (code.empty()) {
|
||||||
|
_ezdata_guide_page.reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_ezdata_guide_page = std::make_unique<view::EzdataGuidePage>(code);
|
||||||
|
});
|
||||||
|
// _ezdata_guide_page = std::make_unique<view::EzdataGuidePage>("941004");
|
||||||
|
|
||||||
|
/* ----------------------------- Common widgets ----------------------------- */
|
||||||
|
view::create_home_indicator([&]() { close(); }, 0x93C3FE, 0x072448);
|
||||||
|
view::create_status_bar(0x93C3FE, 0x072448);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppEzdata::onRunning()
|
||||||
|
{
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
GetStackChan().update();
|
||||||
|
|
||||||
|
view::update_home_indicator();
|
||||||
|
view::update_status_bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppEzdata::onClose()
|
||||||
|
{
|
||||||
|
mclog::tagInfo(getAppInfo().name, "on close");
|
||||||
|
|
||||||
|
LvglLockGuard lock;
|
||||||
|
|
||||||
|
GetStackChan().resetAvatar();
|
||||||
|
|
||||||
|
view::destroy_home_indicator();
|
||||||
|
view::destroy_status_bar();
|
||||||
|
|
||||||
|
GetHAL().requestWarmReboot(4);
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include "view/view.h"
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <apps/common/common.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 派生 App
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AppEzdata : public mooncake::AppAbility {
|
||||||
|
public:
|
||||||
|
AppEzdata();
|
||||||
|
|
||||||
|
void onCreate() override;
|
||||||
|
void onOpen() override;
|
||||||
|
void onRunning() override;
|
||||||
|
void onClose() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<view::LoadingPage> _loading_page;
|
||||||
|
std::unique_ptr<view::EzdataGuidePage> _ezdata_guide_page;
|
||||||
|
};
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <smooth_lvgl.hpp>
|
||||||
|
#include <uitk/short_namespace.hpp>
|
||||||
|
#include <string_view>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace view {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class EzdataGuidePage {
|
||||||
|
public:
|
||||||
|
EzdataGuidePage(std::string_view pairCode)
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0x60A5FA));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
_panel->setPadding(0, 0, 0, 0);
|
||||||
|
|
||||||
|
_panel_url = std::make_unique<uitk::lvgl_cpp::Container>(*_panel);
|
||||||
|
_panel_url->setScrollbarMode(LV_SCROLLBAR_MODE_OFF);
|
||||||
|
_panel_url->setBgColor(lv_color_hex(0xFFFFFF));
|
||||||
|
_panel_url->align(LV_ALIGN_TOP_MID, 0, 42);
|
||||||
|
_panel_url->setBorderWidth(0);
|
||||||
|
_panel_url->setSize(296, 51);
|
||||||
|
_panel_url->setRadius(18);
|
||||||
|
|
||||||
|
_panel_pair_code = std::make_unique<uitk::lvgl_cpp::Container>(*_panel);
|
||||||
|
_panel_pair_code->setScrollbarMode(LV_SCROLLBAR_MODE_OFF);
|
||||||
|
_panel_pair_code->setBgColor(lv_color_hex(0xFFFFFF));
|
||||||
|
_panel_pair_code->align(LV_ALIGN_TOP_MID, 0, 138);
|
||||||
|
_panel_pair_code->setBorderWidth(0);
|
||||||
|
_panel_pair_code->setSize(296, 86);
|
||||||
|
_panel_pair_code->setRadius(18);
|
||||||
|
|
||||||
|
_title_url = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_title_url->setText("Ezdata Web client:");
|
||||||
|
_title_url->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_title_url->setTextColor(lv_color_hex(0x0E2648));
|
||||||
|
_title_url->align(LV_ALIGN_TOP_LEFT, 27, 16);
|
||||||
|
|
||||||
|
_msg_url = std::make_unique<uitk::lvgl_cpp::Label>(*_panel_url);
|
||||||
|
_msg_url->setText("https://my.m5stack.com/ezdata2");
|
||||||
|
_msg_url->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_msg_url->setTextColor(lv_color_hex(0x0E2648));
|
||||||
|
_msg_url->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
|
||||||
|
_title_pair_code = std::make_unique<uitk::lvgl_cpp::Label>(*_panel);
|
||||||
|
_title_pair_code->setText("Pair Code:");
|
||||||
|
_title_pair_code->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_title_pair_code->setTextColor(lv_color_hex(0x0E2648));
|
||||||
|
_title_pair_code->align(LV_ALIGN_TOP_LEFT, 27, 113);
|
||||||
|
|
||||||
|
_msg_pair_code = std::make_unique<uitk::lvgl_cpp::Label>(*_panel_pair_code);
|
||||||
|
_msg_pair_code->setText(pairCode);
|
||||||
|
_msg_pair_code->setTextFont(&lv_font_montserrat_24);
|
||||||
|
_msg_pair_code->setTextColor(lv_color_hex(0x0E2648));
|
||||||
|
_msg_pair_code->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel_url;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel_pair_code;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title_url;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _msg_url;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title_pair_code;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _msg_pair_code;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace view
|
||||||
@@ -394,6 +394,7 @@ void LauncherView::init(std::vector<mooncake::AppProps_t> appPorps)
|
|||||||
_lr_indicator_panels.back()->onClick().connect([scroll_to_nearby_icon]() { scroll_to_nearby_icon(-1); });
|
_lr_indicator_panels.back()->onClick().connect([scroll_to_nearby_icon]() { scroll_to_nearby_icon(-1); });
|
||||||
|
|
||||||
_lr_indicators_images.push_back(std::make_unique<Image>(_lr_indicator_panels.back()->get()));
|
_lr_indicators_images.push_back(std::make_unique<Image>(_lr_indicator_panels.back()->get()));
|
||||||
|
static auto icon_indicator_left = assets::get_image("icon_indicator_left.bin");
|
||||||
_lr_indicators_images.back()->setSrc(&icon_indicator_left);
|
_lr_indicators_images.back()->setSrc(&icon_indicator_left);
|
||||||
_lr_indicators_images.back()->align(LV_ALIGN_CENTER, 0, 0);
|
_lr_indicators_images.back()->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
|
||||||
@@ -409,6 +410,7 @@ void LauncherView::init(std::vector<mooncake::AppProps_t> appPorps)
|
|||||||
_lr_indicator_panels.back()->onClick().connect([scroll_to_nearby_icon]() { scroll_to_nearby_icon(1); });
|
_lr_indicator_panels.back()->onClick().connect([scroll_to_nearby_icon]() { scroll_to_nearby_icon(1); });
|
||||||
|
|
||||||
_lr_indicators_images.push_back(std::make_unique<Image>(_lr_indicator_panels.back()->get()));
|
_lr_indicators_images.push_back(std::make_unique<Image>(_lr_indicator_panels.back()->get()));
|
||||||
|
static auto icon_indicator_right = assets::get_image("icon_indicator_right.bin");
|
||||||
_lr_indicators_images.back()->setSrc(&icon_indicator_right);
|
_lr_indicators_images.back()->setSrc(&icon_indicator_right);
|
||||||
_lr_indicators_images.back()->align(LV_ALIGN_CENTER, 0, 0);
|
_lr_indicators_images.back()->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ AppSetup::AppSetup()
|
|||||||
// 配置 App 名
|
// 配置 App 名
|
||||||
setAppInfo().name = "SETUP";
|
setAppInfo().name = "SETUP";
|
||||||
// 配置 App 图标
|
// 配置 App 图标
|
||||||
setAppInfo().icon = (void*)&icon_setup;
|
static auto icon = assets::get_image("icon_setup.bin");
|
||||||
|
setAppInfo().icon = (void*)&icon;
|
||||||
// 配置 App 主题颜色
|
// 配置 App 主题颜色
|
||||||
static uint32_t theme_color = 0xB3B3B3;
|
static uint32_t theme_color = 0xB3B3B3;
|
||||||
setAppInfo().userData = (void*)&theme_color;
|
setAppInfo().userData = (void*)&theme_color;
|
||||||
@@ -41,61 +42,82 @@ void AppSetup::onOpen()
|
|||||||
_need_warm_reset = false;
|
_need_warm_reset = false;
|
||||||
_magic_count = 0;
|
_magic_count = 0;
|
||||||
|
|
||||||
_menu_sections = {{
|
_menu_sections = {
|
||||||
"Connectivity",
|
{
|
||||||
{{"Set Up Wi-Fi",
|
"Wi-Fi",
|
||||||
[&]() {
|
{{"Change Wi-Fi",
|
||||||
_destroy_menu = true;
|
[&]() {
|
||||||
_need_warm_reset = true;
|
_destroy_menu = true;
|
||||||
_worker = std::make_unique<WifiSetupWorker>();
|
_need_warm_reset = true;
|
||||||
}}},
|
_worker = std::make_unique<WifiSetupWorker>();
|
||||||
},
|
}}},
|
||||||
{
|
},
|
||||||
"Servo",
|
{
|
||||||
{{"Calibration",
|
"Device",
|
||||||
[&]() {
|
{{"Brightness",
|
||||||
_destroy_menu = true;
|
[&]() {
|
||||||
_worker = std::make_unique<ZeroCalibrationWorker>();
|
_destroy_menu = true;
|
||||||
}},
|
_worker = std::make_unique<BrightnessSetupWorker>();
|
||||||
{"LED Strips Test",
|
}},
|
||||||
[&]() {
|
{"Volume",
|
||||||
_destroy_menu = true;
|
[&]() {
|
||||||
_worker = std::make_unique<RgbTestWorker>();
|
_destroy_menu = true;
|
||||||
}}},
|
_worker = std::make_unique<VolumeSetupWorker>();
|
||||||
},
|
}},
|
||||||
{
|
{"Timezone",
|
||||||
"Display",
|
[&]() {
|
||||||
{{"Brightness",
|
_destroy_menu = true;
|
||||||
[&]() {
|
_worker = std::make_unique<TimezoneWorker>();
|
||||||
_destroy_menu = true;
|
}}},
|
||||||
_worker = std::make_unique<BrightnessSetupWorker>();
|
},
|
||||||
}}},
|
{
|
||||||
},
|
"Hardware Test",
|
||||||
{
|
{{"Servo",
|
||||||
"System",
|
[&]() {
|
||||||
{{"Timezone",
|
_destroy_menu = true;
|
||||||
[&]() {
|
_worker = std::make_unique<ZeroCalibrationWorker>();
|
||||||
_destroy_menu = true;
|
}},
|
||||||
_worker = std::make_unique<TimezoneWorker>();
|
{"RGB Strip",
|
||||||
}}},
|
[&]() {
|
||||||
},
|
_destroy_menu = true;
|
||||||
{
|
_worker = std::make_unique<RgbTestWorker>();
|
||||||
"About",
|
}}},
|
||||||
{{fmt::format("FW Version: {}", common::FirmwareVersion),
|
},
|
||||||
[&]() {
|
{
|
||||||
_magic_count++;
|
"Account",
|
||||||
if (_magic_count >= 10) {
|
{{"Unbind & Reset",
|
||||||
_magic_count = 0;
|
[&]() {
|
||||||
_destroy_menu = true;
|
_destroy_menu = true;
|
||||||
_worker = std::make_unique<FwVersionWorker>();
|
_need_warm_reset = true;
|
||||||
}
|
_worker = std::make_unique<AccountWorker>();
|
||||||
}},
|
}}},
|
||||||
{"Factory Reset",
|
},
|
||||||
[&]() {
|
{
|
||||||
_destroy_menu = true;
|
"Firmware",
|
||||||
_worker = std::make_unique<FactoryResetWorker>();
|
{
|
||||||
}}},
|
{fmt::format("Version: {}", common::FirmwareVersion),
|
||||||
}};
|
[&]() {
|
||||||
|
_magic_count++;
|
||||||
|
if (_magic_count >= 10) {
|
||||||
|
_magic_count = 0;
|
||||||
|
_destroy_menu = true;
|
||||||
|
_worker = std::make_unique<FwVersionWorker>();
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
{"Check for Updates",
|
||||||
|
[&]() {
|
||||||
|
_destroy_menu = true;
|
||||||
|
_need_warm_reset = true;
|
||||||
|
_worker = std::make_unique<SystemUpdateWorker>();
|
||||||
|
}},
|
||||||
|
// {"Factory Reset",
|
||||||
|
// [&]() {
|
||||||
|
// _destroy_menu = true;
|
||||||
|
// _worker = std::make_unique<FactoryResetWorker>();
|
||||||
|
// }}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
LvglLockGuard lock;
|
LvglLockGuard lock;
|
||||||
|
|
||||||
@@ -146,6 +168,6 @@ void AppSetup::onClose()
|
|||||||
view::destroy_status_bar();
|
view::destroy_status_bar();
|
||||||
|
|
||||||
if (_need_warm_reset) {
|
if (_need_warm_reset) {
|
||||||
GetHAL().requestWarmReboot(3);
|
GetHAL().requestWarmReboot(6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <hal/hal.h>
|
#include <hal/hal.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <apps/common/loading_page/loading_page.h>
|
||||||
|
|
||||||
using namespace uitk;
|
using namespace uitk;
|
||||||
using namespace uitk::lvgl_cpp;
|
using namespace uitk::lvgl_cpp;
|
||||||
@@ -294,3 +295,35 @@ void FwVersionWorker::update()
|
|||||||
_egg->update();
|
_egg->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemUpdateWorker::SystemUpdateWorker()
|
||||||
|
{
|
||||||
|
auto loading_page = std::make_unique<view::LoadingPage>(0xF6F6F6, 0x26206A);
|
||||||
|
GetHAL().lvglUnlock();
|
||||||
|
|
||||||
|
// Start network
|
||||||
|
GetHAL().startNetwork([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update Firmware
|
||||||
|
bool result = GetHAL().updateFirmware([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hold the result for a while
|
||||||
|
GetHAL().delay(3000);
|
||||||
|
|
||||||
|
GetHAL().lvglLock();
|
||||||
|
_is_done = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemUpdateWorker::~SystemUpdateWorker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SystemUpdateWorker::update()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "workers.h"
|
||||||
|
#include <hal/hal.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <apps/common/loading_page/loading_page.h>
|
||||||
|
|
||||||
|
using namespace uitk::lvgl_cpp;
|
||||||
|
using namespace setup_workers;
|
||||||
|
|
||||||
|
static std::string _tag = "Setup-Account";
|
||||||
|
|
||||||
|
AccountWorker::PanelInfo::PanelInfo(lv_obj_t* parent, int posY, std::string_view title, std::string_view info)
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<Container>(parent);
|
||||||
|
_panel->setBgColor(lv_color_hex(0xB8D3FD));
|
||||||
|
_panel->align(LV_ALIGN_TOP_MID, 0, posY);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(296, 108);
|
||||||
|
_panel->setPadding(0, 0, 0, 0);
|
||||||
|
_panel->setRadius(18);
|
||||||
|
_panel->removeFlag(LV_OBJ_FLAG_SCROLLABLE);
|
||||||
|
|
||||||
|
_label_title = std::make_unique<Label>(_panel->get());
|
||||||
|
_label_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_label_title->setTextColor(lv_color_hex(0x445B80));
|
||||||
|
_label_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
||||||
|
_label_title->setText(title);
|
||||||
|
|
||||||
|
_label_info = std::make_unique<Label>(_panel->get());
|
||||||
|
_label_info->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_label_info->setTextColor(lv_color_hex(0x07162C));
|
||||||
|
_label_info->align(LV_ALIGN_CENTER, 0, 14);
|
||||||
|
_label_info->setWidth(270);
|
||||||
|
_label_info->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_label_info->setText(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
AccountWorker::PageAccount::PageAccount(std::string_view username, std::string_view deviceName)
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xF6F6F6));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setPadding(0, 20, 0, 0);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
|
||||||
|
// Title
|
||||||
|
_label_title = std::make_unique<Label>(_panel->get());
|
||||||
|
_label_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_label_title->setTextColor(lv_color_hex(0x7E7B9C));
|
||||||
|
_label_title->align(LV_ALIGN_TOP_MID, 0, 12);
|
||||||
|
_label_title->setText("ACCOUNT");
|
||||||
|
|
||||||
|
_panel_username = std::make_unique<PanelInfo>(_panel->get(), 50, "M5Stack Account:", username);
|
||||||
|
_panel_device_name = std::make_unique<PanelInfo>(_panel->get(), 174, "Device Name:", deviceName);
|
||||||
|
|
||||||
|
// Button
|
||||||
|
_btn_unbind = std::make_unique<Button>(_panel->get());
|
||||||
|
apply_button_common_style(*_btn_unbind);
|
||||||
|
_btn_unbind->align(LV_ALIGN_TOP_MID, 0, 303);
|
||||||
|
_btn_unbind->setSize(290, 48);
|
||||||
|
_btn_unbind->setBgColor(lv_color_hex(0xFF8080));
|
||||||
|
_btn_unbind->label().setText("Unbind and factory reset");
|
||||||
|
_btn_unbind->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_unbind->label().setTextColor(lv_color_hex(0x731F1F));
|
||||||
|
_btn_unbind->onClick().connect([this]() { _is_unbind_clicked = true; });
|
||||||
|
|
||||||
|
_btn_quit = std::make_unique<Button>(_panel->get());
|
||||||
|
apply_button_common_style(*_btn_quit);
|
||||||
|
_btn_quit->align(LV_ALIGN_TOP_MID, 0, 371);
|
||||||
|
_btn_quit->setSize(290, 48);
|
||||||
|
_btn_quit->label().setText("Back");
|
||||||
|
_btn_quit->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_quit->onClick().connect([this]() { _is_quit_clicked = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
AccountWorker::AccountWorker()
|
||||||
|
{
|
||||||
|
// Update account info
|
||||||
|
{
|
||||||
|
auto loading_page = std::make_unique<view::LoadingPage>(0xF6F6F6, 0x26206A);
|
||||||
|
GetHAL().lvglUnlock();
|
||||||
|
|
||||||
|
// Start network
|
||||||
|
GetHAL().startNetwork([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update info
|
||||||
|
bool result = GetHAL().updateAccountInfo([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
GetHAL().delay(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetHAL().lvglLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto info = GetHAL().getUserAccountInfo();
|
||||||
|
_page_account = std::make_unique<PageAccount>(info.username, info.deviceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
AccountWorker::~AccountWorker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AccountWorker::update()
|
||||||
|
{
|
||||||
|
if (_page_account) {
|
||||||
|
if (_page_account->isUnbindClicked()) {
|
||||||
|
mclog::tagInfo(_tag, "unbind clicked");
|
||||||
|
_page_account.reset();
|
||||||
|
|
||||||
|
// Unbind account
|
||||||
|
{
|
||||||
|
auto loading_page = std::make_unique<view::LoadingPage>(0xF6F6F6, 0x26206A);
|
||||||
|
GetHAL().lvglUnlock();
|
||||||
|
|
||||||
|
bool result = GetHAL().unbindAccount([&](std::string_view msg) {
|
||||||
|
LvglLockGuard lock;
|
||||||
|
loading_page->setMessage(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
GetHAL().delay(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetHAL().lvglLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Factory reset
|
||||||
|
_worker_reset = std::make_unique<FactoryResetWorker>();
|
||||||
|
} else if (_page_account->isQuitClicked()) {
|
||||||
|
mclog::tagInfo(_tag, "quit clicked");
|
||||||
|
_is_done = true;
|
||||||
|
}
|
||||||
|
} else if (_worker_reset) {
|
||||||
|
_worker_reset->update();
|
||||||
|
if (_worker_reset->isDone()) {
|
||||||
|
_worker_reset.reset();
|
||||||
|
_is_done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,11 +31,6 @@ WifiSetupWorker::WifiSetupWorker()
|
|||||||
avatar->rightEye().setVisible(false);
|
avatar->rightEye().setVisible(false);
|
||||||
avatar->mouth().setVisible(false);
|
avatar->mouth().setVisible(false);
|
||||||
GetStackChan().attachAvatar(std::move(avatar));
|
GetStackChan().attachAvatar(std::move(avatar));
|
||||||
|
|
||||||
_app_config_signal_id =
|
|
||||||
GetHAL().onAppConfigEvent.connect([this](AppConfigEvent event) { _last_app_config_event = event; });
|
|
||||||
|
|
||||||
GetHAL().startAppConfigServer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiSetupWorker::~WifiSetupWorker()
|
WifiSetupWorker::~WifiSetupWorker()
|
||||||
@@ -69,30 +64,65 @@ void WifiSetupWorker::update_state()
|
|||||||
data.title = std::make_unique<Label>(lv_screen_active());
|
data.title = std::make_unique<Label>(lv_screen_active());
|
||||||
data.title->setTextFont(&lv_font_montserrat_20);
|
data.title->setTextFont(&lv_font_montserrat_20);
|
||||||
data.title->setTextColor(lv_color_hex(0x7E7B9C));
|
data.title->setTextColor(lv_color_hex(0x7E7B9C));
|
||||||
data.title->align(LV_ALIGN_TOP_MID, 0, 13);
|
data.title->align(LV_ALIGN_TOP_MID, 0, 0);
|
||||||
data.title->setText("APP SETUP");
|
data.title->setText("APP SETUP");
|
||||||
|
|
||||||
|
data.info = std::make_unique<Label>(lv_screen_active());
|
||||||
|
data.info->setTextFont(&lv_font_montserrat_14);
|
||||||
|
data.info->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
data.info->align(LV_ALIGN_TOP_MID, 0, 27);
|
||||||
|
data.info->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
data.info->setText("Install \"StackChan World\" app\nand login to your M5Stack account");
|
||||||
|
|
||||||
std::string qrcode_text = "https://apps.apple.com/us/app/stackchan-world/id6756086326";
|
std::string qrcode_text = "https://apps.apple.com/us/app/stackchan-world/id6756086326";
|
||||||
data.qrcode = std::make_unique<Qrcode>(lv_screen_active());
|
data.qrcode_ios = std::make_unique<Qrcode>(lv_screen_active());
|
||||||
data.qrcode->setSize(150);
|
data.qrcode_ios->setSize(80);
|
||||||
data.qrcode->setDarkColor(lv_color_hex(0x221C5B));
|
data.qrcode_ios->setDarkColor(lv_color_hex(0x221C5B));
|
||||||
data.qrcode->setLightColor(lv_color_hex(0xEDF4FF));
|
data.qrcode_ios->setLightColor(lv_color_hex(0xEDF4FF));
|
||||||
data.qrcode->update(qrcode_text);
|
data.qrcode_ios->update(qrcode_text);
|
||||||
data.qrcode->align(LV_ALIGN_CENTER, -72, 12);
|
data.qrcode_ios->align(LV_ALIGN_CENTER, -65, -12);
|
||||||
|
|
||||||
|
qrcode_text = "https://play.google.com/store/apps/details?id=com.m5stack.stackchan";
|
||||||
|
data.qrcode_android = std::make_unique<Qrcode>(lv_screen_active());
|
||||||
|
data.qrcode_android->setSize(80);
|
||||||
|
data.qrcode_android->setDarkColor(lv_color_hex(0x221C5B));
|
||||||
|
data.qrcode_android->setLightColor(lv_color_hex(0xEDF4FF));
|
||||||
|
data.qrcode_android->update(qrcode_text);
|
||||||
|
data.qrcode_android->align(LV_ALIGN_CENTER, 65, -12);
|
||||||
|
|
||||||
|
data.label_ios = std::make_unique<Label>(lv_screen_active());
|
||||||
|
data.label_ios->setTextFont(&lv_font_montserrat_14);
|
||||||
|
data.label_ios->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
data.label_ios->align(LV_ALIGN_CENTER, -65, 47);
|
||||||
|
data.label_ios->setText("App Store\n(iOS)");
|
||||||
|
data.label_ios->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
|
||||||
|
data.label_android = std::make_unique<Label>(lv_screen_active());
|
||||||
|
data.label_android->setTextFont(&lv_font_montserrat_14);
|
||||||
|
data.label_android->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
data.label_android->align(LV_ALIGN_CENTER, 65, 47);
|
||||||
|
data.label_android->setText("Play Store\n(Android)");
|
||||||
|
data.label_android->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
|
||||||
data.btn_next = std::make_unique<Button>(lv_screen_active());
|
data.btn_next = std::make_unique<Button>(lv_screen_active());
|
||||||
apply_button_common_style(*data.btn_next);
|
apply_button_common_style(*data.btn_next);
|
||||||
data.btn_next->align(LV_ALIGN_CENTER, 79, 73);
|
data.btn_next->align(LV_ALIGN_CENTER, 72, 91);
|
||||||
data.btn_next->setSize(112, 48);
|
data.btn_next->setSize(112, 42);
|
||||||
data.btn_next->label().setText("Next");
|
data.btn_next->label().setText("Next");
|
||||||
data.btn_next->onClick().connect([this]() { _state_app_download_data.next_clicked = true; });
|
data.btn_next->onClick().connect([this]() { _state_app_download_data.next_clicked = true; });
|
||||||
|
|
||||||
data.info = std::make_unique<Label>(lv_screen_active());
|
data.btn_quit = std::make_unique<Button>(lv_screen_active());
|
||||||
data.info->setTextFont(&lv_font_montserrat_20);
|
apply_button_common_style(*data.btn_quit);
|
||||||
data.info->setTextColor(lv_color_hex(0x26206A));
|
data.btn_quit->align(LV_ALIGN_CENTER, -72, 91);
|
||||||
data.info->align(LV_ALIGN_TOP_LEFT, 183, 56);
|
data.btn_quit->setSize(112, 42);
|
||||||
data.info->setTextAlign(LV_TEXT_ALIGN_LEFT);
|
data.btn_quit->setBgColor(lv_color_hex(0xD4D9E0));
|
||||||
data.info->setText("Download\n\"StackChan\"\napp to start\nthe setup");
|
data.btn_quit->label().setText("Back");
|
||||||
|
data.btn_quit->label().setTextColor(lv_color_hex(0x525064));
|
||||||
|
data.btn_quit->onClick().connect([this]() { _state_app_download_data.quit_clicked = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_state_app_download_data.quit_clicked) {
|
||||||
|
_is_done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_state_app_download_data.next_clicked) {
|
if (_state_app_download_data.next_clicked) {
|
||||||
@@ -113,6 +143,12 @@ void WifiSetupWorker::update_state()
|
|||||||
if (_is_first_in) {
|
if (_is_first_in) {
|
||||||
_is_first_in = false;
|
_is_first_in = false;
|
||||||
|
|
||||||
|
// Start app config server
|
||||||
|
_app_config_signal_id =
|
||||||
|
GetHAL().onAppConfigEvent.connect([this](AppConfigEvent event) { _last_app_config_event = event; });
|
||||||
|
|
||||||
|
GetHAL().startAppConfigServer();
|
||||||
|
|
||||||
auto& data = _state_wait_app_connection_data;
|
auto& data = _state_wait_app_connection_data;
|
||||||
|
|
||||||
data.panel = std::make_unique<Container>(lv_screen_active());
|
data.panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <mooncake_log.h>
|
#include <mooncake_log.h>
|
||||||
#include <assets/assets.h>
|
#include <assets/assets.h>
|
||||||
#include <hal/hal.h>
|
#include <hal/hal.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
using namespace smooth_ui_toolkit::lvgl_cpp;
|
using namespace smooth_ui_toolkit::lvgl_cpp;
|
||||||
using namespace setup_workers;
|
using namespace setup_workers;
|
||||||
@@ -36,8 +37,9 @@ public:
|
|||||||
_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
||||||
_title->setText("HOME POSITION:");
|
_title->setText("HOME POSITION:");
|
||||||
|
|
||||||
_img = std::make_unique<Image>(lv_screen_active());
|
_img = std::make_unique<Image>(lv_screen_active());
|
||||||
_img->setSrc(&setup_stackchan_front_view);
|
_img_setup_stackchan_front_view = assets::get_image("setup_stackchan_front_view.bin");
|
||||||
|
_img->setSrc(&_img_setup_stackchan_front_view);
|
||||||
_img->align(LV_ALIGN_CENTER, -74, 15);
|
_img->align(LV_ALIGN_CENTER, -74, 15);
|
||||||
|
|
||||||
_btn_next = std::make_unique<Button>(lv_screen_active());
|
_btn_next = std::make_unique<Button>(lv_screen_active());
|
||||||
@@ -62,6 +64,7 @@ private:
|
|||||||
std::unique_ptr<uitk::lvgl_cpp::Image> _img;
|
std::unique_ptr<uitk::lvgl_cpp::Image> _img;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_next;
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_next;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> _info;
|
std::unique_ptr<uitk::lvgl_cpp::Label> _info;
|
||||||
|
lv_image_dsc_t _img_setup_stackchan_front_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -190,6 +193,269 @@ void ZeroCalibrationWorker::update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PageServoTips : public WorkerBase {
|
||||||
|
public:
|
||||||
|
PageServoTips()
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xEDF4FF));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
|
||||||
|
_title = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_title->setTextColor(lv_color_hex(0x7E7B9C));
|
||||||
|
_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
||||||
|
_title->setText("SERVO TEST");
|
||||||
|
|
||||||
|
_info = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_info->setWidth(280);
|
||||||
|
_info->setTextFont(&lv_font_montserrat_16);
|
||||||
|
_info->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
_info->align(LV_ALIGN_CENTER, 0, -18);
|
||||||
|
_info->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_info->setText(
|
||||||
|
"Put me on a flat stable surface\nand remove your hands.\n\nPower me via the bottom USB-C \nif needed. ");
|
||||||
|
|
||||||
|
_btn_skip = std::make_unique<Button>(lv_screen_active());
|
||||||
|
apply_button_common_style(*_btn_skip);
|
||||||
|
_btn_skip->align(LV_ALIGN_CENTER, -72, 72);
|
||||||
|
_btn_skip->setSize(112, 48);
|
||||||
|
_btn_skip->setBgColor(lv_color_hex(0xD4D9E0));
|
||||||
|
_btn_skip->label().setText("Skip");
|
||||||
|
_btn_skip->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_skip->label().setTextColor(lv_color_hex(0x525064));
|
||||||
|
_btn_skip->onClick().connect([this]() { _is_skip_clicked = true; });
|
||||||
|
|
||||||
|
_btn_start = std::make_unique<Button>(lv_screen_active());
|
||||||
|
apply_button_common_style(*_btn_start);
|
||||||
|
_btn_start->align(LV_ALIGN_CENTER, 72, 72);
|
||||||
|
_btn_start->setSize(112, 48);
|
||||||
|
_btn_start->label().setText("Start");
|
||||||
|
_btn_start->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_start->onClick().connect([this]() { _is_start_clicked = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isSkipClicked() const
|
||||||
|
{
|
||||||
|
return _is_skip_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isStartClicked() const
|
||||||
|
{
|
||||||
|
return _is_start_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _info;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_skip;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_start;
|
||||||
|
bool _is_skip_clicked = false;
|
||||||
|
bool _is_start_clicked = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PageServoTest : public WorkerBase {
|
||||||
|
public:
|
||||||
|
PageServoTest()
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xEDF4FF));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
|
||||||
|
_title = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_title->setTextColor(lv_color_hex(0x7E7B9C));
|
||||||
|
_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
||||||
|
_title->setText("SERVO TEST");
|
||||||
|
|
||||||
|
_info = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_info->setWidth(280);
|
||||||
|
_info->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_info->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
_info->align(LV_ALIGN_CENTER, 0, -12);
|
||||||
|
_info->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_info->setText("Preparing...");
|
||||||
|
|
||||||
|
auto& motion = GetStackChan().motion();
|
||||||
|
motion.setAutoAngleSyncEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void update() override
|
||||||
|
{
|
||||||
|
if (_current_step >= _steps.size()) {
|
||||||
|
_is_done = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto now = GetHAL().millis();
|
||||||
|
if (!_step_started) {
|
||||||
|
run_step(_steps[_current_step]);
|
||||||
|
_step_started = true;
|
||||||
|
_step_start_tick = now;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (now - _step_start_tick >= _step_delay_ms) {
|
||||||
|
_current_step++;
|
||||||
|
_step_started = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class Step {
|
||||||
|
GoHome1,
|
||||||
|
Left90,
|
||||||
|
GoHome2,
|
||||||
|
Right90,
|
||||||
|
GoHome3,
|
||||||
|
Up90,
|
||||||
|
GoHome4,
|
||||||
|
};
|
||||||
|
|
||||||
|
void run_step(Step step)
|
||||||
|
{
|
||||||
|
auto& motion = GetStackChan().motion();
|
||||||
|
switch (step) {
|
||||||
|
case Step::GoHome1:
|
||||||
|
case Step::GoHome2:
|
||||||
|
case Step::GoHome3:
|
||||||
|
case Step::GoHome4:
|
||||||
|
_info->setText("Returning to\nthe home position...");
|
||||||
|
motion.goHome(_move_speed);
|
||||||
|
break;
|
||||||
|
case Step::Left90:
|
||||||
|
_info->setText("Moving left...");
|
||||||
|
motion.moveWithSpeed(900, 0, _move_speed);
|
||||||
|
break;
|
||||||
|
case Step::Right90:
|
||||||
|
_info->setText("Moving right...");
|
||||||
|
motion.moveWithSpeed(-900, 0, _move_speed);
|
||||||
|
break;
|
||||||
|
case Step::Up90:
|
||||||
|
_info->setText("Moving up...");
|
||||||
|
motion.moveWithSpeed(0, 900, _move_speed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _info;
|
||||||
|
static constexpr uint32_t _step_delay_ms = 1800;
|
||||||
|
static constexpr int _move_speed = 500;
|
||||||
|
const std::array<Step, 7> _steps = {
|
||||||
|
Step::GoHome1, Step::Left90, Step::GoHome2, Step::Right90, Step::GoHome3, Step::Up90, Step::GoHome4,
|
||||||
|
};
|
||||||
|
size_t _current_step = 0;
|
||||||
|
uint32_t _step_start_tick = 0;
|
||||||
|
bool _step_started = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PageServoDone : public WorkerBase {
|
||||||
|
public:
|
||||||
|
PageServoDone()
|
||||||
|
{
|
||||||
|
_panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xEDF4FF));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
|
||||||
|
_title = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_title->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_title->setTextColor(lv_color_hex(0x7E7B9C));
|
||||||
|
_title->align(LV_ALIGN_TOP_MID, 0, 13);
|
||||||
|
_title->setText("SERVO TEST");
|
||||||
|
|
||||||
|
_info = std::make_unique<Label>(lv_screen_active());
|
||||||
|
_info->setWidth(280);
|
||||||
|
_info->setTextFont(&lv_font_montserrat_20);
|
||||||
|
_info->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
_info->align(LV_ALIGN_CENTER, 0, -16);
|
||||||
|
_info->setTextAlign(LV_TEXT_ALIGN_CENTER);
|
||||||
|
_info->setText("Servo test completed.\n");
|
||||||
|
|
||||||
|
_btn_retest = std::make_unique<Button>(lv_screen_active());
|
||||||
|
apply_button_common_style(*_btn_retest);
|
||||||
|
_btn_retest->align(LV_ALIGN_CENTER, -72, 67);
|
||||||
|
_btn_retest->setSize(112, 48);
|
||||||
|
_btn_retest->setBgColor(lv_color_hex(0xD4D9E0));
|
||||||
|
_btn_retest->label().setText("Retest");
|
||||||
|
_btn_retest->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_retest->label().setTextColor(lv_color_hex(0x525064));
|
||||||
|
_btn_retest->onClick().connect([this]() { _is_retest_clicked = true; });
|
||||||
|
|
||||||
|
_btn_next = std::make_unique<Button>(lv_screen_active());
|
||||||
|
apply_button_common_style(*_btn_next);
|
||||||
|
_btn_next->align(LV_ALIGN_CENTER, 72, 67);
|
||||||
|
_btn_next->setSize(112, 48);
|
||||||
|
_btn_next->label().setText("Next");
|
||||||
|
_btn_next->label().setTextFont(&lv_font_montserrat_20);
|
||||||
|
_btn_next->onClick().connect([this]() { _is_next_clicked = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isRetestClicked() const
|
||||||
|
{
|
||||||
|
return _is_retest_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isNextClicked() const
|
||||||
|
{
|
||||||
|
return _is_next_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _info;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_retest;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_next;
|
||||||
|
bool _is_retest_clicked = false;
|
||||||
|
bool _is_next_clicked = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ServoTestWorker::ServoTestWorker()
|
||||||
|
{
|
||||||
|
_page_tips = std::make_unique<PageServoTips>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServoTestWorker::update()
|
||||||
|
{
|
||||||
|
if (_page_tips) {
|
||||||
|
auto* page = static_cast<PageServoTips*>(_page_tips.get());
|
||||||
|
if (page->isSkipClicked()) {
|
||||||
|
_page_tips.reset();
|
||||||
|
_is_done = true;
|
||||||
|
} else if (page->isStartClicked()) {
|
||||||
|
_page_tips.reset();
|
||||||
|
_page_test = std::make_unique<PageServoTest>();
|
||||||
|
}
|
||||||
|
} else if (_page_test) {
|
||||||
|
_page_test->update();
|
||||||
|
if (_page_test->isDone()) {
|
||||||
|
_page_test.reset();
|
||||||
|
_page_done = std::make_unique<PageServoDone>();
|
||||||
|
}
|
||||||
|
} else if (_page_done) {
|
||||||
|
auto* page = static_cast<PageServoDone*>(_page_done.get());
|
||||||
|
if (page->isRetestClicked()) {
|
||||||
|
_page_done.reset();
|
||||||
|
_page_test = std::make_unique<PageServoTest>();
|
||||||
|
} else if (page->isNextClicked()) {
|
||||||
|
_page_done.reset();
|
||||||
|
_is_done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct RgbColorEntry {
|
struct RgbColorEntry {
|
||||||
std::string name;
|
std::string name;
|
||||||
uint8_t r;
|
uint8_t r;
|
||||||
@@ -235,7 +501,7 @@ RgbTestWorker::RgbTestWorker()
|
|||||||
auto btn_quit = std::make_unique<Button>(*_panel);
|
auto btn_quit = std::make_unique<Button>(*_panel);
|
||||||
apply_button_common_style(*btn_quit);
|
apply_button_common_style(*btn_quit);
|
||||||
btn_quit->setSize(200, 50);
|
btn_quit->setSize(200, 50);
|
||||||
btn_quit->label().setText("Quit");
|
btn_quit->label().setText("Back");
|
||||||
btn_quit->onClick().connect([this]() { _is_done = true; });
|
btn_quit->onClick().connect([this]() { _is_done = true; });
|
||||||
_buttons.push_back(std::move(btn_quit));
|
_buttons.push_back(std::move(btn_quit));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,15 @@ void StartupWorker::update()
|
|||||||
_is_done = true;
|
_is_done = true;
|
||||||
} else if (_page_startup->isStartClicked()) {
|
} else if (_page_startup->isStartClicked()) {
|
||||||
_page_startup.reset();
|
_page_startup.reset();
|
||||||
|
mclog::tagInfo(_tag, "start servo test");
|
||||||
|
_worker_servo_test = std::make_unique<ServoTestWorker>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Servo test
|
||||||
|
else if (_worker_servo_test) {
|
||||||
|
_worker_servo_test->update();
|
||||||
|
if (_worker_servo_test->isDone()) {
|
||||||
|
_worker_servo_test.reset();
|
||||||
mclog::tagInfo(_tag, "start wifi setup");
|
mclog::tagInfo(_tag, "start wifi setup");
|
||||||
_worker_wifi = std::make_unique<WifiSetupWorker>();
|
_worker_wifi = std::make_unique<WifiSetupWorker>();
|
||||||
}
|
}
|
||||||
@@ -76,8 +85,8 @@ void StartupWorker::update()
|
|||||||
_worker_wifi->update();
|
_worker_wifi->update();
|
||||||
if (_worker_wifi->isDone()) {
|
if (_worker_wifi->isDone()) {
|
||||||
_worker_wifi.reset();
|
_worker_wifi.reset();
|
||||||
mclog::tagInfo(_tag, "startup done");
|
mclog::tagInfo(_tag, "startup back");
|
||||||
_is_done = true;
|
_page_startup = std::make_unique<PageStartup>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,74 @@ static const std::vector<TimezoneOption_t> _timezone_list = {
|
|||||||
{"Tokyo (UTC+9)", "JST-9"}, {"Sydney (UTC+10)", "AEST-10"}, {"Noumea (UTC+11)", "SBT-11"},
|
{"Tokyo (UTC+9)", "JST-9"}, {"Sydney (UTC+10)", "AEST-10"}, {"Noumea (UTC+11)", "SBT-11"},
|
||||||
{"Auckland (UTC+12)", "NZST-12"}, {"Fiji (UTC+13)", "FJT-13"}, {"Line Islands (UTC+14)", "LINT-14"}};
|
{"Auckland (UTC+12)", "NZST-12"}, {"Fiji (UTC+13)", "FJT-13"}, {"Line Islands (UTC+14)", "LINT-14"}};
|
||||||
|
|
||||||
|
VolumeSetupWorker::VolumeSetupWorker()
|
||||||
|
{
|
||||||
|
mclog::info("VolumeSetupWorker start");
|
||||||
|
|
||||||
|
for (int volume = 0; volume <= 100; volume += 5) {
|
||||||
|
_volume_levels.push_back(volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t current_volume = GetHAL().getSpeakerVolume();
|
||||||
|
int current_index = _volume_levels.size() - 1;
|
||||||
|
for (size_t i = 0; i < _volume_levels.size(); i++) {
|
||||||
|
if (_volume_levels[i] >= current_volume) {
|
||||||
|
current_index = static_cast<int>(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_panel = std::make_unique<Container>(lv_screen_active());
|
||||||
|
_panel->setBgColor(lv_color_hex(0xEDF4FF));
|
||||||
|
_panel->align(LV_ALIGN_CENTER, 0, 0);
|
||||||
|
_panel->setBorderWidth(0);
|
||||||
|
_panel->setSize(320, 240);
|
||||||
|
_panel->setRadius(0);
|
||||||
|
_panel->removeFlag(LV_OBJ_FLAG_SCROLLABLE);
|
||||||
|
|
||||||
|
_label_volume = std::make_unique<Label>(*_panel);
|
||||||
|
_label_volume->setText(fmt::format("{}%", _volume_levels[current_index]));
|
||||||
|
_label_volume->setTextFont(&lv_font_montserrat_24);
|
||||||
|
_label_volume->setTextColor(lv_color_hex(0x26206A));
|
||||||
|
_label_volume->align(LV_ALIGN_CENTER, 0, -70);
|
||||||
|
|
||||||
|
_slider = std::make_unique<Slider>(*_panel);
|
||||||
|
_slider->align(LV_ALIGN_CENTER, 0, -12);
|
||||||
|
_slider->setRange(0, _volume_levels.size() - 1);
|
||||||
|
_slider->setSize(250, 18);
|
||||||
|
_slider->setBgColor(lv_color_hex(0x615B9E), LV_PART_KNOB);
|
||||||
|
_slider->setBgColor(lv_color_hex(0x615B9E), LV_PART_INDICATOR);
|
||||||
|
_slider->setBgColor(lv_color_hex(0xB8D3FD), LV_PART_MAIN);
|
||||||
|
_slider->setBgOpa(255);
|
||||||
|
_slider->setValue(current_index);
|
||||||
|
_slider->onValueChanged().connect([this](int32_t value) {
|
||||||
|
_label_volume->setText(fmt::format("{}%", _volume_levels[value]));
|
||||||
|
_target_volume = _volume_levels[value];
|
||||||
|
});
|
||||||
|
|
||||||
|
_btn_confirm = std::make_unique<Button>(*_panel);
|
||||||
|
apply_button_common_style(*_btn_confirm);
|
||||||
|
_btn_confirm->align(LV_ALIGN_CENTER, 0, 60);
|
||||||
|
_btn_confirm->setSize(150, 50);
|
||||||
|
_btn_confirm->label().setText("Confirm");
|
||||||
|
_btn_confirm->onClick().connect([this]() { _is_done = true; });
|
||||||
|
}
|
||||||
|
|
||||||
|
VolumeSetupWorker::~VolumeSetupWorker()
|
||||||
|
{
|
||||||
|
auto volume = _volume_levels[_slider->getValue()];
|
||||||
|
mclog::tagInfo(_tag, "final volume: {}", volume);
|
||||||
|
GetHAL().setSpeakerVolume(volume, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeSetupWorker::update()
|
||||||
|
{
|
||||||
|
if (_target_volume != -1) {
|
||||||
|
GetHAL().setSpeakerVolume(_target_volume, false);
|
||||||
|
_target_volume = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TimezoneWorker::TimezoneWorker()
|
TimezoneWorker::TimezoneWorker()
|
||||||
{
|
{
|
||||||
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
_panel = std::make_unique<uitk::lvgl_cpp::Container>(lv_screen_active());
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include <hal/hal.h>
|
#include <hal/hal.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
namespace setup_workers {
|
namespace setup_workers {
|
||||||
|
|
||||||
@@ -48,6 +49,21 @@ private:
|
|||||||
std::unique_ptr<WorkerBase> _page_calibration;
|
std::unique_ptr<WorkerBase> _page_calibration;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ServoTestWorker : public WorkerBase {
|
||||||
|
public:
|
||||||
|
ServoTestWorker();
|
||||||
|
void update() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<WorkerBase> _page_tips;
|
||||||
|
std::unique_ptr<WorkerBase> _page_test;
|
||||||
|
std::unique_ptr<WorkerBase> _page_done;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*
|
*
|
||||||
@@ -79,19 +95,29 @@ private:
|
|||||||
struct StateAppDownloadData {
|
struct StateAppDownloadData {
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Container> panel;
|
std::unique_ptr<uitk::lvgl_cpp::Container> panel;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> title;
|
std::unique_ptr<uitk::lvgl_cpp::Label> title;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Qrcode> qrcode;
|
std::unique_ptr<uitk::lvgl_cpp::Qrcode> qrcode_ios;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Qrcode> qrcode_android;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> label_ios;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> label_android;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Button> btn_next;
|
std::unique_ptr<uitk::lvgl_cpp::Button> btn_next;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> btn_quit;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> info;
|
std::unique_ptr<uitk::lvgl_cpp::Label> info;
|
||||||
bool next_clicked = false;
|
bool next_clicked = false;
|
||||||
|
bool quit_clicked = false;
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
panel.reset();
|
panel.reset();
|
||||||
title.reset();
|
title.reset();
|
||||||
qrcode.reset();
|
qrcode_ios.reset();
|
||||||
|
qrcode_android.reset();
|
||||||
|
label_ios.reset();
|
||||||
|
label_android.reset();
|
||||||
btn_next.reset();
|
btn_next.reset();
|
||||||
|
btn_quit.reset();
|
||||||
info.reset();
|
info.reset();
|
||||||
next_clicked = false;
|
next_clicked = false;
|
||||||
|
quit_clicked = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
StateAppDownloadData _state_app_download_data;
|
StateAppDownloadData _state_app_download_data;
|
||||||
@@ -170,6 +196,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<PageStartup> _page_startup;
|
std::unique_ptr<PageStartup> _page_startup;
|
||||||
|
std::unique_ptr<ServoTestWorker> _worker_servo_test;
|
||||||
std::unique_ptr<WifiSetupWorker> _worker_wifi;
|
std::unique_ptr<WifiSetupWorker> _worker_wifi;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -187,6 +214,17 @@ private:
|
|||||||
uint32_t _last_tick = 0;
|
uint32_t _last_tick = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class SystemUpdateWorker : public WorkerBase {
|
||||||
|
public:
|
||||||
|
SystemUpdateWorker();
|
||||||
|
~SystemUpdateWorker();
|
||||||
|
void update() override;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*
|
*
|
||||||
@@ -205,6 +243,25 @@ private:
|
|||||||
int32_t _target_brightness = -1;
|
int32_t _target_brightness = -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class VolumeSetupWorker : public WorkerBase {
|
||||||
|
public:
|
||||||
|
VolumeSetupWorker();
|
||||||
|
~VolumeSetupWorker();
|
||||||
|
void update() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_volume;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Slider> _slider;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_confirm;
|
||||||
|
std::vector<uint8_t> _volume_levels;
|
||||||
|
int32_t _target_volume = -1;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*
|
*
|
||||||
@@ -247,4 +304,55 @@ private:
|
|||||||
void update_ui();
|
void update_ui();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class AccountWorker : public WorkerBase {
|
||||||
|
public:
|
||||||
|
class PanelInfo {
|
||||||
|
public:
|
||||||
|
PanelInfo(lv_obj_t* parent, int posY, std::string_view title, std::string_view info);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_title;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_info;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PageAccount {
|
||||||
|
public:
|
||||||
|
PageAccount(std::string_view username, std::string_view deviceName);
|
||||||
|
|
||||||
|
bool isUnbindClicked() const
|
||||||
|
{
|
||||||
|
return _is_unbind_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isQuitClicked() const
|
||||||
|
{
|
||||||
|
return _is_quit_clicked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_title;
|
||||||
|
std::unique_ptr<PanelInfo> _panel_username;
|
||||||
|
std::unique_ptr<PanelInfo> _panel_device_name;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_unbind;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_quit;
|
||||||
|
|
||||||
|
bool _is_unbind_clicked = false;
|
||||||
|
bool _is_quit_clicked = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
AccountWorker();
|
||||||
|
~AccountWorker();
|
||||||
|
void update() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<PageAccount> _page_account;
|
||||||
|
std::unique_ptr<FactoryResetWorker> _worker_reset;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace setup_workers
|
} // namespace setup_workers
|
||||||
|
|||||||
@@ -9,3 +9,6 @@
|
|||||||
#include "app_avatar/app_avatar.h"
|
#include "app_avatar/app_avatar.h"
|
||||||
#include "app_setup/app_setup.h"
|
#include "app_setup/app_setup.h"
|
||||||
#include "app_espnow_ctrl/app_espnow_ctrl.h"
|
#include "app_espnow_ctrl/app_espnow_ctrl.h"
|
||||||
|
#include "app_app_center/app_app_center.h"
|
||||||
|
#include "app_ezdata/app_ezdata.h"
|
||||||
|
#include "app_dance/app_dance.h"
|
||||||
|
|||||||
@@ -13,6 +13,6 @@
|
|||||||
|
|
||||||
namespace common {
|
namespace common {
|
||||||
|
|
||||||
inline constexpr std::string_view FirmwareVersion = "V0.18";
|
inline constexpr std::string_view FirmwareVersion = "V" FIRMWARE_VERSION;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,7 +121,8 @@ public:
|
|||||||
|
|
||||||
_icon = std::make_unique<Image>(_btn->get());
|
_icon = std::make_unique<Image>(_btn->get());
|
||||||
_icon->align(LV_ALIGN_CENTER, 0, -10);
|
_icon->align(LV_ALIGN_CENTER, 0, -10);
|
||||||
_icon->setSrc(&icon_home);
|
_icon_home = assets::get_image("icon_home.bin");
|
||||||
|
_icon->setSrc(&_icon_home);
|
||||||
_icon->setImageRecolorOpa(LV_OPA_COVER);
|
_icon->setImageRecolorOpa(LV_OPA_COVER);
|
||||||
_icon->setImageRecolor(lv_color_hex(colorBorder));
|
_icon->setImageRecolor(lv_color_hex(colorBorder));
|
||||||
|
|
||||||
@@ -185,6 +186,7 @@ private:
|
|||||||
bool _is_hidden = false;
|
bool _is_hidden = false;
|
||||||
bool _is_clicked = false;
|
bool _is_clicked = false;
|
||||||
bool _hide_mask_flag = false;
|
bool _hide_mask_flag = false;
|
||||||
|
lv_image_dsc_t _icon_home;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -35,8 +35,9 @@ public:
|
|||||||
_msg_panel->setSize(296, 156);
|
_msg_panel->setSize(296, 156);
|
||||||
_msg_panel->setRadius(18);
|
_msg_panel->setRadius(18);
|
||||||
|
|
||||||
_bell = std::make_unique<uitk::lvgl_cpp::Image>(_msg_panel->get());
|
_bell = std::make_unique<uitk::lvgl_cpp::Image>(_msg_panel->get());
|
||||||
_bell->setSrc(&icon_bell);
|
_icon_bell = assets::get_image("icon_bell.bin");
|
||||||
|
_bell->setSrc(&_icon_bell);
|
||||||
_bell->align(LV_ALIGN_CENTER, -122, -59);
|
_bell->align(LV_ALIGN_CENTER, -122, -59);
|
||||||
_bell->setRotation(150);
|
_bell->setRotation(150);
|
||||||
|
|
||||||
@@ -91,6 +92,7 @@ private:
|
|||||||
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
std::unique_ptr<uitk::lvgl_cpp::Label> _title;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> _msg;
|
std::unique_ptr<uitk::lvgl_cpp::Label> _msg;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_ok;
|
std::unique_ptr<uitk::lvgl_cpp::Button> _btn_ok;
|
||||||
|
lv_image_dsc_t _icon_bell;
|
||||||
|
|
||||||
uint32_t _anim_tick = 0;
|
uint32_t _anim_tick = 0;
|
||||||
bool _anim_flag = false;
|
bool _anim_flag = false;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
|
#include <src/draw/lv_image_dsc.h>
|
||||||
|
|
||||||
using namespace smooth_ui_toolkit;
|
using namespace smooth_ui_toolkit;
|
||||||
using namespace smooth_ui_toolkit::lvgl_cpp;
|
using namespace smooth_ui_toolkit::lvgl_cpp;
|
||||||
@@ -159,8 +160,9 @@ public:
|
|||||||
_bar->setOutlineColor(lv_color_hex(colorPrimary));
|
_bar->setOutlineColor(lv_color_hex(colorPrimary));
|
||||||
_bar->setRadius(3, LV_PART_INDICATOR);
|
_bar->setRadius(3, LV_PART_INDICATOR);
|
||||||
|
|
||||||
_lightning_icon = std::make_unique<uitk::lvgl_cpp::Image>(parent);
|
_lightning_icon = std::make_unique<uitk::lvgl_cpp::Image>(parent);
|
||||||
_lightning_icon->setSrc(&icon_bat_lightning);
|
_icon_bat_lightning = assets::get_image("icon_bat_lightning.bin");
|
||||||
|
_lightning_icon->setSrc(&_icon_bat_lightning);
|
||||||
_lightning_icon->setImageRecolor(lv_color_hex(colorPrimary));
|
_lightning_icon->setImageRecolor(lv_color_hex(colorPrimary));
|
||||||
_lightning_icon->setImageRecolorOpa(LV_OPA_COVER);
|
_lightning_icon->setImageRecolorOpa(LV_OPA_COVER);
|
||||||
_lightning_icon->setHidden(true);
|
_lightning_icon->setHidden(true);
|
||||||
@@ -193,6 +195,7 @@ private:
|
|||||||
std::unique_ptr<Bar> _bar;
|
std::unique_ptr<Bar> _bar;
|
||||||
std::unique_ptr<Container> _bat_top;
|
std::unique_ptr<Container> _bat_top;
|
||||||
std::unique_ptr<Image> _lightning_icon;
|
std::unique_ptr<Image> _lightning_icon;
|
||||||
|
lv_image_dsc_t _icon_bat_lightning;
|
||||||
|
|
||||||
uint32_t _color_primary = 0;
|
uint32_t _color_primary = 0;
|
||||||
};
|
};
|
||||||
@@ -235,6 +238,11 @@ public:
|
|||||||
_wifi_icon->setImageRecolor(lv_color_hex(colorPrimary));
|
_wifi_icon->setImageRecolor(lv_color_hex(colorPrimary));
|
||||||
_wifi_icon->setImageRecolorOpa(LV_OPA_COVER);
|
_wifi_icon->setImageRecolorOpa(LV_OPA_COVER);
|
||||||
|
|
||||||
|
_icon_wifi_low = assets::get_image("icon_wifi_low.bin");
|
||||||
|
_icon_wifi_medium = assets::get_image("icon_wifi_medium.bin");
|
||||||
|
_icon_wifi_high = assets::get_image("icon_wifi_high.bin");
|
||||||
|
_icon_wifi_slash = assets::get_image("icon_wifi_slash.bin");
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,22 +254,26 @@ public:
|
|||||||
_wifi_icon->setSrc(NULL);
|
_wifi_icon->setSrc(NULL);
|
||||||
break;
|
break;
|
||||||
case WifiStatus::Low:
|
case WifiStatus::Low:
|
||||||
_wifi_icon->setSrc(&icon_wifi_low);
|
_wifi_icon->setSrc(&_icon_wifi_low);
|
||||||
break;
|
break;
|
||||||
case WifiStatus::Medium:
|
case WifiStatus::Medium:
|
||||||
_wifi_icon->setSrc(&icon_wifi_medium);
|
_wifi_icon->setSrc(&_icon_wifi_medium);
|
||||||
break;
|
break;
|
||||||
case WifiStatus::High:
|
case WifiStatus::High:
|
||||||
_wifi_icon->setSrc(&icon_wifi_high);
|
_wifi_icon->setSrc(&_icon_wifi_high);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_wifi_icon->setSrc(&icon_wifi_slash);
|
_wifi_icon->setSrc(&_icon_wifi_slash);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Image> _wifi_icon;
|
std::unique_ptr<Image> _wifi_icon;
|
||||||
|
lv_image_dsc_t _icon_wifi_low;
|
||||||
|
lv_image_dsc_t _icon_wifi_medium;
|
||||||
|
lv_image_dsc_t _icon_wifi_high;
|
||||||
|
lv_image_dsc_t _icon_wifi_slash;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StatusBarView {
|
class StatusBarView {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
#include "assets.h"
|
#include "assets.h"
|
||||||
#include <assets.h> // Include Xiaozhi's Assets class
|
#include <assets.h>
|
||||||
#include <mooncake_log.h>
|
#include <mooncake_log.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|||||||
@@ -9,27 +9,6 @@
|
|||||||
|
|
||||||
LV_FONT_DECLARE(MontserratSemiBold26);
|
LV_FONT_DECLARE(MontserratSemiBold26);
|
||||||
|
|
||||||
LV_IMG_DECLARE(icon_ai_agent);
|
|
||||||
LV_IMG_DECLARE(icon_controller);
|
|
||||||
LV_IMG_DECLARE(icon_indicator_left);
|
|
||||||
LV_IMG_DECLARE(icon_indicator_right);
|
|
||||||
LV_IMG_DECLARE(icon_sentinel);
|
|
||||||
LV_IMG_DECLARE(icon_setup);
|
|
||||||
LV_IMG_DECLARE(icon_uiflow);
|
|
||||||
LV_IMG_DECLARE(icon_calibrate);
|
|
||||||
LV_IMG_DECLARE(icon_remote);
|
|
||||||
LV_IMG_DECLARE(setup_stackchan_front_view);
|
|
||||||
LV_IMG_DECLARE(icon_home);
|
|
||||||
LV_IMG_DECLARE(icon_bell);
|
|
||||||
LV_IMG_DECLARE(icon_app_store);
|
|
||||||
LV_IMG_DECLARE(icon_ezdata);
|
|
||||||
LV_IMG_DECLARE(icon_wifi_high);
|
|
||||||
LV_IMG_DECLARE(icon_wifi_medium);
|
|
||||||
LV_IMG_DECLARE(icon_wifi_low);
|
|
||||||
LV_IMG_DECLARE(icon_wifi_slash);
|
|
||||||
LV_IMG_DECLARE(icon_bat_lightning);
|
|
||||||
LV_IMG_DECLARE(icon_dance);
|
|
||||||
|
|
||||||
extern const char ogg_camera_shutter_start[] asm("_binary_camera_shutter_ogg_start");
|
extern const char ogg_camera_shutter_start[] asm("_binary_camera_shutter_ogg_start");
|
||||||
extern const char ogg_camera_shutter_end[] asm("_binary_camera_shutter_ogg_end");
|
extern const char ogg_camera_shutter_end[] asm("_binary_camera_shutter_ogg_end");
|
||||||
static const std::string_view OGG_CAMERA_SHUTTER{
|
static const std::string_view OGG_CAMERA_SHUTTER{
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,68 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_BAT_LIGHTNING
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_BAT_LIGHTNING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_BAT_LIGHTNING uint8_t
|
|
||||||
icon_bat_lightning_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x60, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xdf, 0xaf, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
|
|
||||||
0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x20, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xff,
|
|
||||||
0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xdf,
|
|
||||||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_bat_lightning = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 12,
|
|
||||||
.header.h = 16,
|
|
||||||
.data_size = 192 * 3,
|
|
||||||
.data = icon_bat_lightning_map,
|
|
||||||
};
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_BELL
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_BELL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_BELL uint8_t icon_bell_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x83, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x86, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x86, 0x83, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00,
|
|
||||||
0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x86, 0x83, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x86, 0x83, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x83, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x86, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87,
|
|
||||||
0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b,
|
|
||||||
0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x87, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9f, 0xff, 0x60, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0x8f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xcf, 0xff, 0x70, 0x00, 0x10, 0x80, 0xcf, 0xef, 0xef, 0xbf, 0x8f, 0x20, 0x00, 0x80, 0xff, 0xcf, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x70, 0x00, 0x70, 0xef, 0xff, 0xbf, 0x8f, 0x8f, 0xbf, 0xff, 0xdf, 0x80, 0x00,
|
|
||||||
0x60, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0x8f, 0x00, 0x80, 0xff, 0x9f, 0x20, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x20, 0x9f, 0xff, 0x80, 0x00, 0x8f, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x30, 0xaf, 0x10, 0x40, 0xff, 0x80,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x40, 0x10, 0x9f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xdf, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xbf, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x6f, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xdf, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0x8f,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xef, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x60, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xff,
|
|
||||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xdf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xdf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
|
|
||||||
0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xdf, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xbf,
|
|
||||||
0xbf, 0xbf, 0xbf, 0xdf, 0xff, 0xbf, 0xbf, 0xbf, 0xbf, 0xef, 0xef, 0xbf, 0xbf, 0xbf, 0xaf, 0x60, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0x80, 0x00, 0x00, 0x80, 0xff, 0x60, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xff, 0xdf, 0xef, 0xff,
|
|
||||||
0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x60, 0xaf, 0xaf, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_bell = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 24,
|
|
||||||
.header.h = 24,
|
|
||||||
.data_size = 576 * 3,
|
|
||||||
.data = icon_bell_map,
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,196 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_HOME
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_HOME
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_HOME uint8_t icon_home_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x21, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0e, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x21, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0e, 0x21, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x21, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29,
|
|
||||||
0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x29, 0x0d,
|
|
||||||
0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x0d, 0x29, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xef, 0xdf, 0x50,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x80, 0xff, 0xff, 0x80, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00,
|
|
||||||
0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x80, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f,
|
|
||||||
0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xff, 0xef, 0x40, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x40, 0xef, 0xff, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x10, 0x9f, 0xff, 0xef, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
|
|
||||||
0xef, 0xff, 0x9f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xcf, 0xff, 0xdf,
|
|
||||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xdf, 0xff, 0xcf, 0x10, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xcf, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xdf, 0xff, 0xcf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xaf, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x20, 0xdf, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff,
|
|
||||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
||||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xdf, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xdf, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x30, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_home = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 32,
|
|
||||||
.header.h = 32,
|
|
||||||
.data_size = 1024 * 3,
|
|
||||||
.data = icon_home_map,
|
|
||||||
};
|
|
||||||
@@ -1,407 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_LEFT
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_LEFT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_LEFT uint8_t
|
|
||||||
icon_indicator_left_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xde, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x1c, 0xe7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xde, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x75, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x75, 0xad, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x1c, 0xe7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xd6, 0xdf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x75, 0xad,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xd6, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xfb, 0xde, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x75, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x10, 0x84, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xfb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xf7,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xde,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x84,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1e, 0x5a, 0x53, 0x0c, 0x01, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x27, 0x85, 0xbf, 0xb0, 0x60, 0x13, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2d, 0x7a, 0xd7, 0xf8, 0xec, 0xb8, 0x58, 0x1a, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x28, 0x77, 0xde, 0xf9, 0xff, 0xfe, 0xf2, 0xbb, 0x4f, 0x09,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, 0x83, 0xd9, 0xf9, 0xfe, 0xff, 0xff, 0xfc, 0xec, 0x8c, 0x26,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x26, 0x87, 0xd1, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xf5, 0xc3, 0x5c, 0x10,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x07, 0x2c, 0x7b, 0xd7, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc4, 0x6b, 0x22, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x05, 0x27, 0x74, 0xde, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xc5, 0x71, 0x16, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x06, 0x20, 0x81, 0xd9, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf8, 0xc2, 0x6d, 0x17, 0x03, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x06, 0x24, 0x87, 0xd1, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xf5, 0xc3, 0x67, 0x1f, 0x02, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x08, 0x2b, 0x7c, 0xd5, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc3, 0x6a, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
|
|
||||||
0x29, 0x74, 0xdd, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xc5, 0x70, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x22,
|
|
||||||
0x7f, 0xda, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf8, 0xc2, 0x6e, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x23, 0x87,
|
|
||||||
0xd2, 0xf9, 0xfe, 0xff, 0xff, 0xff, 0xf6, 0xc4, 0x67, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2a, 0x7d, 0xd3,
|
|
||||||
0xf7, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc3, 0x69, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x2a, 0x74, 0xdb, 0xf9,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xf2, 0xc5, 0x70, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x23, 0x7d, 0xdb, 0xf8, 0xfe,
|
|
||||||
0xff, 0xff, 0xfe, 0xf8, 0xc3, 0x6f, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x22, 0x87, 0xd3, 0xf9, 0xfe, 0xff,
|
|
||||||
0xff, 0xff, 0xf7, 0xc5, 0x68, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x29, 0x7f, 0xd2, 0xf7, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xf1, 0xc3, 0x68, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x2b, 0x74, 0xda, 0xf9, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xf1, 0xc6, 0x6f, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x24, 0x7c, 0xdd, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf7,
|
|
||||||
0xc3, 0x6f, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x87, 0xd4, 0xfa, 0xfe, 0xff, 0xff, 0xff, 0xf8, 0xc5,
|
|
||||||
0x68, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x27, 0x80, 0xd1, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xc3, 0x68,
|
|
||||||
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x2b, 0x74, 0xd8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc5, 0x6f, 0x1c,
|
|
||||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x06, 0x25, 0x7a, 0xdd, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf6, 0xc3, 0x70, 0x17, 0x03,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x05, 0x1f, 0x86, 0xd6, 0xfa, 0xfe, 0xff, 0xff, 0xff, 0xf8, 0xc4, 0x69, 0x17, 0x03, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x07, 0x27, 0x82, 0xd0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xc2, 0x67, 0x23, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x07, 0x2c, 0x75, 0xd7, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc5, 0x6e, 0x1d, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x05, 0x26, 0x79, 0xdd, 0xf9, 0xfe, 0xff, 0xff, 0xfe, 0xf5, 0xc3, 0x70, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x1e, 0x84, 0xd6, 0xf9, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xc4, 0x6a, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x5d, 0xc0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xed, 0x80, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x57, 0xb4, 0xee, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xed, 0x8a, 0x35, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0d, 0x65, 0xbd, 0xf3, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xe0, 0x89, 0x28, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x02, 0x15, 0x5c, 0xc1, 0xf3, 0xfe, 0xff, 0xff, 0xfe, 0xfa, 0xda, 0x94, 0x27, 0x07, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x01, 0x1c, 0x5b, 0xbd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xda, 0x8d, 0x30, 0x07, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x16, 0x65, 0xba, 0xee, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdc, 0x83, 0x35, 0x06, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x0e, 0x67, 0xbd, 0xf4, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe1, 0x87, 0x29, 0x08, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x5d, 0xc1, 0xf2, 0xfe, 0xff, 0xff, 0xfe, 0xfa, 0xda, 0x93, 0x28, 0x07,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x59, 0xbe, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x8f, 0x2e,
|
|
||||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x16, 0x64, 0xbb, 0xed, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdb, 0x84,
|
|
||||||
0x36, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x68, 0xbd, 0xf4, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe3,
|
|
||||||
0x87, 0x2a, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x5f, 0xc0, 0xf2, 0xfd, 0xff, 0xff, 0xfe, 0xfb,
|
|
||||||
0xda, 0x92, 0x28, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x58, 0xbe, 0xf0, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xf8, 0xd9, 0x91, 0x2c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x63, 0xbb, 0xed, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xf8, 0xdb, 0x85, 0x36, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x68, 0xbd, 0xf2, 0xfd, 0xff,
|
|
||||||
0xff, 0xff, 0xfb, 0xe3, 0x85, 0x2c, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x12, 0x60, 0xbf, 0xf2, 0xfd,
|
|
||||||
0xff, 0xff, 0xfe, 0xfb, 0xdb, 0x91, 0x28, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1a, 0x58, 0xbe, 0xf1,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x92, 0x2a, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x19, 0x61, 0xbb,
|
|
||||||
0xed, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xda, 0x87, 0x36, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x68,
|
|
||||||
0xbb, 0xf1, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe3, 0x84, 0x2e, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10,
|
|
||||||
0x61, 0xbe, 0xf2, 0xfd, 0xff, 0xff, 0xfe, 0xfb, 0xdb, 0x8f, 0x27, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
|
||||||
0x19, 0x58, 0xbf, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x94, 0x29, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0x1a, 0x60, 0xbd, 0xed, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xda, 0x88, 0x35, 0x07, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x01, 0x12, 0x68, 0xbb, 0xf0, 0xfd, 0xff, 0xff, 0xff, 0xfa, 0xe1, 0x83, 0x30, 0x07, 0x01, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x02, 0x0f, 0x63, 0xbe, 0xf2, 0xfd, 0xff, 0xff, 0xfe, 0xfb, 0xdd, 0x8f, 0x28, 0x08, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x18, 0x58, 0xc0, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdb, 0x96, 0x29, 0x06, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x1c, 0x60, 0xbe, 0xee, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xdb, 0x8b, 0x35, 0x05,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x14, 0x69, 0xbc, 0xf0, 0xfe, 0xff, 0xff, 0xff, 0xfa, 0xdf, 0x6c, 0x13,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x65, 0xbf, 0xf3, 0xfd, 0xff, 0xff, 0xfb, 0xe5, 0x82, 0x20,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x17, 0x5b, 0xc2, 0xf4, 0xff, 0xfe, 0xea, 0x91, 0x39, 0x07,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1d, 0x5f, 0xbe, 0xee, 0xde, 0x95, 0x3c, 0x0f, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x67, 0xa5, 0x94, 0x3d, 0x0a, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, 0x31, 0x30, 0x07, 0x01, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_indicator_left = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 36,
|
|
||||||
.header.h = 62,
|
|
||||||
.data_size = 2232 * 3,
|
|
||||||
.data = icon_indicator_left_map,
|
|
||||||
};
|
|
||||||
@@ -1,407 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_RIGHT
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_RIGHT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_INDICATOR_RIGHT uint8_t
|
|
||||||
icon_indicator_right_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x10, 0x84, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x84, 0x9e, 0xf7, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xe7,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf7, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xd6,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xbb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x75, 0xad, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x0a, 0x29, 0x6d, 0x35, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x3f, 0x97, 0xc9, 0x9b, 0x4a, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0a, 0x3f, 0x93, 0xe6, 0xf9, 0xe4, 0x9e, 0x43, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2b, 0x98, 0xe6, 0xfd, 0xff, 0xfe, 0xe5, 0xa8, 0x39, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x74, 0xcd, 0xfa, 0xff, 0xff, 0xff, 0xfb, 0xe7, 0xa7, 0x3f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x3b, 0xa2, 0xe9, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xe5, 0xa0, 0x49, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0b, 0x50, 0xa5, 0xea, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xe4, 0x9d, 0x44, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x49, 0xb1, 0xea, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xa7, 0x39, 0x0d, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x01, 0x10, 0x3f, 0xb0, 0xe9, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe7, 0xa7, 0x3d, 0x0b, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x10, 0x45, 0xa8, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe5, 0xa2, 0x48, 0x05, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x0c, 0x50, 0xa4, 0xea, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0x9d, 0x46, 0x0c, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4b, 0xb0, 0xea, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xa5, 0x3b, 0x0d,
|
|
||||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x3f, 0xb0, 0xe9, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe6, 0xa7, 0x3c,
|
|
||||||
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x43, 0xaa, 0xea, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe5, 0xa4,
|
|
||||||
0x48, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x4f, 0xa4, 0xea, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xe5,
|
|
||||||
0x9d, 0x48, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x4d, 0xae, 0xe9, 0xfb, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xe5, 0xa4, 0x3c, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x41, 0xb0, 0xe9, 0xfc, 0xff, 0xff, 0xff,
|
|
||||||
0xfc, 0xe5, 0xa7, 0x3a, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x42, 0xac, 0xea, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xfb, 0xe6, 0xa5, 0x46, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x4f, 0xa4, 0xea, 0xfc, 0xff,
|
|
||||||
0xff, 0xff, 0xfb, 0xe5, 0x9d, 0x48, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x4f, 0xac, 0xe9, 0xfb,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xe5, 0xa2, 0x3d, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x42, 0xb0, 0xe9,
|
|
||||||
0xfc, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xa7, 0x39, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x41, 0xae,
|
|
||||||
0xea, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe7, 0xa7, 0x44, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x4d,
|
|
||||||
0xa4, 0xea, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe6, 0x9d, 0x49, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08,
|
|
||||||
0x4f, 0xaa, 0xe9, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xa0, 0x3f, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
|
||||||
0x0d, 0x43, 0xb0, 0xea, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xa7, 0x39, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0x0f, 0x3f, 0xb0, 0xea, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe7, 0xa8, 0x43, 0x05, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x02, 0x0f, 0x4b, 0xa4, 0xe9, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe5, 0x9e, 0x4a, 0x08, 0x01, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x08, 0x50, 0xa9, 0xe9, 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xe4, 0xa0, 0x40, 0x0d, 0x01, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xb1, 0xeb, 0xfc, 0xff, 0xff, 0xff, 0xfd, 0xe5, 0xa8, 0x3a, 0x0e, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x40, 0xb2, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe7, 0xa8, 0x41, 0x05,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x64, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xe4, 0x7a, 0x1c,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1f, 0x6e, 0xca, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd3, 0x72, 0x1b,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x5e, 0xce, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x7f, 0x2a, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x1c, 0x62, 0xcc, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xd4, 0x80, 0x26, 0x07, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x03, 0x1a, 0x6c, 0xc2, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xcd, 0x80, 0x2b, 0x07, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x05, 0x1e, 0x67, 0xbe, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xf8, 0xd3, 0x7f, 0x31, 0x03, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x04, 0x1d, 0x5e, 0xcc, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x7f, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
|
||||||
0x1d, 0x61, 0xcc, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xd4, 0x7f, 0x26, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1a,
|
|
||||||
0x6b, 0xc4, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xce, 0x7f, 0x2b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1e, 0x68,
|
|
||||||
0xbe, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xf8, 0xd2, 0x7f, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1c, 0x5d, 0xcb,
|
|
||||||
0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x7f, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1e, 0x60, 0xcc, 0xf4,
|
|
||||||
0xfe, 0xff, 0xff, 0xff, 0xfa, 0xd5, 0x7f, 0x26, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1a, 0x6b, 0xc6, 0xf3, 0xfe,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xce, 0x7f, 0x2a, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1e, 0x6a, 0xbe, 0xf8, 0xfe, 0xff,
|
|
||||||
0xff, 0xff, 0xf9, 0xd1, 0x7f, 0x30, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1c, 0x5f, 0xc8, 0xf8, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xf8, 0xd8, 0x7f, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x5f, 0xcc, 0xf4, 0xfe, 0xff, 0xff, 0xff,
|
|
||||||
0xfa, 0xd6, 0x7f, 0x27, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1a, 0x6a, 0xc9, 0xf4, 0xfd, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xcf, 0x7f, 0x29, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1e, 0x6b, 0xbe, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xd0,
|
|
||||||
0x7f, 0x2f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1c, 0x60, 0xc7, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xd7, 0x7f,
|
|
||||||
0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x5e, 0xcd, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xd7, 0x80, 0x28,
|
|
||||||
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x1a, 0x68, 0xcb, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x80, 0x28, 0x07,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x05, 0x1d, 0x6c, 0xbe, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xfa, 0xcf, 0x7f, 0x2f, 0x06, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x06, 0x1d, 0x62, 0xc4, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd6, 0x7f, 0x2f, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x04, 0x1e, 0x5e, 0xcd, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xd8, 0x7f, 0x29, 0x05, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0x1a, 0x68, 0xcd, 0xf4, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x7f, 0x27, 0x07, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x1c, 0x6c, 0xbf, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xfa, 0xce, 0x7f, 0x2d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x49, 0xb8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd5, 0x7f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x69, 0xc5, 0xf7, 0xff, 0xff, 0xff, 0xf8, 0xd9, 0x7f, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x1c, 0x79, 0xce, 0xfd, 0xff, 0xff, 0xd2, 0x7f, 0x26, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x03, 0x2b, 0x77, 0xcd, 0xf3, 0xce, 0x7f, 0x2c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x01, 0x2a, 0x76, 0xb2, 0x7a, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x04, 0x14, 0x3f, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_indicator_right = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 36,
|
|
||||||
.header.h = 62,
|
|
||||||
.data_size = 2232 * 3,
|
|
||||||
.data = icon_indicator_right_map,
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,99 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_WIFI_HIGH
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_WIFI_HIGH
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_WIFI_HIGH uint8_t icon_wifi_high_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x5f, 0x6f, 0x80, 0x5f, 0x40, 0x10, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x6f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x60,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xdf, 0x70, 0x00, 0x00, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xcf, 0x10, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x10, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x10, 0x00, 0x20, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x20, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_wifi_high = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 20,
|
|
||||||
.header.h = 20,
|
|
||||||
.data_size = 400 * 3,
|
|
||||||
.data = icon_wifi_high_map,
|
|
||||||
};
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_WIFI_LOW
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_WIFI_LOW
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_WIFI_LOW uint8_t icon_wifi_low_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x5f, 0x6f, 0x80, 0x5f, 0x40, 0x10, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x6f, 0xbf, 0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xdf, 0xff, 0xff, 0xbf, 0x60,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xef, 0xef, 0x80, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x9f,
|
|
||||||
0xdf, 0xdf, 0x70, 0x00, 0x00, 0x20, 0xbf, 0xef, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x70, 0xef, 0xcf, 0x10, 0x50, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x40, 0xff, 0x50, 0x10, 0xdf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xdf, 0x10, 0x00, 0x20, 0xef, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x40, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0x40, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xef, 0x20, 0x20,
|
|
||||||
0x8f, 0x9f, 0xaf, 0x80, 0x20, 0x20, 0xdf, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xef,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
|
|
||||||
0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x20, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_wifi_low = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 20,
|
|
||||||
.header.h = 20,
|
|
||||||
.data_size = 400 * 3,
|
|
||||||
.data = icon_wifi_low_map,
|
|
||||||
};
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_WIFI_MEDIUM
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_WIFI_MEDIUM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_WIFI_MEDIUM uint8_t
|
|
||||||
icon_wifi_medium_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x5f, 0x6f, 0x80, 0x5f, 0x40, 0x10,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x6f, 0xbf, 0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xdf,
|
|
||||||
0xff, 0xff, 0xbf, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xef, 0xef, 0x80, 0x40, 0x10, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x40, 0x9f, 0xdf, 0xdf, 0x70, 0x00, 0x00, 0x20, 0xbf, 0xef, 0x80, 0x10, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xef, 0xcf, 0x10, 0x50, 0xff, 0x30, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xff, 0x50, 0x10, 0xdf, 0xbf, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x20, 0x5f, 0x6f, 0x6f, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xdf, 0x10, 0x00, 0x20,
|
|
||||||
0xef, 0x8f, 0x00, 0x50, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x60, 0x00, 0x80, 0xdf, 0x20, 0x00,
|
|
||||||
0x00, 0x00, 0x40, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x30,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xdf, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xef,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_wifi_medium = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 20,
|
|
||||||
.header.h = 20,
|
|
||||||
.data_size = 400 * 3,
|
|
||||||
.data = icon_wifi_medium_map,
|
|
||||||
};
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
#ifdef __has_include
|
|
||||||
#if __has_include("lvgl.h")
|
|
||||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
|
||||||
#include "lvgl.h"
|
|
||||||
#else
|
|
||||||
#include "lvgl/lvgl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LV_ATTRIBUTE_IMAGE_ICON_WIFI_SLASH
|
|
||||||
#define LV_ATTRIBUTE_IMAGE_ICON_WIFI_SLASH
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_ICON_WIFI_SLASH uint8_t
|
|
||||||
icon_wifi_slash_map[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x30, 0x5f, 0x6f, 0x80, 0x5f, 0x40, 0x10,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xdf, 0x20, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xbf, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xef, 0xff, 0xcf, 0x10, 0x80, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x70, 0x00, 0x00, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00,
|
|
||||||
0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x10, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0x9f, 0x00, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x10, 0xdf, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x10, 0x00, 0x20,
|
|
||||||
0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x10, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x20, 0x00,
|
|
||||||
0x00, 0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x20, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x30,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x20, 0xdf, 0xff, 0xff,
|
|
||||||
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x30, 0x20,
|
|
||||||
0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0xef, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xdf, 0xff, 0xff, 0xff,
|
|
||||||
0xff, 0xff, 0xff, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xef,
|
|
||||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0xcf, 0xdf, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0x40, 0x10, 0xcf, 0xcf, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x80, 0x00, 0x00, 0x20, 0xdf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x50, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
const lv_image_dsc_t icon_wifi_slash = {
|
|
||||||
.header.cf = LV_COLOR_FORMAT_RGB565A8,
|
|
||||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
|
||||||
.header.w = 20,
|
|
||||||
.header.h = 20,
|
|
||||||
.data_size = 400 * 3,
|
|
||||||
.data = icon_wifi_slash_map,
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -177,6 +177,8 @@ void CoreS3AudioCodec::CreateDuplexChannels(gpio_num_t mclk, gpio_num_t bclk, gp
|
|||||||
|
|
||||||
ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_handle_, &std_cfg));
|
ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_handle_, &std_cfg));
|
||||||
ESP_ERROR_CHECK(i2s_channel_init_tdm_mode(rx_handle_, &tdm_cfg));
|
ESP_ERROR_CHECK(i2s_channel_init_tdm_mode(rx_handle_, &tdm_cfg));
|
||||||
|
ESP_ERROR_CHECK(i2s_channel_enable(tx_handle_));
|
||||||
|
ESP_ERROR_CHECK(i2s_channel_enable(rx_handle_));
|
||||||
ESP_LOGI(TAG, "Duplex channels created");
|
ESP_LOGI(TAG, "Duplex channels created");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,12 +92,6 @@ void disply_lvgl_unlock()
|
|||||||
display->LvglUnlock();
|
display->LvglUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_setup_xiaozhi_ui()
|
|
||||||
{
|
|
||||||
auto display = static_cast<DISPLAY_TYPE*>(Board::GetInstance().GetDisplay());
|
|
||||||
display->SetupXiaoZhiUI();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* Application */
|
/* Application */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
@@ -110,8 +104,6 @@ void xiaozhi_board_init()
|
|||||||
|
|
||||||
void start_xiaozhi_app()
|
void start_xiaozhi_app()
|
||||||
{
|
{
|
||||||
display_setup_xiaozhi_ui();
|
|
||||||
|
|
||||||
set_xiaozhi_mode(true);
|
set_xiaozhi_mode(true);
|
||||||
|
|
||||||
// Initialize and run the application
|
// Initialize and run the application
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ void toggle_xiaozhi_chat_state();
|
|||||||
void disply_lvgl_lock();
|
void disply_lvgl_lock();
|
||||||
void disply_lvgl_unlock();
|
void disply_lvgl_unlock();
|
||||||
lv_disp_t* display_get_lvgl_display();
|
lv_disp_t* display_get_lvgl_display();
|
||||||
void display_setup_xiaozhi_ui();
|
|
||||||
|
|
||||||
void xiaozhi_board_init();
|
void xiaozhi_board_init();
|
||||||
void start_xiaozhi_app();
|
void start_xiaozhi_app();
|
||||||
@@ -49,6 +48,8 @@ int board_get_battery_level();
|
|||||||
bool board_is_battery_charging();
|
bool board_is_battery_charging();
|
||||||
void board_set_backlight_brightness(uint8_t brightness, bool permanent = false);
|
void board_set_backlight_brightness(uint8_t brightness, bool permanent = false);
|
||||||
uint8_t board_get_backlight_brightness();
|
uint8_t board_get_backlight_brightness();
|
||||||
|
void board_set_speaker_volume(uint8_t volume, bool permanent = false);
|
||||||
|
uint8_t board_get_speaker_volume();
|
||||||
|
|
||||||
void app_play_sound(const std::string_view& sound);
|
void app_play_sound(const std::string_view& sound);
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
#include <esp_lcd_panel_ops.h>
|
#include <esp_lcd_panel_ops.h>
|
||||||
#include <esp_lcd_ili9341.h>
|
#include <esp_lcd_ili9341.h>
|
||||||
#include <esp_timer.h>
|
#include <esp_timer.h>
|
||||||
// #include "esp32_camera.h"
|
|
||||||
#include "stackchan_camera.h"
|
#include "stackchan_camera.h"
|
||||||
#include "hal_bridge.h"
|
#include "hal_bridge.h"
|
||||||
|
|
||||||
@@ -59,6 +58,7 @@ public:
|
|||||||
WriteReg(0x90, 0xBF);
|
WriteReg(0x90, 0xBF);
|
||||||
WriteReg(0x94, 33 - 5);
|
WriteReg(0x94, 33 - 5);
|
||||||
WriteReg(0x95, 33 - 5);
|
WriteReg(0x95, 33 - 5);
|
||||||
|
WriteReg(0x27, 0x00);
|
||||||
|
|
||||||
auto ret = setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_700MA);
|
auto ret = setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_700MA);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
@@ -541,6 +541,28 @@ uint8_t hal_bridge::board_get_backlight_brightness()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hal_bridge::board_set_speaker_volume(uint8_t volume, bool permanent)
|
||||||
|
{
|
||||||
|
auto& board = Board::GetInstance();
|
||||||
|
auto audio_codec = board.GetAudioCodec();
|
||||||
|
if (audio_codec) {
|
||||||
|
if (permanent) {
|
||||||
|
audio_codec->SetOutputVolume(volume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t hal_bridge::board_get_speaker_volume()
|
||||||
|
{
|
||||||
|
int volume = 70;
|
||||||
|
Settings settings("audio", false);
|
||||||
|
volume = settings.GetInt("output_volume", volume);
|
||||||
|
if (volume <= 0) {
|
||||||
|
volume = 10;
|
||||||
|
}
|
||||||
|
return volume;
|
||||||
|
}
|
||||||
|
|
||||||
void hal_bridge::toggle_xiaozhi_chat_state()
|
void hal_bridge::toggle_xiaozhi_chat_state()
|
||||||
{
|
{
|
||||||
auto& app = Application::GetInstance();
|
auto& app = Application::GetInstance();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include <esp_psram.h>
|
#include <esp_psram.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <src/misc/cache/lv_cache.h>
|
||||||
#include <settings.h>
|
#include <settings.h>
|
||||||
#include <lvgl.h>
|
#include <lvgl.h>
|
||||||
#include <lvgl_theme.h>
|
#include <lvgl_theme.h>
|
||||||
@@ -228,8 +229,16 @@ lv_disp_t* StackChanAvatarDisplay::GetLvglDisplay()
|
|||||||
|
|
||||||
#include <hal/board/hal_bridge.h>
|
#include <hal/board/hal_bridge.h>
|
||||||
|
|
||||||
void StackChanAvatarDisplay::SetupXiaoZhiUI()
|
void StackChanAvatarDisplay::SetupUI()
|
||||||
{
|
{
|
||||||
|
// Prevent duplicate calls - if already called, return early
|
||||||
|
if (setup_ui_called_) {
|
||||||
|
ESP_LOGW(TAG, "SetupUI() called multiple times, skipping duplicate call");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Display::SetupUI(); // Mark SetupUI as called
|
||||||
|
|
||||||
auto& stackchan = GetStackChan();
|
auto& stackchan = GetStackChan();
|
||||||
|
|
||||||
if (stackchan.hasAvatar()) {
|
if (stackchan.hasAvatar()) {
|
||||||
@@ -243,7 +252,11 @@ void StackChanAvatarDisplay::SetupXiaoZhiUI()
|
|||||||
|
|
||||||
auto avatar = std::make_unique<DefaultAvatar>();
|
auto avatar = std::make_unique<DefaultAvatar>();
|
||||||
avatar->init(lv_screen_active());
|
avatar->init(lv_screen_active());
|
||||||
avatar->getPanel()->onClick().connect([]() { hal_bridge::toggle_xiaozhi_chat_state(); });
|
avatar->getPanel()->onClick().connect([]() {
|
||||||
|
if (hal_bridge::is_xiaozhi_ready()) {
|
||||||
|
hal_bridge::toggle_xiaozhi_chat_state();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
stackchan.attachAvatar(std::move(avatar));
|
stackchan.attachAvatar(std::move(avatar));
|
||||||
stackchan.addModifier(std::make_unique<BreathModifier>());
|
stackchan.addModifier(std::make_unique<BreathModifier>());
|
||||||
@@ -283,7 +296,7 @@ void StackChanAvatarDisplay::SetEmotion(const char* emotion)
|
|||||||
|
|
||||||
DisplayLockGuard lock(this);
|
DisplayLockGuard lock(this);
|
||||||
|
|
||||||
ESP_LOGE(TAG, "SetEmotion: %s", emotion);
|
// ESP_LOGE(TAG, "SetEmotion: %s", emotion);
|
||||||
|
|
||||||
auto& avatar = stackchan.avatar();
|
auto& avatar = stackchan.avatar();
|
||||||
|
|
||||||
@@ -335,12 +348,16 @@ void StackChanAvatarDisplay::SetEmotion(const char* emotion)
|
|||||||
|
|
||||||
void StackChanAvatarDisplay::SetChatMessage(const char* role, const char* content)
|
void StackChanAvatarDisplay::SetChatMessage(const char* role, const char* content)
|
||||||
{
|
{
|
||||||
|
if (!setup_ui_called_) {
|
||||||
|
ESP_LOGW(TAG, "SetChatMessage('%s', '%s') called before SetupUI() - message will be lost!", role, content);
|
||||||
|
}
|
||||||
|
|
||||||
auto& stackchan = GetStackChan();
|
auto& stackchan = GetStackChan();
|
||||||
if (!stackchan.hasAvatar()) {
|
if (!stackchan.hasAvatar()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGE(TAG, "SetChatMessage: role=%s, content=%s", role ? role : "null", content ? content : "null");
|
// ESP_LOGE(TAG, "SetChatMessage: role=%s, content=%s", role ? role : "null", content ? content : "null");
|
||||||
|
|
||||||
DisplayLockGuard lock(this);
|
DisplayLockGuard lock(this);
|
||||||
|
|
||||||
@@ -351,6 +368,20 @@ void StackChanAvatarDisplay::SetChatMessage(const char* role, const char* conten
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StackChanAvatarDisplay::ClearChatMessages()
|
||||||
|
{
|
||||||
|
auto& stackchan = GetStackChan();
|
||||||
|
if (!stackchan.hasAvatar()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayLockGuard lock(this);
|
||||||
|
|
||||||
|
stackchan.avatar().clearSpeech();
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "Chat messages cleared");
|
||||||
|
}
|
||||||
|
|
||||||
void StackChanAvatarDisplay::SetPreviewImage(std::unique_ptr<LvglImage> image)
|
void StackChanAvatarDisplay::SetPreviewImage(std::unique_ptr<LvglImage> image)
|
||||||
{
|
{
|
||||||
DisplayLockGuard lock(this);
|
DisplayLockGuard lock(this);
|
||||||
@@ -380,6 +411,10 @@ void StackChanAvatarDisplay::SetPreviewImage(std::unique_ptr<LvglImage> image)
|
|||||||
ESP_ERROR_CHECK(esp_timer_start_once(preview_timer_, 6000 * 1000));
|
ESP_ERROR_CHECK(esp_timer_start_once(preview_timer_, 6000 * 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StackChanAvatarDisplay::UpdateStatusBar(bool update_all)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void StackChanAvatarDisplay::SetTheme(Theme* theme)
|
void StackChanAvatarDisplay::SetTheme(Theme* theme)
|
||||||
{
|
{
|
||||||
ESP_LOGI(TAG, "SetTheme: %s", theme->name().c_str());
|
ESP_LOGI(TAG, "SetTheme: %s", theme->name().c_str());
|
||||||
@@ -407,9 +442,7 @@ bool hal_bridge::is_xiaozhi_ready()
|
|||||||
|
|
||||||
void StackChanAvatarDisplay::SetStatus(const char* status)
|
void StackChanAvatarDisplay::SetStatus(const char* status)
|
||||||
{
|
{
|
||||||
ESP_LOGE(TAG, "SetStatus: %s", status);
|
// ESP_LOGE(TAG, "SetStatus: %s", status);
|
||||||
|
|
||||||
LvglDisplay::SetStatus(status);
|
|
||||||
|
|
||||||
auto& stackchan = GetStackChan();
|
auto& stackchan = GetStackChan();
|
||||||
if (!stackchan.hasAvatar()) {
|
if (!stackchan.hasAvatar()) {
|
||||||
@@ -491,3 +524,7 @@ void StackChanAvatarDisplay::SetStatus(const char* status)
|
|||||||
avatar.setSpeech("");
|
avatar.setSpeech("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StackChanAvatarDisplay::ShowNotification(const char* notification, int duration_ms)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,11 +38,14 @@ public:
|
|||||||
// Override Display methods to control Robot
|
// Override Display methods to control Robot
|
||||||
virtual void SetEmotion(const char* emotion) override;
|
virtual void SetEmotion(const char* emotion) override;
|
||||||
virtual void SetChatMessage(const char* role, const char* content) override;
|
virtual void SetChatMessage(const char* role, const char* content) override;
|
||||||
|
virtual void ClearChatMessages() override;
|
||||||
virtual void SetPreviewImage(std::unique_ptr<LvglImage> image) override;
|
virtual void SetPreviewImage(std::unique_ptr<LvglImage> image) override;
|
||||||
|
virtual void UpdateStatusBar(bool update_all = false) override;
|
||||||
|
virtual void SetupUI() override;
|
||||||
virtual void SetTheme(Theme* theme) override;
|
virtual void SetTheme(Theme* theme) override;
|
||||||
virtual void SetStatus(const char* status) override;
|
virtual void SetStatus(const char* status) override;
|
||||||
|
virtual void ShowNotification(const char* notification, int duration_ms = 3000) override;
|
||||||
|
|
||||||
void SetupXiaoZhiUI();
|
|
||||||
void LvglLock();
|
void LvglLock();
|
||||||
void LvglUnlock();
|
void LvglUnlock();
|
||||||
lv_disp_t* GetLvglDisplay();
|
lv_disp_t* GetLvglDisplay();
|
||||||
|
|||||||
+42
-28
@@ -48,6 +48,7 @@ void Hal::init()
|
|||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
#include <system_info.h>
|
#include <system_info.h>
|
||||||
|
#include <esp_ota_ops.h>
|
||||||
#include <esp_system.h>
|
#include <esp_system.h>
|
||||||
#include <esp_timer.h>
|
#include <esp_timer.h>
|
||||||
#include <esp_mac.h>
|
#include <esp_mac.h>
|
||||||
@@ -86,8 +87,38 @@ void Hal::reboot()
|
|||||||
esp_restart();
|
esp_restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _confirm_ota_image_if_stable()
|
||||||
|
{
|
||||||
|
constexpr uint32_t ota_confirm_delay_ms = 20000;
|
||||||
|
static bool ota_confirm_checked = false;
|
||||||
|
if (ota_confirm_checked || GetHAL().millis() < ota_confirm_delay_ms) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ota_confirm_checked = true;
|
||||||
|
|
||||||
|
const esp_partition_t* running = esp_ota_get_running_partition();
|
||||||
|
if (running == nullptr) {
|
||||||
|
mclog::tagError(_tag, "failed to get running partition for ota confirmation");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_ota_img_states_t ota_state;
|
||||||
|
if (esp_ota_get_state_partition(running, &ota_state) != ESP_OK) {
|
||||||
|
mclog::tagError(_tag, "failed to get ota state for partition: {}", running->label);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mclog::tagInfo(_tag, "ota confirm check: partition={}, state={}", running->label, static_cast<int>(ota_state));
|
||||||
|
if (ota_state == ESP_OTA_IMG_PENDING_VERIFY) {
|
||||||
|
mclog::tagInfo(_tag, "ota image is stable, marking current app valid");
|
||||||
|
esp_ota_mark_app_valid_cancel_rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Hal::updateHeapStatusLog()
|
void Hal::updateHeapStatusLog()
|
||||||
{
|
{
|
||||||
|
_confirm_ota_image_if_stable();
|
||||||
|
|
||||||
static uint32_t last_log_tick = 0;
|
static uint32_t last_log_tick = 0;
|
||||||
if (millis() - last_log_tick < 10000) {
|
if (millis() - last_log_tick < 10000) {
|
||||||
return;
|
return;
|
||||||
@@ -164,7 +195,7 @@ void Hal::startXiaozhi()
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Start stackchan update task
|
// Start stackchan update task
|
||||||
xTaskCreate(_stackchan_update_task, "stackchan", 4096, NULL, 5, NULL);
|
xTaskCreatePinnedToCore(_stackchan_update_task, "stackchan", 4096, NULL, 5, NULL, 1);
|
||||||
|
|
||||||
hal_bridge::start_xiaozhi_app();
|
hal_bridge::start_xiaozhi_app();
|
||||||
}
|
}
|
||||||
@@ -211,6 +242,16 @@ uint8_t Hal::getBackLightBrightness()
|
|||||||
return hal_bridge::board_get_backlight_brightness();
|
return hal_bridge::board_get_backlight_brightness();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Hal::setSpeakerVolume(uint8_t volume, bool permanent)
|
||||||
|
{
|
||||||
|
hal_bridge::board_set_speaker_volume(volume, permanent);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t Hal::getSpeakerVolume()
|
||||||
|
{
|
||||||
|
return hal_bridge::board_get_speaker_volume();
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* Lvgl */
|
/* Lvgl */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
@@ -252,33 +293,6 @@ void Hal::lvgl_init()
|
|||||||
hal_bridge::disply_lvgl_unlock();
|
hal_bridge::disply_lvgl_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_timer_t* _timer_stackchan_update = NULL;
|
|
||||||
|
|
||||||
void Hal::startStackChanAutoUpdate(int fps)
|
|
||||||
{
|
|
||||||
mclog::tagInfo(_tag, "start stack chan auto update with fps: {}", fps);
|
|
||||||
|
|
||||||
if (_timer_stackchan_update) {
|
|
||||||
mclog::tagWarn(_tag, "stack chan auto update already started");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_timer_stackchan_update = lv_timer_create([](lv_timer_t* timer) { GetStackChan().update(); }, 1000 / fps, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hal::stopStackChanAutoUpdate()
|
|
||||||
{
|
|
||||||
mclog::tagInfo(_tag, "stop stack chan auto update");
|
|
||||||
|
|
||||||
if (!_timer_stackchan_update) {
|
|
||||||
mclog::tagWarn(_tag, "stack chan auto update already stopped");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lv_timer_delete(_timer_stackchan_update);
|
|
||||||
_timer_stackchan_update = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* Warm Reboot */
|
/* Warm Reboot */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|||||||
+56
-6
@@ -73,6 +73,23 @@ enum class CommonLogLevel {
|
|||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
namespace app_center {
|
||||||
|
|
||||||
|
struct AppInfo_t {
|
||||||
|
std::string name;
|
||||||
|
std::string iconUrl;
|
||||||
|
std::string description;
|
||||||
|
std::string firmwareUrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
using AppInfoList_t = std::vector<AppInfo_t>;
|
||||||
|
|
||||||
|
}; // namespace app_center
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*
|
*
|
||||||
@@ -84,6 +101,15 @@ enum class WifiStatus {
|
|||||||
High,
|
High,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct UserAccountInfo_t {
|
||||||
|
std::string username;
|
||||||
|
std::string deviceName;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*
|
*
|
||||||
@@ -97,6 +123,7 @@ public:
|
|||||||
_panel->setAlign(LV_ALIGN_CENTER);
|
_panel->setAlign(LV_ALIGN_CENTER);
|
||||||
_panel->setBorderWidth(0);
|
_panel->setBorderWidth(0);
|
||||||
_panel->setBgOpa(0);
|
_panel->setBgOpa(0);
|
||||||
|
_panel->setPaddingAll(0);
|
||||||
|
|
||||||
_label_logo = std::make_unique<uitk::lvgl_cpp::Label>(_panel->get());
|
_label_logo = std::make_unique<uitk::lvgl_cpp::Label>(_panel->get());
|
||||||
_label_logo->setTextFont(&lv_font_montserrat_24);
|
_label_logo->setTextFont(&lv_font_montserrat_24);
|
||||||
@@ -109,12 +136,19 @@ public:
|
|||||||
_label_msg->setTextColor(lv_color_hex(0xBFBFBF));
|
_label_msg->setTextColor(lv_color_hex(0xBFBFBF));
|
||||||
_label_msg->align(LV_ALIGN_CENTER, 0, 14);
|
_label_msg->align(LV_ALIGN_CENTER, 0, 14);
|
||||||
_label_msg->setText("Starting up ...");
|
_label_msg->setText("Starting up ...");
|
||||||
|
|
||||||
|
_label_version = std::make_unique<uitk::lvgl_cpp::Label>(_panel->get());
|
||||||
|
_label_version->setTextFont(&lv_font_montserrat_14);
|
||||||
|
_label_version->setTextColor(lv_color_hex(0x8B8B8B));
|
||||||
|
_label_version->align(LV_ALIGN_BOTTOM_RIGHT, -7, -6);
|
||||||
|
_label_version->setText("V" FIRMWARE_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
std::unique_ptr<uitk::lvgl_cpp::Container> _panel;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> _label_logo;
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_logo;
|
||||||
std::unique_ptr<uitk::lvgl_cpp::Label> _label_msg;
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_msg;
|
||||||
|
std::unique_ptr<uitk::lvgl_cpp::Label> _label_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,14 +201,11 @@ public:
|
|||||||
bool isBleConnected();
|
bool isBleConnected();
|
||||||
void startAppConfigServer();
|
void startAppConfigServer();
|
||||||
bool isAppConfiged();
|
bool isAppConfiged();
|
||||||
|
void resetAppConfiged();
|
||||||
|
|
||||||
/* --------------------------------- HeadPet -------------------------------- */
|
/* --------------------------------- HeadPet -------------------------------- */
|
||||||
uitk::Signal<HeadPetGesture> onHeadPetGesture;
|
uitk::Signal<HeadPetGesture> onHeadPetGesture;
|
||||||
|
|
||||||
/* -------------------------------- StackChan ------------------------------- */
|
|
||||||
void startStackChanAutoUpdate(int fps); // Start the auto update with lvgl timer
|
|
||||||
void stopStackChanAutoUpdate();
|
|
||||||
|
|
||||||
/* ----------------------------------- RGB ---------------------------------- */
|
/* ----------------------------------- RGB ---------------------------------- */
|
||||||
void setRgbColor(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
|
void setRgbColor(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
|
||||||
void showRgbColor(uint8_t r, uint8_t g, uint8_t b);
|
void showRgbColor(uint8_t r, uint8_t g, uint8_t b);
|
||||||
@@ -205,7 +236,6 @@ public:
|
|||||||
void syncSystemTimeToRtc();
|
void syncSystemTimeToRtc();
|
||||||
void setTimezone(std::string_view tz);
|
void setTimezone(std::string_view tz);
|
||||||
std::string getTimezone();
|
std::string getTimezone();
|
||||||
void resetTimezoneConfig();
|
|
||||||
|
|
||||||
/* --------------------------------- EspNow --------------------------------- */
|
/* --------------------------------- EspNow --------------------------------- */
|
||||||
uitk::Signal<const std::vector<uint8_t>&> onEspNowData;
|
uitk::Signal<const std::vector<uint8_t>&> onEspNowData;
|
||||||
@@ -223,13 +253,33 @@ public:
|
|||||||
WifiStatus getWifiStatus();
|
WifiStatus getWifiStatus();
|
||||||
void startSntp();
|
void startSntp();
|
||||||
|
|
||||||
|
/* -------------------------------- App center ------------------------------- */
|
||||||
|
app_center::AppInfoList_t fetchAppList();
|
||||||
|
void launchApp(std::string_view url, std::function<void(int)> onProgress);
|
||||||
|
|
||||||
|
/* --------------------------------- EzData --------------------------------- */
|
||||||
|
void startEzDataService(std::function<void(std::string_view)> onStartLog);
|
||||||
|
uitk::Signal<std::string_view> onEzdataPairCode;
|
||||||
|
|
||||||
|
/* ------------------------------- User Acount ------------------------------ */
|
||||||
|
UserAccountInfo_t getUserAccountInfo();
|
||||||
|
bool updateAccountInfo(std::function<void(std::string_view)> onLog);
|
||||||
|
bool unbindAccount(std::function<void(std::string_view)> onLog);
|
||||||
|
|
||||||
|
/* ----------------------------------- OTA ---------------------------------- */
|
||||||
|
bool updateFirmware(std::function<void(std::string_view)> onLog);
|
||||||
|
|
||||||
|
/* ---------------------------------- Audio --------------------------------- */
|
||||||
|
void setSpeakerVolume(uint8_t volume, bool permanent = false);
|
||||||
|
uint8_t getSpeakerVolume();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _xiaozhi_start_requested = false;
|
bool _xiaozhi_start_requested = false;
|
||||||
|
|
||||||
void xiaozhi_board_init();
|
void xiaozhi_board_init();
|
||||||
void lvgl_init();
|
void lvgl_init();
|
||||||
void xiaozhi_mcp_init();
|
void xiaozhi_mcp_init();
|
||||||
void ble_init();
|
void ble_init(bool useAltUuid);
|
||||||
void servo_init();
|
void servo_init();
|
||||||
void head_touch_init();
|
void head_touch_init();
|
||||||
void io_expander_init();
|
void io_expander_init();
|
||||||
|
|||||||
@@ -0,0 +1,246 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "hal.h"
|
||||||
|
#include "utils/secret_logic/secret_logic.h"
|
||||||
|
#include <settings.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <board.h>
|
||||||
|
#include <cJSON.h>
|
||||||
|
|
||||||
|
static const std::string_view _tag = "HAL-Account";
|
||||||
|
|
||||||
|
static const std::string_view _setting_ns = "account";
|
||||||
|
static const std::string_view _setting_username_key = "username";
|
||||||
|
static const std::string_view _setting_device_name_key = "device_name";
|
||||||
|
|
||||||
|
static const std::string_view _get_user_account_info_url = "http://47.113.125.164:12800/stackChan/device/user";
|
||||||
|
static const std::string_view _get_device_info_url = "http://47.113.125.164:12800/stackChan/device/info";
|
||||||
|
static const std::string_view _unbind_user_account_info_url = "http://47.113.125.164:12800/stackChan/device/unbind";
|
||||||
|
|
||||||
|
static bool request_authorized_get(std::string_view token, std::string_view url, std::string &response,
|
||||||
|
std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
auto &board = Board::GetInstance();
|
||||||
|
auto network = board.GetNetwork();
|
||||||
|
auto http = network->CreateHttp(0);
|
||||||
|
|
||||||
|
if (!http) {
|
||||||
|
mclog::tagError(_tag, "failed to create http client");
|
||||||
|
onLog("Failed to create HTTP client");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
http->SetHeader("Authorization", std::string(token));
|
||||||
|
if (!http->Open("GET", std::string(url))) {
|
||||||
|
mclog::tagError(_tag, "failed to open http request: {}", url);
|
||||||
|
onLog("Failed to connect to server");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int status_code = http->GetStatusCode();
|
||||||
|
if (status_code != 200) {
|
||||||
|
mclog::tagError(_tag, "http get failed, status code: {}, url: {}", status_code, url);
|
||||||
|
onLog("HTTP Request Failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
response = http->ReadAll();
|
||||||
|
mclog::tagInfo(_tag, "response from {}: {}", url, response);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool fetch_username(std::string_view token, std::string &username, std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
onLog("Updating user account info...");
|
||||||
|
|
||||||
|
std::string response;
|
||||||
|
if (!request_authorized_get(token, _get_user_account_info_url, response, onLog)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *root = cJSON_Parse(response.c_str());
|
||||||
|
if (!root) {
|
||||||
|
mclog::tagError(_tag, "failed to parse user account json");
|
||||||
|
onLog("Failed to parse response");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool success = false;
|
||||||
|
cJSON *code = cJSON_GetObjectItem(root, "code");
|
||||||
|
cJSON *data = cJSON_GetObjectItem(root, "data");
|
||||||
|
|
||||||
|
const char *username_value = nullptr;
|
||||||
|
if (data && cJSON_IsString(data)) {
|
||||||
|
username_value = data->valuestring;
|
||||||
|
} else if (data && cJSON_IsObject(data)) {
|
||||||
|
cJSON *username_json = cJSON_GetObjectItem(data, "username");
|
||||||
|
if (username_json && cJSON_IsString(username_json)) {
|
||||||
|
username_value = username_json->valuestring;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code && cJSON_IsNumber(code) && code->valueint == 0 && username_value != nullptr) {
|
||||||
|
username = username_value;
|
||||||
|
success = true;
|
||||||
|
} else {
|
||||||
|
mclog::tagError(_tag, "invalid user account response format or error code");
|
||||||
|
onLog("Invalid response from server");
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool fetch_device_name(std::string_view token, std::string &deviceName,
|
||||||
|
std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
onLog("Updating device info...");
|
||||||
|
|
||||||
|
std::string response;
|
||||||
|
if (!request_authorized_get(token, _get_device_info_url, response, onLog)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *root = cJSON_Parse(response.c_str());
|
||||||
|
if (!root) {
|
||||||
|
mclog::tagError(_tag, "failed to parse device info json");
|
||||||
|
onLog("Failed to parse response");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool success = false;
|
||||||
|
cJSON *code = cJSON_GetObjectItem(root, "code");
|
||||||
|
cJSON *data = cJSON_GetObjectItem(root, "data");
|
||||||
|
cJSON *target = root;
|
||||||
|
|
||||||
|
if (code && cJSON_IsNumber(code)) {
|
||||||
|
if (code->valueint != 0) {
|
||||||
|
mclog::tagError(_tag, "device info request failed, code: {}", code->valueint);
|
||||||
|
onLog("Invalid response from server");
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (data && cJSON_IsObject(data)) {
|
||||||
|
target = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *name_json = cJSON_GetObjectItem(target, "name");
|
||||||
|
if (name_json && cJSON_IsString(name_json)) {
|
||||||
|
deviceName = name_json->valuestring;
|
||||||
|
success = true;
|
||||||
|
} else {
|
||||||
|
mclog::tagError(_tag, "invalid device info response format");
|
||||||
|
onLog("Invalid response from server");
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAccountInfo_t Hal::getUserAccountInfo()
|
||||||
|
{
|
||||||
|
UserAccountInfo_t info;
|
||||||
|
Settings settings(_setting_ns.data(), false);
|
||||||
|
info.username = settings.GetString(_setting_username_key.data(), "Account Info");
|
||||||
|
info.deviceName = settings.GetString(_setting_device_name_key.data(), "");
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Hal::updateAccountInfo(std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
std::string token = secret_logic::generate_auth_token();
|
||||||
|
|
||||||
|
std::string username;
|
||||||
|
if (!fetch_username(token, username, onLog)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string device_name;
|
||||||
|
if (!fetch_device_name(token, device_name, onLog)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings settings(_setting_ns.data(), true);
|
||||||
|
settings.SetString(_setting_username_key.data(), username);
|
||||||
|
settings.SetString(_setting_device_name_key.data(), device_name);
|
||||||
|
|
||||||
|
mclog::tagInfo(_tag, "account updated: username={}, device_name={}", username, device_name);
|
||||||
|
onLog(std::string("Account updated: ") + username);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Hal::unbindAccount(std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
std::string token = secret_logic::generate_auth_token();
|
||||||
|
|
||||||
|
auto &board = Board::GetInstance();
|
||||||
|
auto network = board.GetNetwork();
|
||||||
|
auto http = network->CreateHttp(0);
|
||||||
|
|
||||||
|
if (!http) {
|
||||||
|
mclog::tagError(_tag, "failed to create http client");
|
||||||
|
onLog("Failed to create HTTP client");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
http->SetHeader("Authorization", token);
|
||||||
|
http->SetContent(std::string());
|
||||||
|
mclog::tagInfo(_tag, "requesting to unbind account...");
|
||||||
|
onLog("Unbinding account...");
|
||||||
|
|
||||||
|
if (!http->Open("POST", std::string(_unbind_user_account_info_url))) {
|
||||||
|
mclog::tagError(_tag, "failed to open http request");
|
||||||
|
onLog("Failed to connect to server");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int status_code = http->GetStatusCode();
|
||||||
|
if (status_code != 200) {
|
||||||
|
mclog::tagError(_tag, "http post failed, status code: {}", status_code);
|
||||||
|
onLog("HTTP Request Failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string response = http->ReadAll();
|
||||||
|
mclog::tagInfo(_tag, "response: {}", response);
|
||||||
|
|
||||||
|
cJSON *root = cJSON_Parse(response.c_str());
|
||||||
|
if (!root) {
|
||||||
|
mclog::tagError(_tag, "failed to parse json");
|
||||||
|
onLog("Failed to parse response");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool success = false;
|
||||||
|
cJSON *code = cJSON_GetObjectItem(root, "code");
|
||||||
|
|
||||||
|
if (code && cJSON_IsNumber(code) && code->valueint == 0) {
|
||||||
|
Settings settings(_setting_ns.data(), true);
|
||||||
|
settings.SetString(_setting_username_key.data(), "Account Info");
|
||||||
|
settings.SetString(_setting_device_name_key.data(), "");
|
||||||
|
mclog::tagInfo(_tag, "account unbound successfully");
|
||||||
|
onLog("Account unbound successfully");
|
||||||
|
success = true;
|
||||||
|
} else {
|
||||||
|
mclog::tagError(_tag, "invalid response format or error code");
|
||||||
|
cJSON *msg = cJSON_GetObjectItem(root, "message");
|
||||||
|
if (msg && cJSON_IsString(msg)) {
|
||||||
|
onLog(std::string("Unbind failed: ") + msg->valuestring);
|
||||||
|
} else {
|
||||||
|
onLog("Invalid response from server");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
resetAppConfiged();
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "hal.h"
|
||||||
|
#include "utils/ota/ota.h"
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <board.h>
|
||||||
|
#include <cJSON.h>
|
||||||
|
|
||||||
|
static const std::string_view _tag = "HAL-AppCenter";
|
||||||
|
|
||||||
|
static const std::string_view _app_info_list_url = "http://47.113.125.164:12800/stackChan/apps";
|
||||||
|
|
||||||
|
static const char *get_json_string(cJSON *item, std::initializer_list<const char *> keys)
|
||||||
|
{
|
||||||
|
for (const auto *key : keys) {
|
||||||
|
cJSON *value = cJSON_GetObjectItemCaseSensitive(item, key);
|
||||||
|
if (cJSON_IsString(value) && value->valuestring != nullptr) {
|
||||||
|
return value->valuestring;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
app_center::AppInfoList_t Hal::fetchAppList()
|
||||||
|
{
|
||||||
|
app_center::AppInfoList_t app_list;
|
||||||
|
auto &board = Board::GetInstance();
|
||||||
|
auto network = board.GetNetwork();
|
||||||
|
|
||||||
|
auto http = network->CreateHttp(0);
|
||||||
|
if (!http->Open("GET", std::string(_app_info_list_url))) {
|
||||||
|
mclog::tagError(_tag, "failed to open http connection");
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (http->GetStatusCode() != 200) {
|
||||||
|
mclog::tagError(_tag, "failed to fetch app list, status code: {}", http->GetStatusCode());
|
||||||
|
http->Close();
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string data = http->ReadAll();
|
||||||
|
http->Close();
|
||||||
|
|
||||||
|
cJSON *root = cJSON_Parse(data.c_str());
|
||||||
|
if (root == NULL) {
|
||||||
|
mclog::tagError(_tag, "failed to parse json response");
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *app_array = nullptr;
|
||||||
|
if (cJSON_IsArray(root)) {
|
||||||
|
app_array = root;
|
||||||
|
} else if (cJSON_IsObject(root)) {
|
||||||
|
cJSON *code = cJSON_GetObjectItemCaseSensitive(root, "code");
|
||||||
|
if (cJSON_IsNumber(code) && code->valueint != 0) {
|
||||||
|
cJSON *message = cJSON_GetObjectItemCaseSensitive(root, "message");
|
||||||
|
mclog::tagError(_tag, "failed to fetch app list, code: {}, message: {}", code->valueint,
|
||||||
|
cJSON_IsString(message) ? message->valuestring : "unknown");
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
app_array = cJSON_GetObjectItemCaseSensitive(root, "data");
|
||||||
|
if (!cJSON_IsArray(app_array)) {
|
||||||
|
mclog::tagError(_tag, "invalid app list response: data is not an array");
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cJSON_IsArray(app_array)) {
|
||||||
|
cJSON *item = NULL;
|
||||||
|
cJSON_ArrayForEach(item, app_array)
|
||||||
|
{
|
||||||
|
app_center::AppInfo_t info;
|
||||||
|
|
||||||
|
if (const char *name = get_json_string(item, {"appName", "name"})) {
|
||||||
|
info.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (const char *icon = get_json_string(item, {"iconUrl", "appIcon", "icon"})) {
|
||||||
|
info.iconUrl = icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (const char *desc = get_json_string(item, {"description", "appDescription", "desc"})) {
|
||||||
|
info.description = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (const char *url = get_json_string(item, {"firmwareUrl", "downloadUrl", "otaUrl", "url"})) {
|
||||||
|
info.firmwareUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
app_list.push_back(info);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mclog::tagError(_tag, "invalid app list response: unexpected json shape");
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
return app_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::function<void(int)> _on_progress = nullptr;
|
||||||
|
static void ota_callback(int progress)
|
||||||
|
{
|
||||||
|
if (_on_progress) {
|
||||||
|
_on_progress(progress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hal::launchApp(std::string_view url, std::function<void(int)> onProgress)
|
||||||
|
{
|
||||||
|
mclog::tagInfo(_tag, "launching app from url: {}", url);
|
||||||
|
_on_progress = onProgress;
|
||||||
|
start_ota_update(url.data(), ota_callback);
|
||||||
|
}
|
||||||
@@ -48,7 +48,7 @@ static uint8_t _handle_ble_battery_read(void)
|
|||||||
return 96;
|
return 96;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hal::ble_init()
|
void Hal::ble_init(bool useAltUuid)
|
||||||
{
|
{
|
||||||
mclog::tagInfo(_tag, "init");
|
mclog::tagInfo(_tag, "init");
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ void Hal::ble_init()
|
|||||||
};
|
};
|
||||||
stackchan_ble_register_callbacks(&ble_callbacks);
|
stackchan_ble_register_callbacks(&ble_callbacks);
|
||||||
|
|
||||||
ble_prph_init();
|
ble_prph_init(useAltUuid);
|
||||||
|
|
||||||
uint8_t mac[6];
|
uint8_t mac[6];
|
||||||
esp_read_mac(mac, ESP_MAC_EFUSE_FACTORY);
|
esp_read_mac(mac, ESP_MAC_EFUSE_FACTORY);
|
||||||
@@ -72,7 +72,7 @@ void Hal::ble_init()
|
|||||||
void Hal::startBleServer()
|
void Hal::startBleServer()
|
||||||
{
|
{
|
||||||
mclog::tagInfo(_tag, "start ble server");
|
mclog::tagInfo(_tag, "start ble server");
|
||||||
ble_init();
|
ble_init(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Hal::isBleConnected()
|
bool Hal::isBleConnected()
|
||||||
@@ -273,7 +273,7 @@ void Hal::startAppConfigServer()
|
|||||||
{
|
{
|
||||||
mclog::tagInfo(_tag, "start app config server");
|
mclog::tagInfo(_tag, "start app config server");
|
||||||
|
|
||||||
ble_init();
|
ble_init(true);
|
||||||
|
|
||||||
mooncake::GetMooncake().extensionManager()->createAbility(std::make_unique<AppConfigServerWorker>());
|
mooncake::GetMooncake().extensionManager()->createAbility(std::make_unique<AppConfigServerWorker>());
|
||||||
}
|
}
|
||||||
@@ -283,3 +283,9 @@ bool Hal::isAppConfiged()
|
|||||||
Settings settings("app_config", false);
|
Settings settings("app_config", false);
|
||||||
return settings.GetBool("is_configed", false);
|
return settings.GetBool("is_configed", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Hal::resetAppConfiged()
|
||||||
|
{
|
||||||
|
Settings settings("app_config", true);
|
||||||
|
settings.SetBool("is_configed", false);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,465 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "hal.h"
|
||||||
|
#include <stackchan/stackchan.h>
|
||||||
|
#include <mooncake.h>
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <ArduinoJson.hpp>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <board.h>
|
||||||
|
#include <mqtt.h>
|
||||||
|
#include <esp_log.h>
|
||||||
|
#include <mutex>
|
||||||
|
#include <queue>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
using namespace stackchan;
|
||||||
|
|
||||||
|
static std::string _tag = "EzData";
|
||||||
|
|
||||||
|
class EzData {
|
||||||
|
public:
|
||||||
|
enum class CmdType : int {
|
||||||
|
// --- 数据操作 (100-102) ---
|
||||||
|
DeviceAddData = 100, ///< 设备端新增数据
|
||||||
|
DeviceUpdateData = 101, ///< 设备端修改数据
|
||||||
|
DeviceDeleteData = 102, ///< 设备端删除数据
|
||||||
|
|
||||||
|
// --- 数据查询 (103-104) ---
|
||||||
|
DeviceQueryList = 103, ///< 设备端查询数据列表
|
||||||
|
DeviceQueryDetail = 104, ///< 设备端查询数据详情
|
||||||
|
|
||||||
|
// --- 文件上传 (105) ---
|
||||||
|
DeviceUploadFile = 105, ///< 设备端上传文件 (通知)
|
||||||
|
|
||||||
|
// --- 用户操作 (106-109) ---
|
||||||
|
UserScanCode = 106, ///< 用户端扫码
|
||||||
|
UserUpdateData = 107, ///< 用户端修改数据
|
||||||
|
UserDeleteData = 108, ///< 用户端删除数据
|
||||||
|
UserAddData = 109, ///< 用户端新增数据
|
||||||
|
|
||||||
|
// --- 设备操作 (112) ---
|
||||||
|
DeviceGetMatchCode = 112, ///< 设备端获取匹配码
|
||||||
|
|
||||||
|
// --- 错误 (500) ---
|
||||||
|
Error = 500 ///< 设备端请求错误
|
||||||
|
};
|
||||||
|
|
||||||
|
std::function<void(void)> onConnected;
|
||||||
|
std::function<void(std::string_view)> onPairCodeReceived;
|
||||||
|
std::function<void(std::string_view, const ArduinoJson::JsonVariant&)> onUserUpdateData;
|
||||||
|
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
_connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void update()
|
||||||
|
{
|
||||||
|
if (!_mqtt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_mqtt->IsConnected()) {
|
||||||
|
if (GetHAL().millis() - _last_reconnect_attempt > 5000) {
|
||||||
|
ESP_LOGI(_tag.c_str(), "Reconnecting...");
|
||||||
|
_connect();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_process_messages();
|
||||||
|
_check_callbacks_timeout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendPacket(CmdType type, const std::function<void(ArduinoJson::JsonObject&)>& bodyBuilder = nullptr)
|
||||||
|
{
|
||||||
|
if (!_mqtt || !_mqtt->IsConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArduinoJson::JsonDocument doc;
|
||||||
|
doc["deviceToken"] = _token;
|
||||||
|
|
||||||
|
ArduinoJson::JsonObject body = doc["body"].to<ArduinoJson::JsonObject>();
|
||||||
|
body["requestType"] = static_cast<int>(type);
|
||||||
|
|
||||||
|
if (bodyBuilder) {
|
||||||
|
bodyBuilder(body);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string payload;
|
||||||
|
ArduinoJson::serializeJson(doc, payload);
|
||||||
|
|
||||||
|
ESP_LOGI(_tag.c_str(), "Sending Packet Type: %d", (int)type);
|
||||||
|
_mqtt->Publish(_pub_topic, payload, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void requestPairCode()
|
||||||
|
{
|
||||||
|
ESP_LOGI(_tag.c_str(), "Requesting pair code");
|
||||||
|
sendPacket(CmdType::DeviceGetMatchCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void addData(std::string_view name, T value)
|
||||||
|
{
|
||||||
|
sendPacket(CmdType::DeviceAddData, [&name, &value](ArduinoJson::JsonObject& body) {
|
||||||
|
body["name"] = name;
|
||||||
|
body["value"] = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void modifyData(std::string_view name, T value)
|
||||||
|
{
|
||||||
|
sendPacket(CmdType::DeviceUpdateData, [&name, &value](ArduinoJson::JsonObject& body) {
|
||||||
|
body["name"] = name;
|
||||||
|
body["value"] = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void getData(std::string_view name, std::function<void(const ArduinoJson::JsonVariant&)> onData,
|
||||||
|
std::function<void()> onFailed)
|
||||||
|
{
|
||||||
|
// 注册回调
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_callbacks_mutex);
|
||||||
|
_get_data_callbacks[name.data()] = {onData, onFailed, GetHAL().millis()};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送请求
|
||||||
|
sendPacket(CmdType::DeviceQueryDetail, [&name](ArduinoJson::JsonObject& body) { body["name"] = name; });
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<Mqtt> _mqtt;
|
||||||
|
uint32_t _last_reconnect_attempt = 0;
|
||||||
|
std::string _sub_topic;
|
||||||
|
std::string _pub_topic;
|
||||||
|
std::string _token;
|
||||||
|
|
||||||
|
std::mutex _mutex;
|
||||||
|
std::queue<std::string> _msg_queue;
|
||||||
|
|
||||||
|
struct GetDataCallback_t {
|
||||||
|
std::function<void(const ArduinoJson::JsonVariant&)> onData;
|
||||||
|
std::function<void()> onFailed;
|
||||||
|
uint32_t requestTime;
|
||||||
|
};
|
||||||
|
std::mutex _callbacks_mutex;
|
||||||
|
std::map<std::string, GetDataCallback_t> _get_data_callbacks;
|
||||||
|
|
||||||
|
std::string _get_device_token()
|
||||||
|
{
|
||||||
|
const std::string url = "https://ezdata2.m5stack.com/api/v2/device/registerMac";
|
||||||
|
|
||||||
|
auto& board = Board::GetInstance();
|
||||||
|
auto network = board.GetNetwork();
|
||||||
|
|
||||||
|
auto http = network->CreateHttp(0);
|
||||||
|
if (!http) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "failed to create HTTP instance");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
ArduinoJson::JsonDocument doc;
|
||||||
|
doc["deviceType"] = "CoreS3";
|
||||||
|
doc["mac"] = GetHAL().getFactoryMacString();
|
||||||
|
|
||||||
|
std::string payload;
|
||||||
|
ArduinoJson::serializeJson(doc, payload);
|
||||||
|
|
||||||
|
http->SetHeader("Content-Type", "application/json");
|
||||||
|
http->SetContent(std::move(payload));
|
||||||
|
|
||||||
|
if (!http->Open("POST", url)) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "failed to open HTTP connection");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int status_code = http->GetStatusCode();
|
||||||
|
|
||||||
|
if (status_code != 200) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "HTTP request failed, status code: %d", status_code);
|
||||||
|
http->Close();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string response = http->ReadAll();
|
||||||
|
http->Close();
|
||||||
|
|
||||||
|
doc.clear();
|
||||||
|
auto error = ArduinoJson::deserializeJson(doc, response);
|
||||||
|
if (error) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "failed to parse JSON response: %s", error.c_str());
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doc["code"] == 200 && doc["msg"] == "OK") {
|
||||||
|
if (doc["data"].is<std::string>()) {
|
||||||
|
return doc["data"].as<std::string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGE(_tag.c_str(), "failed to get token from response");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void _connect()
|
||||||
|
{
|
||||||
|
_mqtt.reset();
|
||||||
|
|
||||||
|
_token = _get_device_token();
|
||||||
|
if (_token.empty()) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "failed to get device token");
|
||||||
|
_last_reconnect_attempt = GetHAL().millis();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ESP_LOGI(_tag.c_str(), "get token %s", _token.c_str());
|
||||||
|
|
||||||
|
auto& board = Board::GetInstance();
|
||||||
|
auto network = board.GetNetwork();
|
||||||
|
|
||||||
|
_mqtt = network->CreateMqtt(1);
|
||||||
|
if (!_mqtt) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "Failed to create MQTT instance");
|
||||||
|
_last_reconnect_attempt = GetHAL().millis();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string mac = GetHAL().getFactoryMacString();
|
||||||
|
std::string client_id = fmt::format("ez{}ez", mac);
|
||||||
|
_sub_topic = fmt::format("$ezdata/{}/down", _token);
|
||||||
|
_pub_topic = fmt::format("$ezdata/{}/up", _token);
|
||||||
|
|
||||||
|
_mqtt->OnConnected([this]() {
|
||||||
|
ESP_LOGI(_tag.c_str(), "Connected");
|
||||||
|
_mqtt->Subscribe(_sub_topic, 0);
|
||||||
|
ESP_LOGI(_tag.c_str(), "Subscribed: %s", _sub_topic.c_str());
|
||||||
|
|
||||||
|
if (onConnected) {
|
||||||
|
onConnected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
_mqtt->OnDisconnected([this]() { ESP_LOGI(_tag.c_str(), "Disconnected"); });
|
||||||
|
|
||||||
|
_mqtt->OnMessage([this](const std::string&, const std::string& payload) {
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
_msg_queue.push(payload);
|
||||||
|
});
|
||||||
|
|
||||||
|
ESP_LOGI(_tag.c_str(), "Connecting to EzData as %s", client_id.c_str());
|
||||||
|
_mqtt->Connect("uiflow2.m5stack.com", 1883, client_id, _token, "");
|
||||||
|
|
||||||
|
_last_reconnect_attempt = GetHAL().millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _check_callbacks_timeout()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_callbacks_mutex);
|
||||||
|
uint32_t now = GetHAL().millis();
|
||||||
|
for (auto it = _get_data_callbacks.begin(); it != _get_data_callbacks.end();) {
|
||||||
|
if (now - it->second.requestTime > 5000) {
|
||||||
|
ESP_LOGW(_tag.c_str(), "GetData timeout for %s", it->first.c_str());
|
||||||
|
if (it->second.onFailed) {
|
||||||
|
it->second.onFailed();
|
||||||
|
}
|
||||||
|
it = _get_data_callbacks.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _process_messages()
|
||||||
|
{
|
||||||
|
std::vector<std::string> messages;
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
while (!_msg_queue.empty()) {
|
||||||
|
messages.push_back(std::move(_msg_queue.front()));
|
||||||
|
_msg_queue.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& msg : messages) {
|
||||||
|
_handle_message(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handle_message(std::string_view payload)
|
||||||
|
{
|
||||||
|
ArduinoJson::JsonDocument doc;
|
||||||
|
auto error = ArduinoJson::deserializeJson(doc, payload);
|
||||||
|
if (error) {
|
||||||
|
ESP_LOGE(_tag.c_str(), "DeserializeJson failed: %s", error.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!doc["code"].is<int>()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int code = doc["code"];
|
||||||
|
if (code != 200) {
|
||||||
|
ESP_LOGW(_tag.c_str(), "EzData response error code: %d", code);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!doc["cmd"].is<int>()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CmdType cmd = static_cast<CmdType>(doc["cmd"].as<int>());
|
||||||
|
// auto body = doc["body"];
|
||||||
|
|
||||||
|
ESP_LOGI(_tag.c_str(), "Received Cmd: %d", (int)cmd);
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case CmdType::DeviceQueryList:
|
||||||
|
ESP_LOGI(_tag.c_str(), "Device list received");
|
||||||
|
break;
|
||||||
|
case CmdType::DeviceGetMatchCode: {
|
||||||
|
if (doc["body"]["pairCode"].is<std::string>()) {
|
||||||
|
std::string pair_code = doc["body"]["pairCode"].as<std::string>();
|
||||||
|
ESP_LOGI(_tag.c_str(), "Pair code: %s", pair_code.c_str());
|
||||||
|
|
||||||
|
if (onPairCodeReceived) {
|
||||||
|
onPairCodeReceived(pair_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CmdType::DeviceQueryDetail: {
|
||||||
|
// {"body": {"createTime": 1751274100000, "dataToken": "...", "id": "...", "name": "adasd",
|
||||||
|
// "updateTime": 1751274100000, "value": "ddsad"}}
|
||||||
|
if (doc["body"].is<ArduinoJson::JsonObject>()) {
|
||||||
|
std::string name;
|
||||||
|
ArduinoJson::JsonVariant value = doc["body"]["value"];
|
||||||
|
|
||||||
|
if (doc["body"]["name"].is<std::string>()) {
|
||||||
|
name = doc["body"]["name"].as<std::string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!name.empty()) {
|
||||||
|
std::lock_guard<std::mutex> lock(_callbacks_mutex);
|
||||||
|
auto it = _get_data_callbacks.find(name);
|
||||||
|
if (it != _get_data_callbacks.end()) {
|
||||||
|
if (it->second.onData) {
|
||||||
|
it->second.onData(value);
|
||||||
|
}
|
||||||
|
_get_data_callbacks.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CmdType::UserUpdateData: {
|
||||||
|
if (doc["body"].is<ArduinoJson::JsonObject>()) {
|
||||||
|
std::string name;
|
||||||
|
ArduinoJson::JsonVariant value = doc["body"]["value"];
|
||||||
|
|
||||||
|
if (doc["body"]["name"].is<std::string>()) {
|
||||||
|
name = doc["body"]["name"].as<std::string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!name.empty() && onUserUpdateData) {
|
||||||
|
onUserUpdateData(name, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class EzdataWorker : public mooncake::BasicAbility {
|
||||||
|
public:
|
||||||
|
EzdataWorker()
|
||||||
|
{
|
||||||
|
_service = std::make_unique<EzData>();
|
||||||
|
|
||||||
|
_service->onConnected = [this]() { _service->requestPairCode(); };
|
||||||
|
_service->onPairCodeReceived = [this](std::string_view pairCode) { GetHAL().onEzdataPairCode.emit(pairCode); };
|
||||||
|
_service->onUserUpdateData = [this](std::string_view name, const ArduinoJson::JsonVariant& value) {
|
||||||
|
handle_user_update_data(name, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
_service->init();
|
||||||
|
|
||||||
|
setup_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void onRunning() override
|
||||||
|
{
|
||||||
|
_service->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void onDestroy() override
|
||||||
|
{
|
||||||
|
_service.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<EzData> _service;
|
||||||
|
int _pitch_servo_speed = 500;
|
||||||
|
int _yaw_servo_speed = 500;
|
||||||
|
|
||||||
|
const std::string_view KEY_PITCH_SERVO_ANGLE = "SERVO.Y.ANGLE";
|
||||||
|
const std::string_view KEY_PITCH_SERVO_SPEED = "SERVO.Y.SPEED";
|
||||||
|
const std::string_view KEY_YAW_SERVO_ANGLE = "SERVO.X.ANGLE";
|
||||||
|
const std::string_view KEY_YAW_SERVO_SPEED = "SERVO.X.SPEED";
|
||||||
|
|
||||||
|
void setup_data()
|
||||||
|
{
|
||||||
|
auto& motion = GetStackChan().motion();
|
||||||
|
|
||||||
|
_service->addData(KEY_PITCH_SERVO_ANGLE, ((float)motion.getCurrentPitchAngle() / 10.0f));
|
||||||
|
_service->addData(KEY_YAW_SERVO_ANGLE, ((float)motion.getCurrentYawAngle() / 10.0f));
|
||||||
|
_service->addData(KEY_PITCH_SERVO_SPEED, _pitch_servo_speed);
|
||||||
|
_service->addData(KEY_YAW_SERVO_SPEED, _yaw_servo_speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_user_update_data(std::string_view name, const ArduinoJson::JsonVariant& value)
|
||||||
|
{
|
||||||
|
mclog::tagInfo(_tag, "on user update data {}", name);
|
||||||
|
|
||||||
|
auto& motion = GetStackChan().motion();
|
||||||
|
|
||||||
|
if (name == KEY_PITCH_SERVO_ANGLE) {
|
||||||
|
if (value.is<float>()) {
|
||||||
|
float angle = value.as<float>();
|
||||||
|
motion.movePitchWithSpeed(angle * 10, _pitch_servo_speed);
|
||||||
|
}
|
||||||
|
} else if (name == KEY_YAW_SERVO_ANGLE) {
|
||||||
|
if (value.is<float>()) {
|
||||||
|
float angle = value.as<float>();
|
||||||
|
motion.moveYawWithSpeed(angle * 10, _yaw_servo_speed);
|
||||||
|
}
|
||||||
|
} else if (name == KEY_PITCH_SERVO_SPEED) {
|
||||||
|
if (value.is<int>()) {
|
||||||
|
_pitch_servo_speed = value.as<int>();
|
||||||
|
}
|
||||||
|
} else if (name == KEY_YAW_SERVO_SPEED) {
|
||||||
|
if (value.is<int>()) {
|
||||||
|
_yaw_servo_speed = value.as<int>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void Hal::startEzDataService(std::function<void(std::string_view)> onStartLog)
|
||||||
|
{
|
||||||
|
mclog::tagInfo(_tag, "start ezdata service");
|
||||||
|
|
||||||
|
startNetwork(onStartLog);
|
||||||
|
|
||||||
|
onStartLog("Connecting to\nserver...");
|
||||||
|
mooncake::GetMooncake().extensionManager()->createAbility(std::make_unique<EzdataWorker>());
|
||||||
|
}
|
||||||
@@ -15,8 +15,10 @@
|
|||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <esp_sntp.h>
|
#include <esp_sntp.h>
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
static std::string _tag = "Network";
|
static std::string _tag = "Network";
|
||||||
|
static bool _is_network_connected = false;
|
||||||
|
|
||||||
static void time_sync_notification_cb(struct timeval* tv)
|
static void time_sync_notification_cb(struct timeval* tv)
|
||||||
{
|
{
|
||||||
@@ -44,6 +46,11 @@ void Hal::startSntp()
|
|||||||
|
|
||||||
void Hal::startNetwork(std::function<void(std::string_view)> onLog)
|
void Hal::startNetwork(std::function<void(std::string_view)> onLog)
|
||||||
{
|
{
|
||||||
|
if (_is_network_connected) {
|
||||||
|
mclog::tagInfo(_tag, "network already connected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::atomic<bool> network_connected = false;
|
std::atomic<bool> network_connected = false;
|
||||||
|
|
||||||
auto& board = Board::GetInstance();
|
auto& board = Board::GetInstance();
|
||||||
@@ -108,6 +115,8 @@ void Hal::startNetwork(std::function<void(std::string_view)> onLog)
|
|||||||
board.SetNetworkEventCallback(nullptr);
|
board.SetNetworkEventCallback(nullptr);
|
||||||
|
|
||||||
startSntp();
|
startSntp();
|
||||||
|
|
||||||
|
_is_network_connected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiStatus Hal::getWifiStatus()
|
WifiStatus Hal::getWifiStatus()
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#include "hal.h"
|
||||||
|
#include <mooncake_log.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <ota.h>
|
||||||
|
|
||||||
|
static const std::string_view _tag = "HAL-OTA";
|
||||||
|
|
||||||
|
bool Hal::updateFirmware(std::function<void(std::string_view)> onLog)
|
||||||
|
{
|
||||||
|
onLog("Checking firmware updates...");
|
||||||
|
|
||||||
|
Ota ota;
|
||||||
|
esp_err_t err = ota.CheckVersion();
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
mclog::tagError(_tag, "failed to check firmware version: {}", esp_err_to_name(err));
|
||||||
|
onLog("Failed to check firmware updates");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ota.HasNewVersion()) {
|
||||||
|
ota.MarkCurrentVersionValid();
|
||||||
|
mclog::tagInfo(_tag, "no new firmware version available");
|
||||||
|
onLog("Already up to date");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string &firmware_url = ota.GetFirmwareUrl();
|
||||||
|
const std::string &firmware_version = ota.GetFirmwareVersion();
|
||||||
|
if (firmware_url.empty()) {
|
||||||
|
mclog::tagError(_tag, "firmware update available but url is empty");
|
||||||
|
onLog("Invalid firmware update info");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mclog::tagInfo(_tag, "new firmware available: version={}, url={}", firmware_version, firmware_url);
|
||||||
|
if (!firmware_version.empty()) {
|
||||||
|
onLog(std::string("New firmware found: ") + firmware_version);
|
||||||
|
} else {
|
||||||
|
onLog("New firmware found");
|
||||||
|
}
|
||||||
|
|
||||||
|
onLog("Starting firmware upgrade...");
|
||||||
|
bool upgrade_success = Ota::Upgrade(firmware_url, [&](int progress, size_t speed) {
|
||||||
|
auto msg = fmt::format("Upgrading firmware: {}% at {}KB/s", progress, speed / 1024);
|
||||||
|
mclog::tagInfo(_tag, "upgrade progress: {}", msg);
|
||||||
|
onLog(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!upgrade_success) {
|
||||||
|
mclog::tagError(_tag, "firmware upgrade failed: version={}, url={}", firmware_version, firmware_url);
|
||||||
|
onLog("Firmware upgrade failed, rebooting...");
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(5000));
|
||||||
|
reboot();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mclog::tagInfo(_tag, "firmware upgrade successful, rebooting");
|
||||||
|
onLog("Upgrade successful, rebooting...");
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||||
|
reboot();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -170,7 +170,7 @@ void Hal::servo_init()
|
|||||||
|
|
||||||
ServoConfig_t yaw_servo_config;
|
ServoConfig_t yaw_servo_config;
|
||||||
yaw_servo_config.id = 1;
|
yaw_servo_config.id = 1;
|
||||||
yaw_servo_config.defaultZeroPos = 450;
|
yaw_servo_config.defaultZeroPos = 460;
|
||||||
yaw_servo_config.angleLimit = Vector2i(-1280, 1280);
|
yaw_servo_config.angleLimit = Vector2i(-1280, 1280);
|
||||||
yaw_servo_config.rawPosLimit = Vector2i(0, 1000);
|
yaw_servo_config.rawPosLimit = Vector2i(0, 1000);
|
||||||
yaw_servo_config.settingNs = "servo";
|
yaw_servo_config.settingNs = "servo";
|
||||||
@@ -179,7 +179,7 @@ void Hal::servo_init()
|
|||||||
|
|
||||||
ServoConfig_t pitch_servo_config;
|
ServoConfig_t pitch_servo_config;
|
||||||
pitch_servo_config.id = 2;
|
pitch_servo_config.id = 2;
|
||||||
pitch_servo_config.defaultZeroPos = 125;
|
pitch_servo_config.defaultZeroPos = 620;
|
||||||
pitch_servo_config.angleLimit = Vector2i(0, 900);
|
pitch_servo_config.angleLimit = Vector2i(0, 900);
|
||||||
pitch_servo_config.rawPosLimit = Vector2i(0, 1000);
|
pitch_servo_config.rawPosLimit = Vector2i(0, 1000);
|
||||||
pitch_servo_config.settingNs = "servo";
|
pitch_servo_config.settingNs = "servo";
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#include <lvgl_image.h>
|
#include <lvgl_image.h>
|
||||||
#include <wifi_manager.h>
|
#include <wifi_manager.h>
|
||||||
#include "utils/jpeg_to_image/jpeg_decoder.h"
|
#include "utils/jpeg_to_image/jpeg_decoder.h"
|
||||||
#include "audio/audio_service.h"
|
|
||||||
#include "utils/secret_logic/secret_logic.h"
|
#include "utils/secret_logic/secret_logic.h"
|
||||||
|
|
||||||
static std::string _tag = "WS-Avatar";
|
static std::string _tag = "WS-Avatar";
|
||||||
@@ -94,9 +93,6 @@ public:
|
|||||||
ESP_LOGI(_tag.c_str(), "Sending EndCall");
|
ESP_LOGI(_tag.c_str(), "Sending EndCall");
|
||||||
sendPacket(DataType::EndCall, nullptr, 0);
|
sendPacket(DataType::EndCall, nullptr, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Initialize audio service
|
|
||||||
setupAudio();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void connect()
|
void connect()
|
||||||
@@ -134,18 +130,6 @@ public:
|
|||||||
});
|
});
|
||||||
|
|
||||||
_websocket->OnData([this](const char* data, size_t len, bool binary) {
|
_websocket->OnData([this](const char* data, size_t len, bool binary) {
|
||||||
// Fast path for Audio packets to avoid jitter from main thread loop
|
|
||||||
if (binary && len > 5 && static_cast<DataType>(data[0]) == DataType::Opus) {
|
|
||||||
// Determine raw pointer and size safely
|
|
||||||
const uint8_t* u_data = reinterpret_cast<const uint8_t*>(data);
|
|
||||||
|
|
||||||
// Directly construct and push to AudioService
|
|
||||||
auto packet = std::make_unique<AudioStreamPacket>();
|
|
||||||
packet->payload.assign(u_data + 5, u_data + len);
|
|
||||||
_audio_service.PushPacketToDecodeQueue(std::move(packet));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
_msg_queue.push({binary, std::vector<uint8_t>(data, data + len)});
|
_msg_queue.push({binary, std::vector<uint8_t>(data, data + len)});
|
||||||
});
|
});
|
||||||
@@ -373,13 +357,9 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DataType::StartAudioStream: {
|
case DataType::StartAudioStream: {
|
||||||
ESP_LOGI(_tag.c_str(), "Start Audio Stream");
|
|
||||||
_is_audio_streaming = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DataType::StopAudioStream: {
|
case DataType::StopAudioStream: {
|
||||||
ESP_LOGI(_tag.c_str(), "Stop Audio Stream");
|
|
||||||
_is_audio_streaming = false;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -452,44 +432,11 @@ private:
|
|||||||
uint32_t _last_heartbeat_time = 0;
|
uint32_t _last_heartbeat_time = 0;
|
||||||
bool _is_streaming = false;
|
bool _is_streaming = false;
|
||||||
bool _is_video_mode = false;
|
bool _is_video_mode = false;
|
||||||
std::atomic<bool> _is_audio_streaming{false};
|
|
||||||
std::mutex _mutex;
|
std::mutex _mutex;
|
||||||
std::queue<ReceivedMessage> _msg_queue;
|
std::queue<ReceivedMessage> _msg_queue;
|
||||||
|
|
||||||
// Audio
|
|
||||||
AudioService _audio_service;
|
|
||||||
std::mutex _send_mutex;
|
std::mutex _send_mutex;
|
||||||
|
|
||||||
void setupAudio()
|
|
||||||
{
|
|
||||||
auto codec = Board::GetInstance().GetAudioCodec();
|
|
||||||
_audio_service.Initialize(codec);
|
|
||||||
|
|
||||||
AudioServiceCallbacks callbacks;
|
|
||||||
callbacks.on_send_queue_available = [this]() {
|
|
||||||
while (true) {
|
|
||||||
auto packet = _audio_service.PopPacketFromSendQueue();
|
|
||||||
if (!packet) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only send audio if streaming is enabled
|
|
||||||
if (_is_audio_streaming) {
|
|
||||||
if (!packet->payload.empty()) {
|
|
||||||
sendPacket(DataType::Opus, packet->payload.data(), packet->payload.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
_audio_service.SetCallbacks(callbacks);
|
|
||||||
|
|
||||||
codec->SetInputGain(0.0f);
|
|
||||||
_audio_service.Start();
|
|
||||||
_audio_service.EnableVoiceProcessing(true);
|
|
||||||
_audio_service.EnableDeviceAec(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendPacket(DataType type, const uint8_t* data, size_t len)
|
void sendPacket(DataType type, const uint8_t* data, size_t len)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_send_mutex);
|
std::lock_guard<std::mutex> lock(_send_mutex);
|
||||||
|
|||||||
@@ -32,8 +32,35 @@
|
|||||||
|
|
||||||
#if CONFIG_EXAMPLE_EXTENDED_ADV
|
#if CONFIG_EXAMPLE_EXTENDED_ADV
|
||||||
static uint8_t ext_adv_pattern_1[] = {
|
static uint8_t ext_adv_pattern_1[] = {
|
||||||
0x02, 0x01, 0x06, 0x03, 0x03, 0xab, 0xcd, 0x03, 0x03, 0x18, 0x11, 0x11, 0X09, 'n', 'i',
|
0x02,
|
||||||
'm', 'b', 'l', 'e', '-', 'b', 'l', 'e', 'p', 'r', 'p', 'h', '-', 'e',
|
BLE_HS_ADV_TYPE_FLAGS,
|
||||||
|
0x06,
|
||||||
|
0x03,
|
||||||
|
BLE_HS_ADV_TYPE_COMP_UUIDS16,
|
||||||
|
0xab,
|
||||||
|
0xcd,
|
||||||
|
0x03,
|
||||||
|
BLE_HS_ADV_TYPE_COMP_UUIDS16,
|
||||||
|
0x18,
|
||||||
|
0x11,
|
||||||
|
0x11,
|
||||||
|
BLE_HS_ADV_TYPE_COMP_NAME,
|
||||||
|
'n',
|
||||||
|
'i',
|
||||||
|
'm',
|
||||||
|
'b',
|
||||||
|
'l',
|
||||||
|
'e',
|
||||||
|
'-',
|
||||||
|
'b',
|
||||||
|
'l',
|
||||||
|
'e',
|
||||||
|
'p',
|
||||||
|
'r',
|
||||||
|
'p',
|
||||||
|
'h',
|
||||||
|
'-',
|
||||||
|
'e',
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -50,6 +77,8 @@ static uint16_t cids[MYNEWT_VAL(BLE_EATT_CHAN_NUM)];
|
|||||||
static uint16_t bearers;
|
static uint16_t bearers;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool s_use_alt_uuid = false;
|
||||||
|
|
||||||
void ble_store_config_init(void);
|
void ble_store_config_init(void);
|
||||||
|
|
||||||
#if NIMBLE_BLE_CONNECT
|
#if NIMBLE_BLE_CONNECT
|
||||||
@@ -103,8 +132,8 @@ static void ext_bleprph_advertise(void)
|
|||||||
|
|
||||||
params.primary_phy = BLE_HCI_LE_PHY_1M;
|
params.primary_phy = BLE_HCI_LE_PHY_1M;
|
||||||
params.secondary_phy = BLE_HCI_LE_PHY_2M;
|
params.secondary_phy = BLE_HCI_LE_PHY_2M;
|
||||||
// params.tx_power = 127;
|
params.tx_power = 127;
|
||||||
params.sid = 1;
|
params.sid = 1;
|
||||||
|
|
||||||
params.itvl_min = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
params.itvl_min = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
||||||
params.itvl_max = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
params.itvl_max = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
||||||
@@ -229,10 +258,17 @@ static void bleprph_advertise(void)
|
|||||||
// fields.num_uuids16 = 1;
|
// fields.num_uuids16 = 1;
|
||||||
// fields.uuids16_is_complete = 1;
|
// fields.uuids16_is_complete = 1;
|
||||||
|
|
||||||
ble_uuid128_t stackchan_uuid = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE);
|
ble_uuid128_t stackchan_uuid = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE);
|
||||||
fields.uuids128 = &stackchan_uuid;
|
ble_uuid128_t stackchan_uuid_alt = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE_ALT);
|
||||||
fields.num_uuids128 = 1;
|
|
||||||
fields.uuids128_is_complete = 1;
|
if (s_use_alt_uuid) {
|
||||||
|
fields.uuids128 = &stackchan_uuid_alt;
|
||||||
|
} else {
|
||||||
|
fields.uuids128 = &stackchan_uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
fields.num_uuids128 = 1;
|
||||||
|
fields.uuids128_is_complete = 1;
|
||||||
|
|
||||||
rc = ble_gap_adv_set_fields(&fields);
|
rc = ble_gap_adv_set_fields(&fields);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
@@ -600,8 +636,9 @@ void bleprph_host_task(void *param)
|
|||||||
nimble_port_freertos_deinit();
|
nimble_port_freertos_deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ble_prph_init(void)
|
void ble_prph_init(bool use_alt_uuid)
|
||||||
{
|
{
|
||||||
|
s_use_alt_uuid = use_alt_uuid;
|
||||||
int rc;
|
int rc;
|
||||||
esp_err_t ret;
|
esp_err_t ret;
|
||||||
|
|
||||||
@@ -647,14 +684,18 @@ void ble_prph_init(void)
|
|||||||
ble_hs_cfg.sm_their_key_dist |= BLE_SM_PAIR_KEY_DIST_ID;
|
ble_hs_cfg.sm_their_key_dist |= BLE_SM_PAIR_KEY_DIST_ID;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if MYNEWT_VAL(STATIC_PASSKEY) && NIMBLE_BLE_CONNECT
|
||||||
|
ble_sm_configure_static_passkey(456789, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MYNEWT_VAL(BLE_GATTS)
|
#if MYNEWT_VAL(BLE_GATTS)
|
||||||
rc = gatt_svr_init();
|
rc = gatt_svr_init(use_alt_uuid);
|
||||||
assert(rc == 0);
|
assert(rc == 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_BT_NIMBLE_GAP_SERVICE
|
#if CONFIG_BT_NIMBLE_GAP_SERVICE
|
||||||
/* Set the default device name. */
|
/* Set the default device name. */
|
||||||
rc = ble_svc_gap_device_name_set("Stack-Chan");
|
rc = ble_svc_gap_device_name_set("StackChan");
|
||||||
assert(rc == 0);
|
assert(rc == 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ struct ble_gatt_register_ctxt;
|
|||||||
#define STACKCHAN_SVC_UUID_BASE \
|
#define STACKCHAN_SVC_UUID_BASE \
|
||||||
0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0xe0, 0xe5, 0xe5, 0xe2
|
0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0xe0, 0xe5, 0xe5, 0xe2
|
||||||
|
|
||||||
|
// Service UUID Alt: e2e5e5ff-1234-5678-1234-56789abcdef0
|
||||||
|
#define STACKCHAN_SVC_UUID_BASE_ALT \
|
||||||
|
0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0xff, 0xe5, 0xe5, 0xe2
|
||||||
|
|
||||||
// Motion Characteristic UUID: e2e5e5e1-1234-5678-1234-56789abcdef0
|
// Motion Characteristic UUID: e2e5e5e1-1234-5678-1234-56789abcdef0
|
||||||
#define STACKCHAN_CHR_MOTION_UUID \
|
#define STACKCHAN_CHR_MOTION_UUID \
|
||||||
0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0xe1, 0xe5, 0xe5, 0xe2
|
0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0xe1, 0xe5, 0xe5, 0xe2
|
||||||
@@ -160,9 +164,9 @@ void stackchan_ble_set_conn_handle(uint16_t conn_handle);
|
|||||||
bool stackchan_ble_is_connected(void);
|
bool stackchan_ble_is_connected(void);
|
||||||
|
|
||||||
void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg);
|
void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg);
|
||||||
int gatt_svr_init(void);
|
int gatt_svr_init(bool use_alt_uuid);
|
||||||
|
|
||||||
void ble_prph_init(void);
|
void ble_prph_init(bool use_alt_uuid);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,8 @@
|
|||||||
#define MAX_NOTIFY 5
|
#define MAX_NOTIFY 5
|
||||||
|
|
||||||
/* Stack-Chan Service */
|
/* Stack-Chan Service */
|
||||||
static const ble_uuid128_t stackchan_svc_uuid = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE);
|
static const ble_uuid128_t stackchan_svc_uuid = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE);
|
||||||
|
static const ble_uuid128_t stackchan_svc_uuid_alt = BLE_UUID128_INIT(STACKCHAN_SVC_UUID_BASE_ALT);
|
||||||
|
|
||||||
static const ble_uuid128_t stackchan_chr_motion_uuid = BLE_UUID128_INIT(STACKCHAN_CHR_MOTION_UUID);
|
static const ble_uuid128_t stackchan_chr_motion_uuid = BLE_UUID128_INIT(STACKCHAN_CHR_MOTION_UUID);
|
||||||
|
|
||||||
@@ -77,7 +78,7 @@ static int stackchan_svc_access(uint16_t conn_handle, uint16_t attr_handle, stru
|
|||||||
|
|
||||||
static int battery_svc_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
static int battery_svc_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
||||||
|
|
||||||
static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
|
static struct ble_gatt_svc_def gatt_svr_svcs[] = {
|
||||||
{
|
{
|
||||||
/*** Stack-Chan Service ***/
|
/*** Stack-Chan Service ***/
|
||||||
.type = BLE_GATT_SVC_TYPE_PRIMARY,
|
.type = BLE_GATT_SVC_TYPE_PRIMARY,
|
||||||
@@ -321,7 +322,7 @@ void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int gatt_svr_init(void)
|
int gatt_svr_init(bool use_alt_uuid)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@@ -339,6 +340,12 @@ int gatt_svr_init(void)
|
|||||||
ble_svc_gap_init();
|
ble_svc_gap_init();
|
||||||
ble_svc_gatt_init();
|
ble_svc_gatt_init();
|
||||||
|
|
||||||
|
if (use_alt_uuid) {
|
||||||
|
gatt_svr_svcs[0].uuid = &stackchan_svc_uuid_alt.u;
|
||||||
|
} else {
|
||||||
|
gatt_svr_svcs[0].uuid = &stackchan_svc_uuid.u;
|
||||||
|
}
|
||||||
|
|
||||||
rc = ble_gatts_count_cfg(gatt_svr_svcs);
|
rc = ble_gatts_count_cfg(gatt_svr_svcs);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
return rc;
|
return rc;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@@ -32,7 +32,7 @@ static int enter_passkey_handler(int argc, char *argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sscanf(argv[1], "%s", pkey);
|
sscanf(argv[1], "%7s", pkey);
|
||||||
ESP_LOGI("You entered", "%s %s", argv[0], argv[1]);
|
ESP_LOGI("You entered", "%s %s", argv[0], argv[1]);
|
||||||
num = pkey[0];
|
num = pkey[0];
|
||||||
|
|
||||||
@@ -45,7 +45,9 @@ static int enter_passkey_handler(int argc, char *argv[])
|
|||||||
xQueueSend(cli_handle, &key, 0);
|
xQueueSend(cli_handle, &key, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sscanf(pkey, "%d", &key);
|
if (sscanf(pkey, "%d", &key) != 1) {
|
||||||
|
key = 0;
|
||||||
|
}
|
||||||
xQueueSend(cli_handle, &key, 0);
|
xQueueSend(cli_handle, &key, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,14 +86,14 @@ static void scli_task(void *arg)
|
|||||||
QueueHandle_t uart_queue;
|
QueueHandle_t uart_queue;
|
||||||
uart_event_t event;
|
uart_event_t event;
|
||||||
|
|
||||||
uart_driver_install(uart_num, 256, 0, 8, &uart_queue, 0);
|
ESP_ERROR_CHECK(uart_driver_install(uart_num, 256, 0, 8, &uart_queue, 0));
|
||||||
/* Initialize the console */
|
/* Initialize the console */
|
||||||
esp_console_config_t console_config = {
|
esp_console_config_t console_config = {
|
||||||
.max_cmdline_args = 8,
|
.max_cmdline_args = 8,
|
||||||
.max_cmdline_length = 256,
|
.max_cmdline_length = 256,
|
||||||
};
|
};
|
||||||
|
|
||||||
esp_console_init(&console_config);
|
ESP_ERROR_CHECK(esp_console_init(&console_config));
|
||||||
|
|
||||||
while (!stop) {
|
while (!stop) {
|
||||||
i = 0;
|
i = 0;
|
||||||
@@ -107,6 +109,9 @@ static void scli_task(void *arg)
|
|||||||
}
|
}
|
||||||
if (event.type == UART_DATA) {
|
if (event.type == UART_DATA) {
|
||||||
while (uart_read_bytes(uart_num, (uint8_t *)&linebuf[i], 1, 0)) {
|
while (uart_read_bytes(uart_num, (uint8_t *)&linebuf[i], 1, 0)) {
|
||||||
|
if (i >= sizeof(linebuf) - 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (linebuf[i] == '\r') {
|
if (linebuf[i] == '\r') {
|
||||||
uart_write_bytes(uart_num, "\r\n", 2);
|
uart_write_bytes(uart_num, "\r\n", 2);
|
||||||
} else {
|
} else {
|
||||||
@@ -115,13 +120,17 @@ static void scli_task(void *arg)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while ((i < 255) && linebuf[i - 1] != '\r');
|
|
||||||
|
} while ((i < 255) && (i == 0 || linebuf[i - 1] != '\r'));
|
||||||
if (stop) {
|
if (stop) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Remove the truncating \r\n */
|
/* Remove the truncating \r\n */
|
||||||
linebuf[strlen((char *)linebuf) - 1] = '\0';
|
size_t len = strlen((char *)linebuf);
|
||||||
ret = esp_console_run((char *)linebuf, &cmd_ret);
|
if (len > 0) {
|
||||||
|
linebuf[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
ret = esp_console_run((char *)linebuf, &cmd_ret);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -144,3 +153,40 @@ int scli_init(void)
|
|||||||
}
|
}
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int scli_deinit(void)
|
||||||
|
{
|
||||||
|
if (cli_task == NULL) {
|
||||||
|
return ESP_OK; // Already deinitialized
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signal task to exit
|
||||||
|
stop = 1;
|
||||||
|
|
||||||
|
// Wait for task to exit (it will clean up UART and console)
|
||||||
|
int timeout_ms = 200;
|
||||||
|
while (timeout_ms > 0 && cli_task != NULL && eTaskGetState(cli_task) != eDeleted) {
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(10));
|
||||||
|
timeout_ms -= 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force delete if still running (shouldn't happen if task exits properly)
|
||||||
|
if (cli_task != NULL && eTaskGetState(cli_task) != eDeleted) {
|
||||||
|
vTaskDelete(cli_task);
|
||||||
|
// If force-deleted, clean up resources manually
|
||||||
|
uart_driver_delete(0);
|
||||||
|
esp_console_deinit();
|
||||||
|
}
|
||||||
|
cli_task = NULL;
|
||||||
|
|
||||||
|
// Clean up queue
|
||||||
|
if (cli_handle != NULL) {
|
||||||
|
vQueueDelete(cli_handle);
|
||||||
|
cli_handle = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset stop flag
|
||||||
|
stop = 0;
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
## IDF Component Manager Manifest File
|
## IDF Component Manager Manifest File
|
||||||
dependencies:
|
dependencies:
|
||||||
waveshare/esp_lcd_sh8601: 1.0.2
|
waveshare/esp_lcd_sh8601: 1.0.2
|
||||||
|
espressif/esp_lcd_co5300: ^2.0.3
|
||||||
espressif/esp_lcd_ili9341: ==1.2.0
|
espressif/esp_lcd_ili9341: ==1.2.0
|
||||||
espressif/esp_lcd_gc9a01: ==2.0.1
|
espressif/esp_lcd_gc9a01: ==2.0.1
|
||||||
espressif/esp_lcd_st77916: ^1.0.1
|
espressif/esp_lcd_st77916: ^1.0.1
|
||||||
@@ -16,21 +17,32 @@ dependencies:
|
|||||||
- if: target in [esp32, esp32s2, esp32s3, esp32p4]
|
- if: target in [esp32, esp32s2, esp32s3, esp32p4]
|
||||||
espressif/esp_lcd_spd2010: ==1.0.2
|
espressif/esp_lcd_spd2010: ==1.0.2
|
||||||
espressif/esp_io_expander_tca9554: ==2.0.0
|
espressif/esp_io_expander_tca9554: ==2.0.0
|
||||||
|
waveshare/custom_io_expander_ch32v003: ^1.0.0
|
||||||
espressif/esp_lcd_panel_io_additions: ^1.0.1
|
espressif/esp_lcd_panel_io_additions: ^1.0.1
|
||||||
78/esp_lcd_nv3023: ~1.0.0
|
78/esp_lcd_nv3023: ~1.0.0
|
||||||
78/esp-wifi-connect: ~3.0.2
|
78/esp-wifi-connect: ~3.1.1
|
||||||
78/esp-opus-encoder: ~2.4.1
|
espressif/esp_audio_effects: ~1.2.1
|
||||||
78/esp-ml307: ~3.5.3
|
espressif/esp_audio_codec: ~2.4.1
|
||||||
78/xiaozhi-fonts: ~1.5.5
|
78/esp-ml307: ~3.6.4
|
||||||
espressif/led_strip: ~3.0.1
|
78/uart-eth-modem:
|
||||||
espressif/esp_codec_dev: ~1.5
|
version: ~0.3.3
|
||||||
# espressif/esp-sr: ~2.2.0
|
rules:
|
||||||
espressif/button: ~4.1.3
|
- if: target not in [esp32]
|
||||||
|
78/xiaozhi-fonts: ~1.6.0
|
||||||
|
espressif/led_strip: ~3.0.2
|
||||||
|
espressif/esp_codec_dev: ~1.5.4
|
||||||
|
espressif/esp-sr: ~2.3.0
|
||||||
|
espressif/button: ~4.1.5
|
||||||
espressif/knob: ^1.0.0
|
espressif/knob: ^1.0.0
|
||||||
|
espressif/esp32-camera:
|
||||||
|
version: ^2.1.4
|
||||||
|
rules:
|
||||||
|
- if: target in [esp32s3]
|
||||||
espressif/esp_video:
|
espressif/esp_video:
|
||||||
version: ==1.3.1 # for compatibility. update version may need to modify this project code.
|
version: ==1.3.1 # for compatibility. update version may need to modify this project code.
|
||||||
rules:
|
rules:
|
||||||
- if: target not in [esp32]
|
- if: target in [esp32p4, esp32s3]
|
||||||
|
|
||||||
espressif/esp_image_effects:
|
espressif/esp_image_effects:
|
||||||
version: ^1.0.1
|
version: ^1.0.1
|
||||||
rules:
|
rules:
|
||||||
@@ -40,15 +52,15 @@ dependencies:
|
|||||||
espressif/esp_lcd_touch_gt1151: ^1
|
espressif/esp_lcd_touch_gt1151: ^1
|
||||||
waveshare/esp_lcd_touch_cst9217: ^1.0.3
|
waveshare/esp_lcd_touch_cst9217: ^1.0.3
|
||||||
espressif/esp_lcd_touch_cst816s: ^1.0.6
|
espressif/esp_lcd_touch_cst816s: ^1.0.6
|
||||||
lvgl/lvgl: ~9.3.0
|
lvgl/lvgl: ~9.4.0
|
||||||
esp_lvgl_port: ~2.6.0
|
esp_lvgl_port: ~2.7.0
|
||||||
espressif/esp_io_expander_tca95xx_16bit: ^2.0.0
|
espressif/esp_io_expander_tca95xx_16bit: ^2.0.0
|
||||||
espressif2022/image_player: ^1.1.1
|
espressif2022/image_player: ^1.1.1
|
||||||
espressif2022/esp_emote_gfx: ==2.0.0
|
# espressif2022/esp_emote_expression: ^0.1.0
|
||||||
espressif/adc_mic: ^0.2.1
|
espressif/adc_mic: ^0.2.1
|
||||||
espressif/esp_mmap_assets: '>=1.2'
|
espressif/esp_mmap_assets: '>=1.2'
|
||||||
txp666/otto-emoji-gif-component:
|
txp666/otto-emoji-gif-component:
|
||||||
version: ^1.0.3
|
version: ^1.1.1
|
||||||
rules:
|
rules:
|
||||||
- if: target in [esp32s3]
|
- if: target in [esp32s3]
|
||||||
espressif/adc_battery_estimation: ^0.2.0
|
espressif/adc_battery_estimation: ^0.2.0
|
||||||
@@ -61,7 +73,7 @@ dependencies:
|
|||||||
- if: target in [esp32s3]
|
- if: target in [esp32s3]
|
||||||
|
|
||||||
tny-robotics/sh1106-esp-idf: ^1.0.0
|
tny-robotics/sh1106-esp-idf: ^1.0.0
|
||||||
waveshare/esp_lcd_jd9365_10_1:
|
espressif/esp_lcd_jd9365:
|
||||||
version: '*'
|
version: '*'
|
||||||
rules:
|
rules:
|
||||||
- if: target in [esp32p4]
|
- if: target in [esp32p4]
|
||||||
@@ -104,7 +116,12 @@ dependencies:
|
|||||||
rules:
|
rules:
|
||||||
- if: target in [esp32s3, esp32c5]
|
- if: target in [esp32s3, esp32c5]
|
||||||
|
|
||||||
|
espressif/esp_lcd_touch_st7123: ^1.0.0
|
||||||
|
espressif/iot_usbh_rndis:
|
||||||
|
version: ^0.3.1
|
||||||
|
rules:
|
||||||
|
- if: target in [esp32s3, esp32p4]
|
||||||
|
|
||||||
## Required IDF version
|
## Required IDF version
|
||||||
idf:
|
idf:
|
||||||
version: '>=5.4.0'
|
version: '>=5.5.2'
|
||||||
espressif/esp_lcd_touch_st7123: ^1.0.0
|
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ extern "C" void app_main(void)
|
|||||||
GetMooncake().installApp(std::make_unique<AppAiAgent>());
|
GetMooncake().installApp(std::make_unique<AppAiAgent>());
|
||||||
GetMooncake().installApp(std::make_unique<AppAvatar>());
|
GetMooncake().installApp(std::make_unique<AppAvatar>());
|
||||||
GetMooncake().installApp(std::make_unique<AppEspnowControl>());
|
GetMooncake().installApp(std::make_unique<AppEspnowControl>());
|
||||||
|
GetMooncake().installApp(std::make_unique<AppAppCenter>());
|
||||||
|
GetMooncake().installApp(std::make_unique<AppEzdata>());
|
||||||
|
GetMooncake().installApp(std::make_unique<AppDance>());
|
||||||
GetMooncake().installApp(std::make_unique<AppSetup>());
|
GetMooncake().installApp(std::make_unique<AppSetup>());
|
||||||
|
|
||||||
// Main loop
|
// Main loop
|
||||||
|
|||||||
@@ -0,0 +1,247 @@
|
|||||||
|
diff --git a/main/application.cc b/main/application.cc
|
||||||
|
index d69d43d..3b6f07e 100644
|
||||||
|
--- a/main/application.cc
|
||||||
|
+++ b/main/application.cc
|
||||||
|
@@ -610,33 +610,36 @@ void Application::InitializeProtocol() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::ShowActivationCode(const std::string& code, const std::string& message) {
|
||||||
|
- struct digit_sound {
|
||||||
|
- char digit;
|
||||||
|
- const std::string_view& sound;
|
||||||
|
- };
|
||||||
|
- static const std::array<digit_sound, 10> digit_sounds{{
|
||||||
|
- digit_sound{'0', Lang::Sounds::OGG_0},
|
||||||
|
- digit_sound{'1', Lang::Sounds::OGG_1},
|
||||||
|
- digit_sound{'2', Lang::Sounds::OGG_2},
|
||||||
|
- digit_sound{'3', Lang::Sounds::OGG_3},
|
||||||
|
- digit_sound{'4', Lang::Sounds::OGG_4},
|
||||||
|
- digit_sound{'5', Lang::Sounds::OGG_5},
|
||||||
|
- digit_sound{'6', Lang::Sounds::OGG_6},
|
||||||
|
- digit_sound{'7', Lang::Sounds::OGG_7},
|
||||||
|
- digit_sound{'8', Lang::Sounds::OGG_8},
|
||||||
|
- digit_sound{'9', Lang::Sounds::OGG_9}
|
||||||
|
- }};
|
||||||
|
-
|
||||||
|
- // This sentence uses 9KB of SRAM, so we need to wait for it to finish
|
||||||
|
- Alert(Lang::Strings::ACTIVATION, message.c_str(), "link", Lang::Sounds::OGG_ACTIVATION);
|
||||||
|
-
|
||||||
|
- for (const auto& digit : code) {
|
||||||
|
- auto it = std::find_if(digit_sounds.begin(), digit_sounds.end(),
|
||||||
|
- [digit](const digit_sound& ds) { return ds.digit == digit; });
|
||||||
|
- if (it != digit_sounds.end()) {
|
||||||
|
- audio_service_.PlaySound(it->sound);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+ // struct digit_sound {
|
||||||
|
+ // char digit;
|
||||||
|
+ // const std::string_view& sound;
|
||||||
|
+ // };
|
||||||
|
+ // static const std::array<digit_sound, 10> digit_sounds{{
|
||||||
|
+ // digit_sound{'0', Lang::Sounds::OGG_0},
|
||||||
|
+ // digit_sound{'1', Lang::Sounds::OGG_1},
|
||||||
|
+ // digit_sound{'2', Lang::Sounds::OGG_2},
|
||||||
|
+ // digit_sound{'3', Lang::Sounds::OGG_3},
|
||||||
|
+ // digit_sound{'4', Lang::Sounds::OGG_4},
|
||||||
|
+ // digit_sound{'5', Lang::Sounds::OGG_5},
|
||||||
|
+ // digit_sound{'6', Lang::Sounds::OGG_6},
|
||||||
|
+ // digit_sound{'7', Lang::Sounds::OGG_7},
|
||||||
|
+ // digit_sound{'8', Lang::Sounds::OGG_8},
|
||||||
|
+ // digit_sound{'9', Lang::Sounds::OGG_9}
|
||||||
|
+ // }};
|
||||||
|
+
|
||||||
|
+ // // This sentence uses 9KB of SRAM, so we need to wait for it to finish
|
||||||
|
+ // Alert(Lang::Strings::ACTIVATION, message.c_str(), "link", Lang::Sounds::OGG_ACTIVATION);
|
||||||
|
+
|
||||||
|
+ // for (const auto& digit : code) {
|
||||||
|
+ // auto it = std::find_if(digit_sounds.begin(), digit_sounds.end(),
|
||||||
|
+ // [digit](const digit_sound& ds) { return ds.digit == digit; });
|
||||||
|
+ // if (it != digit_sounds.end()) {
|
||||||
|
+ // audio_service_.PlaySound(it->sound);
|
||||||
|
+ // }
|
||||||
|
+ // }
|
||||||
|
+
|
||||||
|
+ auto display = Board::GetInstance().GetDisplay();
|
||||||
|
+ display->SetChatMessage("system", "Please bind and set up in the mobile app.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::Alert(const char* status, const char* message, const char* emotion, const std::string_view& sound) {
|
||||||
|
diff --git a/main/assets.cc b/main/assets.cc
|
||||||
|
index ad61944..6b84daf 100644
|
||||||
|
--- a/main/assets.cc
|
||||||
|
+++ b/main/assets.cc
|
||||||
|
@@ -3,8 +3,8 @@
|
||||||
|
#include "display.h"
|
||||||
|
#include "application.h"
|
||||||
|
#include "lvgl_theme.h"
|
||||||
|
-#include "emote_display.h"
|
||||||
|
-#include "expression_emote.h"
|
||||||
|
+// #include "emote_display.h"
|
||||||
|
+// #include "expression_emote.h"
|
||||||
|
#if HAVE_LVGL
|
||||||
|
#include "display/lcd_display.h"
|
||||||
|
#include <spi_flash_mmap.h>
|
||||||
|
@@ -356,72 +356,72 @@ bool Assets::LvglStrategy::Apply(Assets* assets) {
|
||||||
|
}
|
||||||
|
#endif // HAVE_LVGL
|
||||||
|
|
||||||
|
-bool Assets::EmoteStrategy::InitializePartition(Assets* assets) {
|
||||||
|
- assets->partition_valid_ = false;
|
||||||
|
-
|
||||||
|
- if (!Assets::FindPartition(assets)) {
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- esp_err_t ret = ESP_ERR_INVALID_STATE;
|
||||||
|
- auto display = Board::GetInstance().GetDisplay();
|
||||||
|
- auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
- if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
- const emote_data_t data = {
|
||||||
|
- .type = EMOTE_SOURCE_PARTITION,
|
||||||
|
- .source = {
|
||||||
|
- .partition_label = PARTITION_LABEL,
|
||||||
|
- },
|
||||||
|
- .flags = {
|
||||||
|
- .mmap_enable = true, //must be true here!!!
|
||||||
|
- },
|
||||||
|
- };
|
||||||
|
- ret = emote_mount_assets(emote_display->GetEmoteHandle(), &data);
|
||||||
|
- } else {
|
||||||
|
- ESP_LOGE(TAG, "Emote display is not initialized");
|
||||||
|
- }
|
||||||
|
- assets->partition_valid_ = ((ret == ESP_OK) ? true : false);
|
||||||
|
- return assets->partition_valid_;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void Assets::EmoteStrategy::UnApplyPartition(Assets* assets) {
|
||||||
|
- auto display = Board::GetInstance().GetDisplay();
|
||||||
|
- auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
- if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
- emote_unmount_assets(emote_display->GetEmoteHandle());
|
||||||
|
- }
|
||||||
|
- (void)assets; // Unused parameter
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-bool Assets::EmoteStrategy::GetAssetData(Assets* assets, const std::string& name, void*& ptr, size_t& size) {
|
||||||
|
- auto display = Board::GetInstance().GetDisplay();
|
||||||
|
- auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
- if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
- const uint8_t* data = nullptr;
|
||||||
|
- size_t data_size = 0;
|
||||||
|
- if (ESP_OK == emote_get_asset_data_by_name(emote_display->GetEmoteHandle(), name.c_str(), &data, &data_size)) {
|
||||||
|
- ptr = const_cast<void*>(static_cast<const void*>(data));
|
||||||
|
- size = data_size;
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
- ESP_LOGE(TAG, "Failed to get asset data by name: %s", name.c_str());
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- (void)assets; // Unused parameter
|
||||||
|
- return false;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-bool Assets::EmoteStrategy::Apply(Assets* assets) {
|
||||||
|
- Assets::LoadSrmodelsFromIndex(assets);
|
||||||
|
-
|
||||||
|
- auto display = Board::GetInstance().GetDisplay();
|
||||||
|
- auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
-
|
||||||
|
- if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
- emote_load_assets(emote_display->GetEmoteHandle());
|
||||||
|
- }
|
||||||
|
- return true;
|
||||||
|
-}
|
||||||
|
+// bool Assets::EmoteStrategy::InitializePartition(Assets* assets) {
|
||||||
|
+// assets->partition_valid_ = false;
|
||||||
|
+
|
||||||
|
+// if (!Assets::FindPartition(assets)) {
|
||||||
|
+// return false;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// esp_err_t ret = ESP_ERR_INVALID_STATE;
|
||||||
|
+// auto display = Board::GetInstance().GetDisplay();
|
||||||
|
+// auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
+// if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
+// const emote_data_t data = {
|
||||||
|
+// .type = EMOTE_SOURCE_PARTITION,
|
||||||
|
+// .source = {
|
||||||
|
+// .partition_label = PARTITION_LABEL,
|
||||||
|
+// },
|
||||||
|
+// .flags = {
|
||||||
|
+// .mmap_enable = true, //must be true here!!!
|
||||||
|
+// },
|
||||||
|
+// };
|
||||||
|
+// ret = emote_mount_assets(emote_display->GetEmoteHandle(), &data);
|
||||||
|
+// } else {
|
||||||
|
+// ESP_LOGE(TAG, "Emote display is not initialized");
|
||||||
|
+// }
|
||||||
|
+// assets->partition_valid_ = ((ret == ESP_OK) ? true : false);
|
||||||
|
+// return assets->partition_valid_;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// void Assets::EmoteStrategy::UnApplyPartition(Assets* assets) {
|
||||||
|
+// auto display = Board::GetInstance().GetDisplay();
|
||||||
|
+// auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
+// if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
+// emote_unmount_assets(emote_display->GetEmoteHandle());
|
||||||
|
+// }
|
||||||
|
+// (void)assets; // Unused parameter
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// bool Assets::EmoteStrategy::GetAssetData(Assets* assets, const std::string& name, void*& ptr, size_t& size) {
|
||||||
|
+// auto display = Board::GetInstance().GetDisplay();
|
||||||
|
+// auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
+// if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
+// const uint8_t* data = nullptr;
|
||||||
|
+// size_t data_size = 0;
|
||||||
|
+// if (ESP_OK == emote_get_asset_data_by_name(emote_display->GetEmoteHandle(), name.c_str(), &data, &data_size)) {
|
||||||
|
+// ptr = const_cast<void*>(static_cast<const void*>(data));
|
||||||
|
+// size = data_size;
|
||||||
|
+// return true;
|
||||||
|
+// }
|
||||||
|
+// ESP_LOGE(TAG, "Failed to get asset data by name: %s", name.c_str());
|
||||||
|
+// return false;
|
||||||
|
+// }
|
||||||
|
+// (void)assets; // Unused parameter
|
||||||
|
+// return false;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// bool Assets::EmoteStrategy::Apply(Assets* assets) {
|
||||||
|
+// Assets::LoadSrmodelsFromIndex(assets);
|
||||||
|
+
|
||||||
|
+// auto display = Board::GetInstance().GetDisplay();
|
||||||
|
+// auto* emote_display = dynamic_cast<emote::EmoteDisplay*>(display);
|
||||||
|
+
|
||||||
|
+// if (emote_display && emote_display->GetEmoteHandle() != nullptr) {
|
||||||
|
+// emote_load_assets(emote_display->GetEmoteHandle());
|
||||||
|
+// }
|
||||||
|
+// return true;
|
||||||
|
+// }
|
||||||
|
|
||||||
|
bool Assets::Download(std::string url, std::function<void(int progress, size_t speed)> progress_callback) {
|
||||||
|
ESP_LOGI(TAG, "Downloading new version of assets from %s", url.c_str());
|
||||||
|
diff --git a/main/assets.h b/main/assets.h
|
||||||
|
index 3692e0c..7bfbc5c 100644
|
||||||
|
--- a/main/assets.h
|
||||||
|
+++ b/main/assets.h
|
||||||
|
@@ -68,13 +68,13 @@ private:
|
||||||
|
bool checksum_valid_ = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
- class EmoteStrategy : public AssetStrategy {
|
||||||
|
- public:
|
||||||
|
- bool Apply(Assets* assets) override;
|
||||||
|
- bool InitializePartition(Assets* assets) override;
|
||||||
|
- void UnApplyPartition(Assets* assets) override;
|
||||||
|
- bool GetAssetData(Assets* assets, const std::string& name, void*& ptr, size_t& size) override;
|
||||||
|
- };
|
||||||
|
+ // class EmoteStrategy : public AssetStrategy {
|
||||||
|
+ // public:
|
||||||
|
+ // bool Apply(Assets* assets) override;
|
||||||
|
+ // bool InitializePartition(Assets* assets) override;
|
||||||
|
+ // void UnApplyPartition(Assets* assets) override;
|
||||||
|
+ // bool GetAssetData(Assets* assets, const std::string& name, void*& ptr, size_t& size) override;
|
||||||
|
+ // };
|
||||||
|
|
||||||
|
// Strategy instance
|
||||||
|
std::unique_ptr<AssetStrategy> strategy_;
|
||||||
+5
-9
@@ -2,22 +2,23 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/Forairaaaaa/mooncake.git",
|
"url": "https://github.com/Forairaaaaa/mooncake.git",
|
||||||
"path": "components/mooncake",
|
"path": "components/mooncake",
|
||||||
"branch": "main"
|
"branch": "v2.3.3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://github.com/Forairaaaaa/mooncake_log.git",
|
"url": "https://github.com/Forairaaaaa/mooncake_log.git",
|
||||||
"path": "components/mooncake_log",
|
"path": "components/mooncake_log",
|
||||||
"branch": "main"
|
"branch": "v1.5.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://github.com/Forairaaaaa/smooth_ui_toolkit.git",
|
"url": "https://github.com/Forairaaaaa/smooth_ui_toolkit.git",
|
||||||
"path": "components/smooth_ui_toolkit",
|
"path": "components/smooth_ui_toolkit",
|
||||||
"branch": "main"
|
"branch": "v2.12.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://github.com/78/xiaozhi-esp32.git",
|
"url": "https://github.com/78/xiaozhi-esp32.git",
|
||||||
"path": "xiaozhi-esp32",
|
"path": "xiaozhi-esp32",
|
||||||
"branch": "v2.1.0"
|
"branch": "v2.2.4",
|
||||||
|
"patch": "patches/xiaozhi-esp32.patch"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://github.com/bblanchon/ArduinoJson.git",
|
"url": "https://github.com/bblanchon/ArduinoJson.git",
|
||||||
@@ -28,10 +29,5 @@
|
|||||||
"url": "https://github.com/espressif/esp-now.git",
|
"url": "https://github.com/espressif/esp-now.git",
|
||||||
"path": "components/esp-now",
|
"path": "components/esp-now",
|
||||||
"branch": "c33383de97f3ed2fc52117f5ef04f71990432e5d"
|
"branch": "c33383de97f3ed2fc52117f5ef04f71990432e5d"
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/espressif/esp-sr",
|
|
||||||
"path": "components/espressif__esp-sr",
|
|
||||||
"branch": "8adb700e780cbd6c7743717c35ebfcf08f943526"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||||
# Espressif IoT Development Framework (ESP-IDF) 5.5.1 Project Minimal Configuration
|
# Espressif IoT Development Framework (ESP-IDF) 5.5.4 Project Minimal Configuration
|
||||||
#
|
#
|
||||||
CONFIG_IDF_TARGET="esp32s3"
|
CONFIG_IDF_TARGET="esp32s3"
|
||||||
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
|
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
|
||||||
@@ -17,9 +17,9 @@ CONFIG_COMPILER_CXX_RTTI=y
|
|||||||
CONFIG_BT_ENABLED=y
|
CONFIG_BT_ENABLED=y
|
||||||
CONFIG_BT_NIMBLE_ENABLED=y
|
CONFIG_BT_NIMBLE_ENABLED=y
|
||||||
CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL=y
|
CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL=y
|
||||||
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=512
|
|
||||||
CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y
|
|
||||||
CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=n
|
CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=n
|
||||||
|
CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y
|
||||||
|
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=512
|
||||||
CONFIG_UART_ISR_IN_IRAM=y
|
CONFIG_UART_ISR_IN_IRAM=y
|
||||||
CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048
|
CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048
|
||||||
CONFIG_HTTPD_MAX_URI_LEN=2048
|
CONFIG_HTTPD_MAX_URI_LEN=2048
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user