Merge remote-tracking branch 'mntm/dev' into js-app-internal

This commit is contained in:
Willy-JL
2024-11-05 07:33:00 +00:00
26 changed files with 186 additions and 79 deletions
+14 -2
View File
@@ -128,11 +128,22 @@ jobs:
dfu_size_new=$(du --apparent-size -B 1 artifacts/flipper-z-${TARGET}-full-*.dfu | cut -f1)
dfu_size_dev=$(du --apparent-size -B 1 dev.dfu | cut -f1)
dfu_size_diff=$((dfu_size_new - dfu_size_dev))
DFU_SIZE=$(echo ${dfu_size_new}B | sed -r 's/^([0-9]+)([0-9]{2})([0-9])B/\1.\2K/')
DFU_DIFF=$(echo ${dfu_size_diff}B | sed -r 's/^(-?[0-9]+)([0-9]{2})([0-9])B/\1.\2K/' | sed -r 's/^([^-])/+\1/')
DFU_SIZE=$(echo $dfu_size_new | numfmt --to=iec --format=%.2f)
DFU_DIFF=$(echo $dfu_size_diff | numfmt --to=iec --format=%.2f | sed -r 's/^([^-])/+\1/')
echo "DFU_SIZE=$DFU_SIZE" >> $GITHUB_ENV
echo "DFU_DIFF=$DFU_DIFF" >> $GITHUB_ENV
tar xzf build/core2_firmware.tgz
radio_addr=$(jq -r '.copro.radio.files[0].address' core2_firmware/Manifest.json)
flash_base=0x8000000
min_gap=$((2 * 4 * 1024))
flash_free_total=$((radio_addr - flash_base - dfu_size_new))
flash_free_usable=$((flash_free_total - min_gap))
FLASH_FREE=$(echo $flash_free_total | numfmt --to=iec --format=%.2f)
FLASH_USABLE=$(echo $flash_free_usable | numfmt --to=iec --format=%.2f)
echo "FLASH_FREE=$FLASH_FREE" >> $GITHUB_ENV
echo "FLASH_USABLE=$FLASH_USABLE" >> $GITHUB_ENV
- name: "Upload artifacts to update server"
env:
INDEXER_URL: ${{ secrets.INDEXER_URL }}
@@ -170,6 +181,7 @@ jobs:
- [☁️ Flipper Lab/App](https://lab.flipper.net/?url=${{secrets.INDEXER_URL}}/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz&channel=mntm-${{steps.names.outputs.branch_name}}&version=${{steps.names.outputs.commit_sha}})
- [📦 qFlipper Package](${{secrets.INDEXER_URL}}/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz)
- DFU Size: `${{ env.DFU_SIZE }}` (`${{ env.DFU_DIFF }}` from dev)
- Free Flash: `${{ env.FLASH_FREE }}` (`${{ env.FLASH_USABLE }}` usable)
edit-mode: replace
- name: Send devbuild webhook
+5 -3
View File
@@ -133,9 +133,6 @@
- UL: W5500 Ethernet: Various fixes and improvements (by @xMasterX)
- OFW: SPI Mem Manager: Fixed UI rendering bug related to line breaks (by @portasynthinca3)
- OFW: USB/BT Remote: Mouse clicker option to click as fast as possible (by @sumukhj1219)
- CLI:
- Print plugin name on load fail (by @Willy-JL)
- Move more commands as plugins on SD, refactor plugin wrapper (#276 by @Willy-JL)
- NFC:
- NDEF Parser:
- Mifare Classic support (#265 by @luu176), protocol-agnostic rewrite and more improvements (#265 by @Willy-JL)
@@ -166,6 +163,10 @@
- OFW: Add TCL 75S451 to TV universal remote (by @christhetech131)
- OFW: Universal remote additions (by @jaylikesbunda)
- OFW: Heavily Expand Universal Remotes (by @jaylikesbunda)
- CLI:
- Print plugin name on load fail (by @Willy-JL)
- Move more commands as plugins on SD, refactor plugin wrapper (#276 by @Willy-JL)
- FBT: Optimize icons blob, scrub unused icons (#291 by @Willy-JL)
- OFW: BadKB: Improve ChromeOS and GNOME demo scripts (by @kowalski7cc)
- OFW: GUI: Change dialog_ex text ownership model (by @skotopes)
- OFW: CCID: App changes and improvements (by @kidbomb)
@@ -194,6 +195,7 @@
- Fix GPS "Latitute" typo, switch to "Lat" and "Lon" in .sub files (#246 by @m7i-org)
- UL: Fix zero issues in Princeton (by @xMasterX)
- UL: Code cleanup and fix for rare dupicated "Data" field cases (by @xMasterX)
- UL: Fix Nice One key display (by @xMasterX)
- Power: Suppress Shutdown on Idle While Charging / Plugged In (#244 by @luu176)
- Storage:
- Fallback SD format prompt when storage settings is unavailable (by @Willy-JL)
+1 -1
View File
@@ -13,7 +13,7 @@ App(
"!plugins",
"!nfc_cli.c",
],
fap_libs=["mbedtls"],
fap_libs=["assets", "mbedtls"],
fap_icon="icon.png",
fap_category="NFC",
)
@@ -12,4 +12,5 @@ App(
stack_size=1 * 1024,
order=1000,
fap_category="assets",
fap_libs=["assets"],
)
@@ -12,4 +12,5 @@ App(
stack_size=1 * 1024,
order=40,
fap_category="assets",
fap_libs=["assets"],
)
@@ -8,4 +8,5 @@ App(
stack_size=2 * 1024,
order=30,
fap_category="assets",
fap_libs=["assets"],
)
@@ -5,6 +5,7 @@ App(
# cdefines=["JS_RUNNER_FAP"],
fap_icon="icon.png",
fap_category="assets",
fap_libs=["assets"],
entry_point="js_app",
stack_size=2 * 1024,
resources="examples",
@@ -35,6 +36,7 @@ App(
"modules/js_flipper.c",
"modules/js_tests.c",
],
fap_libs=["assets"],
)
App(
@@ -26,7 +26,7 @@ export declare function getBatteryCharge(): number;
* @warning Do **NOT** use this to check the presence or absence of features. If
* you do, I'm gonna be sad :( Instead, refer to `checkSdkFeatures` and
* other similar mechanisms.
* @note Momentum firmware reports `"momentum"`.
* @note Momentum firmware reports `"momentum"`. / Official firmware reports `"flipperdevices"`.
* @version Added in JS SDK 0.1
*/
export declare const firmwareVendor: string;
+24 -2
View File
@@ -14,9 +14,26 @@ icons_path = (
if assetsenv["IS_BASE_FIRMWARE"]
else assetsenv["ASSETS_WORK_DIR"]
)
icons = assetsenv.CompileIcons(icons_path, assetsenv["ASSETS_SRC_DIR"].Dir("icons"))
icons = assetsenv.CompileIcons(
icons_path,
assetsenv["ASSETS_SRC_DIR"].Dir("icons"),
fw_bundle=True,
)
assetsenv.Alias("icons", icons)
# Extra icons lib so apps don't override asset packs to use fw icons not exposed to api
# Not used anywhere in code, apps still reference assets_icons.h, but if one of the
# icons they need is not exposed in api, they can link with fap_libs=["assets"] which
# will use this lib purely for linking as a drop-in for missing symbols.
# Should mean that apps made for OFW with fap_libs=["assets"], when compiled with
# this FBT, will still use asset packs at runtime and only link non-exposed icons.
if assetsenv["IS_BASE_FIRMWARE"]:
dropin_icons = assetsenv.CompileIcons(
assetsenv["ASSETS_WORK_DIR"],
assetsenv["ASSETS_SRC_DIR"].Dir("icons"),
icon_bundle_name="_assets_icons_dropin",
)
# Protobuf .proto -> .c + .h
proto_src = assetsenv.Glob("protobuf/*.proto", source=True)
@@ -59,9 +76,14 @@ assetsenv.Alias("proto_ver", proto_ver)
assets_parts = (icons, proto, dolphin_blocking, dolphin_internal, proto_ver)
env.Replace(FW_ASSETS_HEADERS=assets_parts)
assetslib = assetsenv.Library("${FW_LIB_NAME}", assets_parts)
assetslib = assetsenv.Library("fw${FW_LIB_NAME}", assets_parts)
assetsenv.Install("${LIB_DIST_DIR}", assetslib)
if assetsenv["IS_BASE_FIRMWARE"]:
dropin_parts = (dropin_icons, proto, dolphin_blocking, dolphin_internal, proto_ver)
dropin_assetslib = assetsenv.Library("${FW_LIB_NAME}", dropin_parts)
assetsenv.Install("${LIB_DIST_DIR}", dropin_assetslib)
# Resources for SD card
if assetsenv["IS_BASE_FIRMWARE"]:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 B

+1 -1
View File
@@ -869,7 +869,7 @@ void subghz_protocol_decoder_nice_flor_s_get_string(void* context, FuriString* o
furi_string_cat_printf(
output,
"%s %dbit\r\n"
"Key:0x%013llX%llX\r\n"
"Key:%013llX%llX\r\n"
"Sn:%05lX\r\n"
"Cnt:%04lX Btn:%02X\r\n",
NICE_ONE_NAME,
+57 -35
View File
@@ -11,11 +11,20 @@ ICONS_SUPPORTED_FORMATS = ["png"]
ICONS_TEMPLATE_H_HEADER = """#pragma once
#include <furi.h>
#include <stddef.h>
#include <gui/icon.h>
"""
ICONS_TEMPLATE_H_ICON_NAME = "extern const Icon {name};\n"
ICONS_TEMPLATE_H_ICON_PATHS = """
typedef struct {
const Icon* icon;
const char* path;
} IconPath;
extern const IconPath ICON_PATHS[];
extern const size_t ICON_PATHS_COUNT;
"""
ICONS_TEMPLATE_C_HEADER = """#include "{assets_filename}.h"
@@ -25,6 +34,15 @@ ICONS_TEMPLATE_C_HEADER = """#include "{assets_filename}.h"
ICONS_TEMPLATE_C_FRAME = "const uint8_t {name}[] = {data};\n"
ICONS_TEMPLATE_C_DATA = "const uint8_t* const {name}[] = {data};\n"
ICONS_TEMPLATE_C_ICONS = "const Icon {name} = {{.width={width},.height={height},.frame_count={frame_count},.frame_rate={frame_rate},.frames=_{name}}};\n"
ICONS_TEMPLATE_C_ICON_PATH = ' {{&{name}, "{path}"}},\n'
ICONS_TEMPLATE_C_ICON_PATHS = """
const IconPath ICON_PATHS[] = {{
#ifndef FURI_RAM_EXEC
{icon_paths}
#endif
}};
const size_t ICON_PATHS_COUNT = COUNT_OF(ICON_PATHS);
"""
MAX_IMAGE_WIDTH = 2**16 - 1
MAX_IMAGE_HEIGHT = 2**16 - 1
@@ -45,6 +63,22 @@ class Main(App):
required=False,
default="assets_icons",
)
self.parser_icons.add_argument(
"--fw-bundle",
dest="fw_bundle",
help="Bundle all icons and path info, only for use in firmware blob",
default=0,
type=int,
required=False,
)
self.parser_icons.add_argument(
"--add-include",
dest="add_include",
help="Add assets_icons.h include drop-in for apps",
default=0,
type=int,
required=False,
)
self.parser_icons.set_defaults(func=self.icons)
@@ -138,7 +172,6 @@ class Main(App):
)
icons = []
paths = []
is_main_assets = self.args.filename == "assets_icons"
symbols = pathlib.Path(__file__).parent.parent
if "UFBT_HOME" in os.environ:
symbols /= "sdk_headers/f7_sdk"
@@ -154,7 +187,8 @@ class Main(App):
if "frame_rate" in filenames:
self.logger.debug("Folder contains animation")
icon_name = "A_" + os.path.split(dirpath)[1].replace("-", "_")
if not is_main_assets and api_has_icon(icon_name):
icon_in_api = api_has_icon(icon_name)
if not self.args.fw_bundle and icon_in_api:
self.logger.info(
f"{self.args.filename}: ignoring duplicate icon {icon_name}"
)
@@ -193,8 +227,9 @@ class Main(App):
)
icons_c.write("\n")
icons.append((icon_name, width, height, frame_rate, frame_count))
p = dirpath.removeprefix(self.args.input_directory)[1:]
paths.append((icon_name, p.replace("\\", "/")))
if self.args.fw_bundle and icon_in_api:
path = dirpath.removeprefix(self.args.input_directory)[1:]
paths.append((icon_name, path.replace("\\", "/")))
else:
# process icons
for filename in filenames:
@@ -204,7 +239,8 @@ class Main(App):
icon_name = "I_" + "_".join(filename.split(".")[:-1]).replace(
"-", "_"
)
if not is_main_assets and api_has_icon(icon_name):
icon_in_api = api_has_icon(icon_name)
if not self.args.fw_bundle and icon_in_api:
self.logger.info(
f"{self.args.filename}: ignoring duplicate icon {icon_name}"
)
@@ -222,8 +258,11 @@ class Main(App):
)
icons_c.write("\n")
icons.append((icon_name, width, height, 0, 1))
p = fullfilename.removeprefix(self.args.input_directory)[1:]
paths.append((icon_name, p.replace("\\", "/").rsplit(".", 1)[0]))
if self.args.fw_bundle and icon_in_api:
path = fullfilename.removeprefix(self.args.input_directory)[1:]
paths.append(
(icon_name, path.replace("\\", "/").rsplit(".", 1)[0])
)
# Create array of images:
self.logger.debug("Finalizing source file")
for name, width, height, frame_rate, frame_count in icons:
@@ -236,21 +275,14 @@ class Main(App):
frame_count=frame_count,
)
)
if is_main_assets:
icons_c.write(
"""
const IconPath ICON_PATHS[] = {
#ifndef FURI_RAM_EXEC
"""
)
for name, path in paths:
icons_c.write(f' {{&{name}, "{path}"}},\n')
icons_c.write(
"""#endif
};
const size_t ICON_PATHS_COUNT = COUNT_OF(ICON_PATHS);
"""
if not self.args.fw_bundle:
icons_c.write("\n")
else:
icon_paths = "\n".join(
ICONS_TEMPLATE_C_ICON_PATH.format(name=name, path=path)
for name, path in paths
)
icons_c.write(ICONS_TEMPLATE_C_ICON_PATHS.format(icon_paths=icon_paths))
icons_c.close()
# Create Public Header
@@ -263,19 +295,9 @@ const size_t ICON_PATHS_COUNT = COUNT_OF(ICON_PATHS);
icons_h.write(ICONS_TEMPLATE_H_HEADER)
for name, width, height, frame_rate, frame_count in icons:
icons_h.write(ICONS_TEMPLATE_H_ICON_NAME.format(name=name))
if is_main_assets:
icons_h.write(
"""
typedef struct {
const Icon* icon;
const char* path;
} IconPath;
extern const IconPath ICON_PATHS[];
extern const size_t ICON_PATHS_COUNT;
"""
)
else:
if self.args.fw_bundle:
icons_h.write(ICONS_TEMPLATE_H_ICON_PATHS)
if self.args.add_include:
icons_h.write("#include <assets_icons.h>\n")
icons_h.close()
self.logger.debug("Done")
+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/env python3
import pathlib
root = pathlib.Path(__file__).parent / ".."
icons = root / "assets/icons"
def count_icon_usages(name: str):
count = 0
name = name.encode()
# EXTREMELY wasteful, but who cares
for dir in ("applications", "furi", "lib", "targets"):
for filetype in (".c", ".cpp", ".h", ".fam"):
for file in (root / dir).glob(f"**/*{filetype}"):
try:
if name in file.read_bytes():
count += 1
except Exception:
print(f"Failed to read {file}")
return count
if __name__ == "__main__":
counts = {}
for category in icons.iterdir():
if not category.is_dir():
continue
for icon in category.iterdir():
if icon.is_dir() and (icon / "frame_rate").is_file():
name = "A_" + icon.name.replace("-", "_")
elif icon.is_file() and icon.suffix == ".png":
name = "I_" + "_".join(icon.name.split(".")[:-1]).replace("-", "_")
else:
continue
counts[name[2:]] = count_icon_usages(name)
for name, count in sorted(counts.items(), key=lambda x: x[1], reverse=True):
print(f"{name} used {count} times")
+15 -1
View File
@@ -181,7 +181,15 @@ def _proto_ver_generator(target, source, env):
file.write("\n".join(version_file_data))
def CompileIcons(env, target_dir, source_dir, *, icon_bundle_name="assets_icons"):
def CompileIcons(
env,
target_dir,
source_dir,
*,
icon_bundle_name="assets_icons",
fw_bundle=False,
add_include=False,
):
try:
os.mkdir(str(source_dir))
except FileExistsError:
@@ -191,6 +199,8 @@ def CompileIcons(env, target_dir, source_dir, *, icon_bundle_name="assets_icons"
None,
ICON_SRC_DIR=source_dir,
ICON_FILE_NAME=icon_bundle_name,
ICON_FW_BUNDLE=int(fw_bundle),
ICON_ADD_INCLUDE=int(add_include),
)
@@ -223,6 +233,10 @@ def generate(env):
"${TARGET.dir}",
"--filename",
"${ICON_FILE_NAME}",
"--fw-bundle",
"${ICON_FW_BUNDLE}",
"--add-include",
"${ICON_ADD_INCLUDE}",
],
],
"${ICONSCOMSTR}",
+1
View File
@@ -90,6 +90,7 @@ class AppBuilder:
self.app_work_dir,
self.app._appdir.Dir(self.app.fap_icon_assets),
icon_bundle_name=f"{self.app.fap_icon_assets_symbol or self.app.appid }_icons",
add_include=True,
)
self.app_env.Alias("_fap_icons", fap_icons)
self.fw_env.Append(_APP_ICONS=[fap_icons])
+22 -32
View File
@@ -3919,12 +3919,12 @@ Variable,+,I_CC_LefthandedMode_16x16,const Icon,
Variable,+,I_CC_Lock_16x16,const Icon,
Variable,+,I_CC_Momentum_16x16,const Icon,
Variable,+,I_CC_Settings_16x16,const Icon,
Variable,+,I_Certification1_103x56,const Icon,
Variable,+,I_Certification2_46x33,const Icon,
Variable,+,I_CertificationChina0_121x41,const Icon,
Variable,+,I_CertificationChina1_124x47,const Icon,
Variable,+,I_CertificationMexico_98x41,const Icon,
Variable,+,I_CertificationTaiwan_33x32,const Icon,
Variable,-,I_Certification1_103x56,const Icon,
Variable,-,I_Certification2_46x33,const Icon,
Variable,-,I_CertificationChina0_121x41,const Icon,
Variable,-,I_CertificationChina1_124x47,const Icon,
Variable,-,I_CertificationMexico_98x41,const Icon,
Variable,-,I_CertificationTaiwan_33x32,const Icon,
Variable,+,I_Charging_lightning_9x10,const Icon,
Variable,+,I_Charging_lightning_mask_9x10,const Icon,
Variable,+,I_Circles_47x47,const Icon,
@@ -3932,7 +3932,7 @@ Variable,+,I_Clock_18x18,const Icon,
Variable,+,I_Connect_me_62x31,const Icon,
Variable,+,I_Connected_62x31,const Icon,
Variable,+,I_Cos_9x7,const Icon,
Variable,+,I_DFU_128x50,const Icon,
Variable,-,I_DFU_128x50,const Icon,
Variable,+,I_DolphinDone_80x58,const Icon,
Variable,+,I_DolphinMafia_119x62,const Icon,
Variable,+,I_DolphinReadingSuccess_59x63,const Icon,
@@ -3941,7 +3941,7 @@ Variable,+,I_DolphinSuccess_91x55,const Icon,
Variable,+,I_DolphinWait_59x54,const Icon,
Variable,+,I_Drive_112x35,const Icon,
Variable,+,I_Dynamic_9x7,const Icon,
Variable,+,I_Erase_pin_128x64,const Icon,
Variable,-,I_Erase_pin_128x64,const Icon,
Variable,+,I_Error_18x18,const Icon,
Variable,+,I_Error_62x31,const Icon,
Variable,+,I_EviSmile1_18x21,const Icon,
@@ -3975,7 +3975,7 @@ Variable,+,I_Left_mouse_icon_9x9,const Icon,
Variable,+,I_LoadingHourglass_24x24,const Icon,
Variable,+,I_Lock_7x8,const Icon,
Variable,+,I_Lockscreen,const Icon,
Variable,+,I_MFKey_qr_25x25,const Icon,
Variable,-,I_MFKey_qr_25x25,const Icon,
Variable,+,I_MHz_25x11,const Icon,
Variable,+,I_Modern_reader_18x34,const Icon,
Variable,+,I_More_data_placeholder_5x7,const Icon,
@@ -3990,11 +3990,8 @@ Variable,+,I_Percent_10x14,const Icon,
Variable,+,I_Pin_arrow_up_7x9,const Icon,
Variable,+,I_Pin_attention_dpad_29x29,const Icon,
Variable,+,I_Pin_back_arrow_10x8,const Icon,
Variable,+,I_Pin_cell_13x13,const Icon,
Variable,+,I_Pin_pointer_5x3,const Icon,
Variable,+,I_Pin_star_7x7,const Icon,
Variable,+,I_Play_25x27,const Icon,
Variable,+,I_Play_hvr_25x27,const Icon,
Variable,+,I_Pressed_Button_13x13,const Icon,
Variable,+,I_Quest_7x8,const Icon,
Variable,+,I_RFIDDolphinReceive_97x61,const Icon,
@@ -4005,7 +4002,7 @@ Variable,+,I_Release_arrow_18x15,const Icon,
Variable,+,I_Right_mouse_icon_9x9,const Icon,
Variable,+,I_Rpc_active_7x8,const Icon,
Variable,+,I_SDQuestion_35x43,const Icon,
Variable,+,I_SDcardFail_11x8,const Icon,
Variable,-,I_SDcardFail_11x8,const Icon,
Variable,+,I_SDcardMounted_11x8,const Icon,
Variable,+,I_Sats_6x9,const Icon,
Variable,+,I_Scanning_123x52,const Icon,
@@ -4018,15 +4015,15 @@ Variable,+,I_Temperature_16x16,const Icon,
Variable,+,I_Unlock_7x8,const Icon,
Variable,+,I_Unplug_bg_bottom_128x10,const Icon,
Variable,+,I_Unplug_bg_top_128x14,const Icon,
Variable,+,I_Updating_32x40,const Icon,
Variable,+,I_Updating_Logo_62x15,const Icon,
Variable,-,I_Updating_32x40,const Icon,
Variable,-,I_Updating_Logo_62x15,const Icon,
Variable,+,I_UsbTree_48x22,const Icon,
Variable,+,I_Voldwn_6x6,const Icon,
Variable,+,I_Voltage_16x16,const Icon,
Variable,+,I_Volup_8x6,const Icon,
Variable,+,I_WarningDolphinFlip_45x42,const Icon,
Variable,+,I_WarningDolphin_45x42,const Icon,
Variable,+,I_Warning_30x23,const Icon,
Variable,-,I_Warning_30x23,const Icon,
Variable,+,I_Weather_7x8,const Icon,
Variable,+,I_arrow_nano_down,const Icon,
Variable,+,I_arrow_nano_up,const Icon,
@@ -4053,14 +4050,14 @@ Variable,+,I_dry_text_15x5,const Icon,
Variable,+,I_eject_19x20,const Icon,
Variable,+,I_eject_hover_19x20,const Icon,
Variable,+,I_eject_text_19x5,const Icon,
Variable,+,I_err_01,const Icon,
Variable,+,I_err_02,const Icon,
Variable,+,I_err_03,const Icon,
Variable,+,I_err_04,const Icon,
Variable,+,I_err_05,const Icon,
Variable,+,I_err_06,const Icon,
Variable,+,I_err_07,const Icon,
Variable,+,I_err_09,const Icon,
Variable,-,I_err_01,const Icon,
Variable,-,I_err_02,const Icon,
Variable,-,I_err_03,const Icon,
Variable,-,I_err_04,const Icon,
Variable,-,I_err_05,const Icon,
Variable,-,I_err_06,const Icon,
Variable,-,I_err_07,const Icon,
Variable,-,I_err_09,const Icon,
Variable,+,I_exit_19x20,const Icon,
Variable,+,I_exit_hover_19x20,const Icon,
Variable,+,I_exit_text_18x5,const Icon,
@@ -4077,13 +4074,6 @@ Variable,+,I_floppydisk_10px,const Icon,
Variable,+,I_green_19x20,const Icon,
Variable,+,I_green_hover_19x20,const Icon,
Variable,+,I_heat_30x51,const Icon,
Variable,+,I_hourglass0_24x24,const Icon,
Variable,+,I_hourglass1_24x24,const Icon,
Variable,+,I_hourglass2_24x24,const Icon,
Variable,+,I_hourglass3_24x24,const Icon,
Variable,+,I_hourglass4_24x24,const Icon,
Variable,+,I_hourglass5_24x24,const Icon,
Variable,+,I_hourglass6_24x24,const Icon,
Variable,+,I_iButtonDolphinVerySuccess_92x55,const Icon,
Variable,+,I_iButtonKey_49x44,const Icon,
Variable,+,I_ibutt_10px,const Icon,
@@ -4136,7 +4126,7 @@ Variable,+,I_power_text_24x5,const Icon,
Variable,+,I_prev_19x20,const Icon,
Variable,+,I_prev_hover_19x20,const Icon,
Variable,+,I_prev_text_19x5,const Icon,
Variable,+,I_qr_benchmark_25x25,const Icon,
Variable,-,I_qr_benchmark_25x25,const Icon,
Variable,+,I_red_19x20,const Icon,
Variable,+,I_red_hover_19x20,const Icon,
Variable,+,I_rotate_19x20,const Icon,
1 entry status name type params
3919 Variable + I_CC_Lock_16x16 const Icon
3920 Variable + I_CC_Momentum_16x16 const Icon
3921 Variable + I_CC_Settings_16x16 const Icon
3922 Variable + - I_Certification1_103x56 const Icon
3923 Variable + - I_Certification2_46x33 const Icon
3924 Variable + - I_CertificationChina0_121x41 const Icon
3925 Variable + - I_CertificationChina1_124x47 const Icon
3926 Variable + - I_CertificationMexico_98x41 const Icon
3927 Variable + - I_CertificationTaiwan_33x32 const Icon
3928 Variable + I_Charging_lightning_9x10 const Icon
3929 Variable + I_Charging_lightning_mask_9x10 const Icon
3930 Variable + I_Circles_47x47 const Icon
3932 Variable + I_Connect_me_62x31 const Icon
3933 Variable + I_Connected_62x31 const Icon
3934 Variable + I_Cos_9x7 const Icon
3935 Variable + - I_DFU_128x50 const Icon
3936 Variable + I_DolphinDone_80x58 const Icon
3937 Variable + I_DolphinMafia_119x62 const Icon
3938 Variable + I_DolphinReadingSuccess_59x63 const Icon
3941 Variable + I_DolphinWait_59x54 const Icon
3942 Variable + I_Drive_112x35 const Icon
3943 Variable + I_Dynamic_9x7 const Icon
3944 Variable + - I_Erase_pin_128x64 const Icon
3945 Variable + I_Error_18x18 const Icon
3946 Variable + I_Error_62x31 const Icon
3947 Variable + I_EviSmile1_18x21 const Icon
3975 Variable + I_LoadingHourglass_24x24 const Icon
3976 Variable + I_Lock_7x8 const Icon
3977 Variable + I_Lockscreen const Icon
3978 Variable + - I_MFKey_qr_25x25 const Icon
3979 Variable + I_MHz_25x11 const Icon
3980 Variable + I_Modern_reader_18x34 const Icon
3981 Variable + I_More_data_placeholder_5x7 const Icon
3990 Variable + I_Pin_arrow_up_7x9 const Icon
3991 Variable + I_Pin_attention_dpad_29x29 const Icon
3992 Variable + I_Pin_back_arrow_10x8 const Icon
Variable + I_Pin_cell_13x13 const Icon
3993 Variable + I_Pin_pointer_5x3 const Icon
3994 Variable + I_Pin_star_7x7 const Icon
Variable + I_Play_25x27 const Icon
Variable + I_Play_hvr_25x27 const Icon
3995 Variable + I_Pressed_Button_13x13 const Icon
3996 Variable + I_Quest_7x8 const Icon
3997 Variable + I_RFIDDolphinReceive_97x61 const Icon
4002 Variable + I_Right_mouse_icon_9x9 const Icon
4003 Variable + I_Rpc_active_7x8 const Icon
4004 Variable + I_SDQuestion_35x43 const Icon
4005 Variable + - I_SDcardFail_11x8 const Icon
4006 Variable + I_SDcardMounted_11x8 const Icon
4007 Variable + I_Sats_6x9 const Icon
4008 Variable + I_Scanning_123x52 const Icon
4015 Variable + I_Unlock_7x8 const Icon
4016 Variable + I_Unplug_bg_bottom_128x10 const Icon
4017 Variable + I_Unplug_bg_top_128x14 const Icon
4018 Variable + - I_Updating_32x40 const Icon
4019 Variable + - I_Updating_Logo_62x15 const Icon
4020 Variable + I_UsbTree_48x22 const Icon
4021 Variable + I_Voldwn_6x6 const Icon
4022 Variable + I_Voltage_16x16 const Icon
4023 Variable + I_Volup_8x6 const Icon
4024 Variable + I_WarningDolphinFlip_45x42 const Icon
4025 Variable + I_WarningDolphin_45x42 const Icon
4026 Variable + - I_Warning_30x23 const Icon
4027 Variable + I_Weather_7x8 const Icon
4028 Variable + I_arrow_nano_down const Icon
4029 Variable + I_arrow_nano_up const Icon
4050 Variable + I_eject_19x20 const Icon
4051 Variable + I_eject_hover_19x20 const Icon
4052 Variable + I_eject_text_19x5 const Icon
4053 Variable + - I_err_01 const Icon
4054 Variable + - I_err_02 const Icon
4055 Variable + - I_err_03 const Icon
4056 Variable + - I_err_04 const Icon
4057 Variable + - I_err_05 const Icon
4058 Variable + - I_err_06 const Icon
4059 Variable + - I_err_07 const Icon
4060 Variable + - I_err_09 const Icon
4061 Variable + I_exit_19x20 const Icon
4062 Variable + I_exit_hover_19x20 const Icon
4063 Variable + I_exit_text_18x5 const Icon
4074 Variable + I_green_19x20 const Icon
4075 Variable + I_green_hover_19x20 const Icon
4076 Variable + I_heat_30x51 const Icon
Variable + I_hourglass0_24x24 const Icon
Variable + I_hourglass1_24x24 const Icon
Variable + I_hourglass2_24x24 const Icon
Variable + I_hourglass3_24x24 const Icon
Variable + I_hourglass4_24x24 const Icon
Variable + I_hourglass5_24x24 const Icon
Variable + I_hourglass6_24x24 const Icon
4077 Variable + I_iButtonDolphinVerySuccess_92x55 const Icon
4078 Variable + I_iButtonKey_49x44 const Icon
4079 Variable + I_ibutt_10px const Icon
4126 Variable + I_prev_19x20 const Icon
4127 Variable + I_prev_hover_19x20 const Icon
4128 Variable + I_prev_text_19x5 const Icon
4129 Variable + - I_qr_benchmark_25x25 const Icon
4130 Variable + I_red_19x20 const Icon
4131 Variable + I_red_hover_19x20 const Icon
4132 Variable + I_rotate_19x20 const Icon
+1 -1
View File
@@ -35,7 +35,7 @@
"microtar",
"usb_stm32",
"infrared",
"assets",
"fwassets",
"one_wire",
"ibutton",
"music_worker",