From: xue <2144439972@qq.com> Date: Mon, 25 Aug 2025 12:03:24 +0000 (+0800) Subject: 增加正确的资源路径 X-Git-Tag: leiniao_debug_1.0.0_20250922_020716~156^2~1 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=b0b1b2da1f47557ed528d94519192d8435976c18;p=mirrors%2FFD230.git 增加正确的资源路径 --- diff --git a/code/sdk/files/leiniao/fs/user/music/test3.txt b/code/sdk/files/leiniao/fs/user/music/test3.txt new file mode 100644 index 000000000..e56d2dca9 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/music/test3.txt @@ -0,0 +1 @@ +this is test3 file \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/res/Battery_Black.bin b/code/sdk/files/leiniao/fs/user/res/Battery_Black.bin new file mode 100644 index 000000000..73eefe331 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/Battery_Black.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/Battery_White.bin b/code/sdk/files/leiniao/fs/user/res/Battery_White.bin new file mode 100644 index 000000000..3f1a32e88 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/Battery_White.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/DROPDOWN_NOSIGNAL.bin b/code/sdk/files/leiniao/fs/user/res/DROPDOWN_NOSIGNAL.bin new file mode 100644 index 000000000..6c2d33048 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/DROPDOWN_NOSIGNAL.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf b/code/sdk/files/leiniao/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf new file mode 100644 index 000000000..25069dad0 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/Icon.bin b/code/sdk/files/leiniao/fs/user/res/Icon.bin new file mode 100644 index 000000000..c79f063ed Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/Icon.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/1.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/1.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/10.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/10.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/11.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/11.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/12.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/12.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/13.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/13.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/14.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/14.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/15.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/15.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/16.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/16.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/17.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/17.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/18.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/18.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/19.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/19.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/2.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/2.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/20.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/20.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/21.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/21.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/22.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/22.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/23.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/23.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/24.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/24.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/25.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/25.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/26.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/26.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/27.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/27.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/28.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/28.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/29.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/29.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/3.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/3.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/30.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/30.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/4.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/4.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/5.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/5.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/6.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/6.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/7.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/7.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/8.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/8.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/9.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ReBoot/9.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/1.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/1.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/10.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/10.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/11.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/11.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/12.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/12.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/13.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/13.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/14.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/14.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/15.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/15.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/16.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/16.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/17.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/17.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/18.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/18.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/19.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/19.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/2.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/2.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/20.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/20.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/21.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/21.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/22.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/22.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/23.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/23.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/24.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/24.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/25.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/25.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/26.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/26.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/27.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/27.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/28.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/28.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/29.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/29.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/3.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/3.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/30.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/30.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/4.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/4.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/5.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/5.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/6.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/6.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/7.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/7.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/8.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/8.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/9.bin b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/RebootAndShutDown/ShutDown/9.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf new file mode 100644 index 000000000..ffa363f11 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Audiowide_Regular.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Audiowide_Regular.ttf new file mode 100644 index 000000000..348817d57 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Audiowide_Regular.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/DejaVuSans.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/DejaVuSans.ttf new file mode 100644 index 000000000..27cff476e Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/DejaVuSans.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Gilroy_Bold.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Gilroy_Bold.ttf new file mode 100644 index 000000000..2704cd67d Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Gilroy_Bold.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Handjet.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Handjet.ttf new file mode 100644 index 000000000..5a1489383 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Handjet.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf new file mode 100644 index 000000000..01e01c59a Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Orbit-Regular.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Orbit-Regular.ttf new file mode 100644 index 000000000..db9562d1c Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Orbit-Regular.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/Sheeping_Cats.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/Sheeping_Cats.ttf new file mode 100644 index 000000000..31705c9fe Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/Sheeping_Cats.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/font_library/hindi.ttf b/code/sdk/files/leiniao/fs/user/res/font_library/hindi.ttf new file mode 100644 index 000000000..14479c192 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/font_library/hindi.ttf differ diff --git a/code/sdk/files/leiniao/fs/user/res/hair_sad.bin b/code/sdk/files/leiniao/fs/user/res/hair_sad.bin new file mode 100644 index 000000000..fdc803ab0 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/hair_sad.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/listen.bin b/code/sdk/files/leiniao/fs/user/res/listen.bin new file mode 100644 index 000000000..bb7296bf9 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/listen.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/mic.bin b/code/sdk/files/leiniao/fs/user/res/mic.bin new file mode 100644 index 000000000..7af57cd89 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/mic.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/success.bin b/code/sdk/files/leiniao/fs/user/res/success.bin new file mode 100644 index 000000000..606a95cf2 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/success.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/successwhite.bin b/code/sdk/files/leiniao/fs/user/res/successwhite.bin new file mode 100644 index 000000000..427899e0f Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/successwhite.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/volumedown.bin b/code/sdk/files/leiniao/fs/user/res/volumedown.bin new file mode 100644 index 000000000..00d6554fc Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/volumedown.bin differ diff --git a/code/sdk/files/leiniao/fs/user/res/volumeup.bin b/code/sdk/files/leiniao/fs/user/res/volumeup.bin new file mode 100644 index 000000000..09346cc9c Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/res/volumeup.bin differ diff --git a/code/sdk/files/leiniao/fs/user/system/KUMI_LOGO.bin b/code/sdk/files/leiniao/fs/user/system/KUMI_LOGO.bin new file mode 100644 index 000000000..43fa9aee7 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/system/KUMI_LOGO.bin differ diff --git a/code/sdk/files/leiniao/fs/user/system/OTAUpdata.bin b/code/sdk/files/leiniao/fs/user/system/OTAUpdata.bin new file mode 100644 index 000000000..f7689f22c Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/system/OTAUpdata.bin differ diff --git a/code/sdk/files/leiniao/fs/user/system/OTAUpdataRecover.bin b/code/sdk/files/leiniao/fs/user/system/OTAUpdataRecover.bin new file mode 100644 index 000000000..e89ad7813 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/system/OTAUpdataRecover.bin differ diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/Cat1pyVersion.txt b/code/sdk/files/leiniao/fs/user/system/cat1ota/Cat1pyVersion.txt new file mode 100644 index 000000000..19c7bdba7 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/Cat1pyVersion.txt @@ -0,0 +1 @@ +16 \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/EventMesh.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/EventMesh.py new file mode 100644 index 000000000..7951835b2 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/EventMesh.py @@ -0,0 +1,86 @@ +import _thread +import usys +import ql_fs +CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能 +CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能 +class EventStore(object): + def __init__(self): + self.map = dict() + self.log = None + self.__filters = [] + + def add_filter(self, flt): + self.__filters.append(flt) + + def append(self, event, cb): + self.map[event] = cb + + def fire_async(self, event, msg,thread_size): + if event in self.map: + #print("fire_async:thread_size:{}".format(thread_size)) + if thread_size != None: + _thread.stack_size(thread_size) + #print("fire_async:thread_size:{}".format(thread_size)) + _thread.start_new_thread(self.map[event], (event, msg)) + if thread_size != None: + _thread.stack_size(8*1024) + if self.log: + self.log.info("ASYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, None)) + + def fire_sync(self, event, msg): + res = None + try: + if event in self.map: + res = self.map[event](event, msg) + except Exception as e: + usys.print_exception(e) + if self.log: + self.log.info("ERROR executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + if event not in self.__filters: + if self.log: + self.log.info("SYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + return res + + def subscribe(self,event, cb): + """ + subscribe event and cb + """ + return self.append(event, cb) + + + def publish(self,event, msg=None): + """ + publish event and msg + """ + return self.publish_sync(event, msg) + + + def publish_async(self,event, msg=None,thread_size = None): + """ + 异步发送 + """ + return self.fire_async(event, msg,thread_size) + + + def publish_sync(self,event, msg=None): + """ + 同步发送 + """ + return self.fire_sync(event, msg) + + + def set_log(self,log_adapter): + self,log = log_adapter + + + def add_filter(self,flt): + self.add_filter(flt) + +eventMesh = EventStore() + + + + + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/cat1Service.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/cat1Service.py new file mode 100644 index 000000000..d0b727137 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/cat1Service.py @@ -0,0 +1,1090 @@ +# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# net.getNetMode() +# (0, '460', '11', 7) + +# net.getSignal(1) +# ([99, 99, 255, 255], [-84, -117, -15, 255, -3]) + +# net.nitzTime() +# ('24/02/26 11:17:42 8 0', 1708946262, 0) + + +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import uping +import example +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import fota +import request +import ql_fs +import pm +import sms + +from usr.EventMesh import eventMesh +from usr.httpota import httpota +# from usr.telecom_dmp import telecomDmpCb +# from usr.china_mobile_dmp import chinamobileCb +from usr.china_mobile_ai_regulation import aiRegulation +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +def msg_cb(args): + index = args[1] + storage = args[2] + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if index != -1: + eventMesh.publish("send_singal_data_toBle",index) + + if index >= sms_max-1:#删除短信 + eventMesh.publish("delete_sms_event")#删除短信 + +sms.setCallback(msg_cb)#sms注册回调 + +CAT1_SERVICE_HEAD = 'FE' #固定head + +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V19" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + + + + + + +#设置通话音量 +voiceCall.setVolume(10) +clog.info("voice call volume {}".format(voiceCall.getVolume())) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +# pm.autosleep(1) +pm.wakelock_lock(lpm_fd) +clog.info("create_wakelock {}".format(pm.get_wakelock_num())) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + clog.info("{}".format(config_data)) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) + +# GPIO21 - 引脚 86 KP_MKOUT1 唤醒主控 +# GPIO22 - 引脚 87 KP_MKIN 被主控唤醒 + +# GPIOn - GPIO号,int类型,点此查看GPIO引脚编号与物理引脚的映射关系。 + +# direction - 输入输出模式,int类型,IN - 输入模式,OUT - 输出模式。 + +# pullMode - 上下拉模式,int类型,说明如下: +# PULL_DISABLE - 浮空模式 +# PULL_PU - 上拉模式 +# PULL_PD - 下拉模式 + +# level - 引脚电平,int类型,0 - 设置引脚为低电平, 1- 设置引脚为高电平。 +# recvDataPin = Pin(Pin.GPIO22, Pin.IN, Pin.PULL_PU, 0) +def ExtIntfun(args): + # clog.info('### interrupt {} ###'.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿 + if args[1] == 0: + clog.info("disable autosleep") + # pm.autosleep(0) + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + clog.info("enable autosleep") + pm.wakelock_unlock(lpm_fd) + # pm.autosleep(1) + # clog.info("recvDataPin={}".format(recvDataPin.read())) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + + +# 创建gpio对象 +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +# 设置输入输出模式 +gpioWakeBT.set_dir(Pin.OUT) + +# 设置引脚电平 +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' #获取 Cat1 版本号 +UDP_CMD_DIAL_NUMB = '1' #拨打电话 +UDP_CMD_HUNGUP = '2' #挂断电话 +UDP_CMD_ANSWER = '3' #接听电话 +UDP_CMD_CAT1_OTA_UPDATE = '4' #触发Cat1 OTA升级,mcu提供url +UDP_CMD_SEND_SMS = '5' #发送SMS短信,mcu提供电话号及短信内容 +UDP_CMD_GET_TIME = '6' #获取Cat1 时间 ,YYYYMMDD HHmmss zone +UDP_CMD_GET_RECV_NETWORKSTAT = '7' #获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 // 内容同UDP_CMD_GET_NETWORKSTAT,CAT主动发给MCU +UDP_MSG_SMS = '8' # CAT1接收到的SMS信息给MCU,包含电话号及短信内容 +UDP_CMD_ATCMD = '9' # 执行AT指令 +UDP_MSG_CALL_CONNECTED = 'A' # CAT1 电话接听消息 +UDP_MSG_CALL_DISCONNECTED = 'B' # CAT1 电话挂断消息 +UDP_MSG_COMMING_CALL = 'C' # CAT1 来电消息,包含电话号 +UDP_MSG_REPLY = 'F' # 返回值 +UDP_MSG_OTA = 'D' # 返回值 + +class Cat1Service: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + + def __init__(self, uart=UART.UART4, mode=AP): + + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + # self.__value = None + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + clog.info('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + clog.error('slip netif construct fail') + return None + clog.info('slip network card create success') + # self.__queue = Queue(1) + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.china_mobile_ai_init = 0 + self.volte_switch = 1 #默认是开启VOLTE通话功能 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)# + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) #获取所有的短信内容 + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + + + self.telecom_dmp_switch = 0 + + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + # + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + # 发数据线程 + return None + + def __socket_init(self): + # 创建一个socket实例 + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + # 绑定IP + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + + # cmd = "" + # cmd_tmp= int(cmd_data)#将十进制数转换成int 再转换成十六进制 + # cell_data = hex(cmd_tmp) + # decimal_number = int(cell_data, 16) + # cmd = "%02x"%(decimal_number) # 使用两位表示,不足前面补0 + clog.info(cmd) # 输出: 07 + clog.info("btmcu_cmd_handler cmd {0} , args {1}".format(cmd,parm)) + if cmd == "00": + clog.info(cmd) + # UDP_CMD_GET_CAT1VER + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + # UDP_CMD_DIAL_NUMB + if eventMesh.publish("get_volte_switch") == 1: #只有BLE开了VOLTE才允许打电话 + ret = voiceCall.callStart(str(parm)) + # if ret != 0: + # ret = voiceCall.callStart(str(parm)) + clog.info("ret={} {} {}".format(ret,cmd,parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + print("get_volte_switch NO") + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + clog.info(cmd) + # UDP_CMD_HUNGUP + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + clog.info(cmd) + # UDP_CMD_ANSWER + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "04": + clog.info(cmd) + elif cmd == "05": + clog.info(cmd) + # UDP_CMD_SEND_SMS + elif cmd == "06": + clog.info(cmd) + # UDP_CMD_GET_TIME + time=utime.localtime() + zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # 返回当前时间戳,参数为元组 + # timestamp = utime.mktime(time) + # clog.info(timestamp) + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + clog.info("cmd ==== 07!") + # UDP_CMD_GET_RECV_NETWORKSTAT + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + # ([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data_lac, data_cid, data_rat, data_reject_cause, data_psc]) + operator = net.operatorName() + signal = net.csqQueryPoll() + clog.info("imei:{0},sim:{1},oper:{2},signal:{3},net:{4}".format(imei,simstat,operator,signal,netstat)) + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + clog.info("{},{}".format(cmd,parm)) + # UDP_CMD_ATCMD + # net.setModemFun(0) + # net.setModemFun(1) + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + clog.info("reply:{},ret:{}".format(resp.decode(),ret)) + self.reply_cmd('09',"{}".format(resp.decode())) + else: + clog.info("cmd error ret:{}".format(ret)) + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": #获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能 + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 : + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + clog.info("set_dmp_change_mode on:{}".format(on)) + eventMesh.publish("set_dmp_change_mode",on) + + elif cmd == "16": + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用 + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": #DTMF功能 + voiceCall.startDtmf(str(parm),100) #100ms 持续时间 100-1000 + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "1B": + print("fota {}".format(str(parm).split("and")[0])) + print("fota {}".format(str(parm).split("and")[-1])) + # httpota = httpota() + httpota.run( str(parm).split("and")[0], str(parm).split("and")[-1]) + # eventMesh.publish("set_volte_switch",int(parm)) + # UDP_MSG_OTA + elif cmd == "AC":# + if self.ack_sem==1: + self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): #设置VOLTE开关 + self.volte_switch = int(msg) + + + def get_volte_switch(self,event,msg): #获取VOLTE开关 + + return self.volte_switch + + + def china_mobile_recv_cmd(self,cmd,parm): #移动入库相关指令 + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "16": #获取BLE mac地址 + eventMesh.publish("set_dev_mac",str(parm)) + clog.info("parm:{}\r\n".format(parm)) + + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + clog.info("remove_all_sms_cb\r\n") + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + clog.info("{}\r\n".format(sms_data)) + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) #删除所有的sms信息 + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + clog.info("recv:{}".format(int(msg))) + message=self.sms_get_message_info(int(msg)) + if message == -1: #说明没有这条短信 + return + message_pdu = sms.decodePdu(message[5],20) + + if message_pdu != -1: #解码出来的内容 + + message_ref = message[0] #编码 + message_total_num = message[1] #总共条数 + message_seq = message[2] #当前第几条 + data = message[5] #内容 + data_len = len(data) #内容长度 + # ref :短信参考标识,同一个标识表明为同一条短信 + # total_num :此条长短信总条数 大于1属于长短信 + # seq :此条短信在长短信中的序号 + # print("message:{} {}\r\n".format(message,message_pdu)) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + """ + :param index :短信索引值 + :tyoe index :整形 + + :return :元组类型 + 元组内容: + (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len) + + :message_ref :短信参考标识,同一个标识表明为同一条短信 + :message_total_num :此条长短信总条数 + :message_seq :此条短信在长短信中的序号 + :sub_message_data :词条短信的内容 + :pdu_tye :PDU类型,bit 6标记是否包含用户报文头,长短信需要 + :sub_message_len :此条短信内容长度 + + """ + + message0=sms.searchPduMsg(index) + #print("sms_get_message_info:message0:{}".format(message0)) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + # 电话号码高低位需要转换 + sca = self.sms_deal_phone_number(sca) + + # if sca_num % 2 == 1: + # print("Get SCA phone {}".format(sca[:-1])) + # else: + # print("Get SCA phone {}".format(sca)) + + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + # 电话号码高低位需要转换 + oa = self.sms_deal_phone_number(oa) + + # if oa_num % 2 == 1: + # print("Get OA phone {}".format(oa[:-1])) + # else: + # print("get OA phone {}".format(oa)) + + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + + # 或短信用户数据 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + #长短信 + if ((pdu_tye & 0x40 ) >> 6) == 1: + #长短信,处理长短信用户报文头 + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + # 短短信 + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums()#短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2]#最大存储短信数量 + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + clog.info(sms_data) + if sms_data == -1: + return + sms_max = sms_data[0][2]#最大存储短信数量 + clog.info(sms_max) + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0]#编码 + num = message[1]#总共条数 + curren_num = message[2]#当前第几条 + data_len = message[4] + sms_data.append(code)#编码 编码相同是同一条短信的内容 + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + clog.info("text:{} {} {}\r\n".format(text[0],text[1],text[2])) + + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + # 来电提醒 + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话接听消息 + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话拒接消息 + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + clog.info('Network connection successful.') + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + clog.info('Network connection failed, stage={}, state={}'.format(stage, state)) + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + + self.__waiting_netstat = 0 + return -1 + + # 查询网卡状态 + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + clog.info('reply_cmd 1') + self.clear_remain() + message = str(_timesync) + clog.info('reply_cmd 2') + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + # if self.__queue.empty() == False: + # self.__queue.get() + self.__err = 0 + # self.__value = None + #添加路由信息 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + + return slip.router_add(self.ip, self.mask) + + # 获取slip的网络配置 + def ipconfig(self): + return slip.ipconfig() + + # 设置dns服务器 + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + # 设置默认网卡 + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + clog.info("skip reset_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.4.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + + def set_network_config(self): + + + if (self.__net_connected == 1) : + clog.info("skip set_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.1.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭 + return + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改 + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + # telecomDmpCb.telecom_dmp_power_on_init() + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") == 2: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + #移动入库的初始化 + # chinamobileCb.china_mobile_init() + if eventMesh.publish("get_dmp_change_mode") == 3: + if self.china_mobile_ai_init == 1: + return + self.china_mobile_ai_init = 1 + eventMesh.publish("set_network_state",1) + aiRegulation.AIRegulation_init() + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + # 释放slip网卡 + def stop(self): + slip.destroy() + return 0 + + + # 封装tlv数据包 + def __pack_tlv_format(self, head, content): + # self.head = head + # self.content = content + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + clog.error('illegal pack tlv content') + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + # 解码tlv数据包 + def __unpack_tlv_format(self, msg): + clog.info('__unpack_tlv_format {}\r\n'.format(msg)) + self.msg = str(msg)[2:]#这是去除head FE + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + clog.error('__unpack_tlv_format err') + return -1 + clog.info('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value)) + unpack = (tag,length,value) + return unpack + # socket通信(UDP)模块 + def __Socket_UDP(self, head, content): + # 0 则 __Socket_UDP_write + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + clog.info("send====") + data=self.send_data_q.get() + self.ack_sem=1 + # # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + + clog.info("Socket_SEND_Thread data:{} {}".format(data[0],data[1])) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + clog.info("Socket_SEND_Thread while data:{} {}".format(data[0],data[1])) + + if data: + clog.info("data ok!!") + else: + clog.error("data error!!") + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + ##self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + clog.info("__Socket_UDP send msg {}".format(msg)) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + clog.info("__Socket_UDP send 2") + self.__wait_resp = 1 + # data = self.__queue.get() + self.__wait_resp = 0 + # return data + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + # 1 则 __Socket_UDP_noreply_write + self.send_data_q.put([head,content]) + + def __Socket_UDP_noreply_write(self, head, content): + # self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + + clog.info("__Socket_UDP_noreply send msg {}".format(msg)) + self.__err = 0 + data_size = self.__sock.sendto(msg,server_addr) + clog.info("self.__sock data_size {}".format(data_size)) + self.__wait_resp = 0 + return 0 + + # socket通信(UDP)模块 + def __Socket_Thread(self): + while True: + try: + clog.info("recv====") + data=self.__sock.recv(1024) + clog.info("data:{}".format(data)) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + clog.info('mode: {0}, recv {1} bytes, Data: {2}'.format (value[0],len(data), value[2])) + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + # self.__value = value + # self.__queue.put('1') + self.btmcu_cmd_handler(value[0],value[2]) + clog.info("End else Thread") + else: + clog.error("data error!!") + except Exception as recverr: + clog.error("recverr:{}\r\n".format(recverr)) + if "110" in str(recverr): + self.__err = 1 + # if self.__wait_resp == 1: + # self.__queue.put('0') + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() + + + + clog.info("End Socket Thread") + + + + +# UDP_CMD_GET_CAT1VER = '0', // 获取 Cat1 版本号 +# UDP_CMD_DIAL_NUMB = '1', // 拨打电话 +# UDP_CMD_HUNGUP = '2', // 挂断电话 +# UDP_CMD_ANSWER = '3', // 接听电话 +# UDP_CMD_CAT1_OTA_UPDATE = '4', // 触发Cat1 OTA升级,mcu提供url +# UDP_CMD_SEND_SMS = '5', // 发送SMS短信,mcu提供电话号及短信内容 +# UDP_CMD_GET_TIME = '6', // 获取Cat1 时间 ,YYYYMMDD HHmmss zone +# UDP_CMD_GET_NETWORKSTAT = '7', //获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 +# 下文进行系统配置 +clog.info("Cat1Service start") + +cat1service = Cat1Service() + +#send_data_q = Queue(100) + +#voice call callback function +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + clog.info('voicecall auto end:') + voiceCall.callEnd() + else: + # gpioWakeBT.write(1) + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall connected, PhoneNO: \n'.format(args[6])) + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + clog.info('voicecall disconnect') + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall disconnected, PhoneNO: \n'.format(args[6])) + cat1service.notifyDisconnectCall(args[6]) + elif args[0] == 13: + clog.info('voicecall is waiting, PhoneNO: \n'.format(args[6])) + elif args[0] == 14: + clog.info('voicecall dialing, PhoneNO: \n'.format(args[6])) + elif args[0] == 15: + clog.info('voicecall alerting, PhoneNO: \n'.format(args[6])) + elif args[0] == 16: + clog.info('voicecall holding, PhoneNO: \n'.format(args[6])) + else: + clog.info('voice_callback , args[0]: \n'.format(args[6])) + +#电话消息反馈 +voiceCall.setCallback(voice_callback) + + +def checknet_cb(arg): + clog.info("start checktime!!") + # if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次 + # if eventMesh.publish("get_dmp_change_mode") == 1: + # telecomDmpCb.telecom_dmp_power_on_count() + + _thread.start_new_thread(cat1service.wait_network_ready, ()) + # time=utime.localtime() + # zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # cat1service.timesync("{0},{1}".format(time,zone)) +# _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +# checknet_cb(()) +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + +# def checkpin_cb(arg): +# clog.info("recvDataPin={}".format(recvDataPin.read())) + +# timerCheckRevPin = osTimer() +# timerCheckRevPin.start(1000,1,checkpin_cb) + + + + + + +# while True: +# utime.sleep(5) + + +# uping.ping("172.16.1.5") + # 获取网卡当前工作状态 + +# gpioWakeBT.write(1) +# utime.sleep(1) + +# timesync = net.nitzTime() +# cat1service.timesync(timesync) + + +#url = "http://zzhc.vnet.cn:9998/" + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/checkota.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/checkota.py new file mode 100644 index 000000000..e5ef1f1ae --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/checkota.py @@ -0,0 +1,150 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 + +import fota +import utime +import log +import uos + +PROJECT_VERSION="PY_OTA_V14" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pyota" +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("Fota") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pyota"): + return "PY_OTA_V13" + + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + try: + ql_fs.touch(CONFIG_JSON,data) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def set_version_to_json_config(app_type,keyvalue): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + + ql_fs.touch(CONFIG_JSON, config_data) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + print("{}".format(config_data)) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def get_version_from_json_config(app_type): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + except Exception as e: + print("get_version_from_json_config出错 {}".format(e)) + return "" + +def result(args): + print('download status:',args[0],'download process:',args[1]) + +def check_fota(): + modem_ver = modem.getDevFwVersion() + imei = modem.getDevImei() + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(modem_ver,imei) + response = request.get(url) + print(url) + data = response.json() + if(data['UptoDate'] == False): + print("Need update python application") + fota_obj = fota() # 创建Fota对象 + print("httpDownload...") + srcurl = data['url'] + #差分升级方式 + # res = fota_obj.httpDownload(url1="http://www.example.com/fota.bin",callback=result) + # mini fota方式 + print("{},{}".format("{}/dfota_1.bin".format(srcurl),"{}/dfota_2.bin".format(srcurl))) + res = fota_obj.httpDownload(url1="{}/dfota_1.bin".format(srcurl),url2="{}/dfota_2.bin".format(srcurl),callback=result) + #差分升级FTP方式 + #res = fota_obj.httpDownload(url1="ftp://user:password@ip:port/fota.bin",callback=result) #其中user,password,ip,port需要填写具体使用的FTP服务器信息 + if res != 0: + print("httpDownload error") + return + print("wait httpDownload update...") + else: + print("No need update python application") + +def do_app_update_internal(app_type): + fota = app_fota.new() + imei = modem.getDevImei() + pythonversion=get_version_from_json_config(app_type) + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(pythonversion,imei) + try: + response = request.get(url) + print(url) + data = response.json() + if data['UptoDate'] == False: + print("Need update python application {}".format(data["appcount"])) + for app_update in data["apps"]: + srcurl = app_update['url'] + print("run start...") + targetpyname = app_update['OtaPackageName'] + version = app_update['OtaPackageVersion'] + tmpfile_path = "/usr/.updater/{}".format(targetpyname) + targetfile_path = "/usr/{}".format(targetpyname) + print("download {0} to {1}".format(srcurl,targetfile_path)) + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + ret = fota.download(srcurl,targetpyname) + if ret == 0 : + try: + ql_fs.file_copy(targetfile_path, tmpfile_path) + set_version_to_json_config(app_type,version) + print("ota success") + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + except Exception as e: + print("ota failed!") + else: + print("ota failed") + # 升级后重启 + Power.powerRestart() + else: + print("No need update python application") + except Exception as e: + print("nonetwork:{}".format(e)) + +if __name__ == '__main__': + print("check ota start!!!!!!!!!!") + set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + stage, state = checkNet.waitNetworkReady(1) + if stage == 3 and state == 1: + print('Network connection successful.') + do_app_update_internal("pyota") + # check_fota() + else: + print('Network connection failed, stage={}, state={}'.format(stage, state)) + +# res = uos.statvfs("/usr") +# res = list(res) +# print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024))) \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_ai_regulation.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_ai_regulation.py new file mode 100644 index 000000000..9cd4bf9a8 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_ai_regulation.py @@ -0,0 +1,416 @@ +#AI 纳管对接文件 +import modem +import request +import utime +import osTimer +import ql_fs +from machine import RTC +from misc import Power +import uos +import ujson +import urandom +from usr.EventMesh import eventMesh +HEARBEAT_REPORT_TIMER_CONFIG = 60*60*12#60*60*12 #心跳上报时间间隔12小时可更改做测试 +REALY_TIME_COUNT = 60*60# #开启1小时实时定时器 +HEART_REPORT_ERROR_TIMER = 60 #心率上报错误定时器检测 按照1分钟检查 +PRODUCTID = "1927646275585744898" #产品ID +PRODUCTKEY = "iijgiGiTolCblSFE" #产品KEY 平台创建产品是生成的 +HEART_REPORT_ERR_MAX_NUM = 30 #连续上报错误次数最大值 30 网络异常或者哪里报错了 重启设备 可根据实际的用户的需求更改次数 +REPORT_MODE = 1 #上报方式 1 24小时内一定上报一次 2 12小时后上报一次 +class AIRegulation: + #定义全局变量 + def __init__(self): + self.timerStart = osTimer() + self.timerStartReportHr = osTimer() + self.productId = PRODUCTID + self.productKey = PRODUCTKEY + self.deviceId = "" #设备ID + self.deviceSecret = "" #设备私钥 + self.config_data = {} + self.getDevInforErrCount = 0 #获取设备信息错误次数累计 + self.report_state = 0 #超过24小时清0 + self.TimeSec = 0 #上报的时间戳 + self.startTimerState = 0 + self.software_version = "" + self.imei_new = "" + self.init_flag = 0 + self.net_work_state = 0 + self.dev_mac = "" + eventMesh.subscribe("get_dev_version",self.get_dev_version) + eventMesh.subscribe("set_dev_version",self.set_dev_version) + eventMesh.subscribe("get_dev_mac",self.get_dev_mac) + eventMesh.subscribe("set_dev_mac",self.set_dev_mac) + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + self.report_err_count = 0 #上报错误次数 30次 + + def set_network_state(self,event,msg): + self.net_work_state=int(msg) + + def get_network_state(self,event,msg): + return self.net_work_state + + def set_dev_version(self,event,msg): + self.software_version=str(msg) + + def get_dev_version(self,event,msg): + return self.software_version + def get_dev_mac(self,event,msg): + return self.dev_mac + def set_dev_mac(self,event,msg): + self.dev_mac = str(msg) + #要或者设备的mac 和设备的固件版本号 + + #读取存储设备的设备参数 包含设备imei 设备ID和设备私钥 同一个设备设备ID和设备私钥不变 + def read_dev_storage_param(self): + + IMEI = modem.getDevImei() #获取IMEI号 + result_ok = 0 #返回结果状态 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") # + if IFEXIST == True: #文件存在 + fileSize = ql_fs.path_getsize('usr/cm_ai_regulation.json') + if fileSize == 0: + result_ok = 0 + print("设备信息配置文件不存在\r\n") + return result_ok + else: + try: + with open("/usr/cm_ai_regulation.json","r",encoding='utf-8') as fd: + try: + self.config_data = ujson.load(fd) #转换成json格式 + if len(self.config_data) != 0: + if "deviceId" in self.config_data:# + self.deviceId = str(self.config_data["deviceId"]) #设备ID + + #存在 + if "deviceSecret" in self.config_data: + self.deviceSecret = str(self.config_data["deviceSecret"]) + #存在 + if "TimeSec" in self.config_data: + self.TimeSec = self.config_data["TimeSec"] + if "IMEI" in self.config_data: + self.imei_new = self.config_data["IMEI"] + if str(self.imei_new) != str(IMEI): #设备IMEI不一样也要重新获取 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + result_ok = 0 + return result_ok + + if len(str(self.deviceId)) != 0 or len(str(self.deviceSecret)) != 0: + result_ok = 1 + else: #m没有存储数据 需要从平台上获取设备信息 + result_ok = 0 + except Exception as error: + print("配置文件的内容不是json格式 保存数据的时候格式不对\r\n") + result_ok = 0 + except Exception as error: + print("打开配置文件失败\r\n") + result_ok = 0 + else: + print("配置文件不存在!!!!\r\n") + result_ok = 0 + + print("cm_ai_regulation result_ok: {} self.config_data:{}\r\n".format(result_ok,self.config_data)) + return result_ok + #写文件信息 + def write_config_msg_file(self,msg): + + print("cm_ai_regulation msg:{}\r\n".format(msg)) + with open("/usr/cm_ai_regulation.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + def get_dev_info(self): #是否需要获取设备信息 + request_result = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + request_result = 0 + return request_result + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/secret/info" + #获取设备ID和设备私钥 + get_dev_storage = self.read_dev_storage_param() #返回1说明已经获取过设备信息 不需要再重新获取了只有 + if get_dev_storage == 0: #还没有获取设备信息需要获取一遍 + #获取设备设备信息地址 + IMEI = modem.getDevImei() #获取IMEI号 + + headers_T ={"Content-Type":"application/json"} + config_data ={ + "deviceNoType":"IMEI", + "deviceNo":str(IMEI), + "productKey":str(self.productKey), + "productId":str(self.productId), + } + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + + result_json = "" + response = 0 + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: + if "data" in result_json: + data_json = result_json["data"] + if "deviceId" in data_json: + self.deviceId = data_json["deviceId"] + if "deviceSecret" in data_json: + self.deviceSecret = data_json["deviceSecret"] + + if len(self.deviceId) != 0 or len(self.deviceSecret) != 0: #获取设备信息成功 保存数据 用做心跳上报 + request_result = 1 + self.config_data["deviceId"] = str(self.deviceId) + self.config_data["deviceSecret"] = str(self.deviceSecret) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "deviceNo":"xxx", + # "productId":"xxx", + # "deviceSecret":"xxx" + # } + # } + else: + request_result = 0 + print("后台返回数据json字段里面没有data字段\r\n") + else: + request_result = 0 + print("后台返回数据失败 可能是设备没有加入产品或者产品私钥或者产品ID对不上\r\n") + except Exception as e: #不是json格式 + print("not json data:{}".format(e)) + request_result = 0 + else: + print("未响应 或者网络异常连接不上后台\r\n") + request_result = 0 + except Exception as e: + print("response error:{}".format(e)) + request_result = 0 + else: + request_result = 1 + return request_result + + #上报心跳数据 + def report_hr_data(self): #设备ID 设备私钥不为空才可以上报 + result_s = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + result_s = 0 + return result_s + if len(str(self.deviceId)) != 0 and len(str(self.deviceSecret)) != 0: + + ######################################################### + # { + # "deviceId":"1927659130106658817", + # "deviceSecret":"xmvlRHbEaKPtCqHt", + # "productId":"1927646275585744898", + # "productKey":"iijgiGiTolCblSFE", + # "params": { + # "innerIp": [ + # "127.0.0.1" + # ], + # "netSpeed": "0Mbps", + # "netType": "4G", + # "platform": "RTOS", + # "sdkVersion": "ai_http_1.0", + # "firmwareVersion": "0.0.5.2", + # "imei": "860132060564184", + # "cmei": "", + # "mac": "" + # } + # } + IMEI = modem.getDevImei() #获取IMEI号 + tmp_mac = "" + if len(self.dev_mac) != 0: + tmp_mac = self.dev_mac.replace(':', '-') #将传过来的字符里面的:转换成- + #数据格式内容 + data_json = { + "deviceId":str(self.deviceId), #设备ID + "deviceSecret":str(self.deviceSecret), #设备私钥 + "productId":str(self.productId), #产品ID + "productKey":str(self.productKey), #产品私钥 + "params": { + "innerIp": [ + "127.0.0.1" + ], + "netSpeed": "0Mbps", + "netType": "4G", + "platform": "RTOS", + "sdkVersion": "ai_http_1.0", + "firmwareVersion":str(self.software_version), #设备固件版本号 + "imei": str(IMEI), #设备IMEI号 + "cmei": "", + "mac": str(tmp_mac) #设备MAC地址 + } + } + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/report" #post请求上报数据心跳地址 + #获取设备ID和设备私钥 + try: + headers_T ={"Content-Type":"application/json"} #应用是json格式 + response = request.post(url, data=ujson.dumps(data_json),headers =headers_T) #post请求数据 + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) #将字符串转换成json格式 + print("response.json:{}".format(result_json)) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: #上报成功返回 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) #获取当前时间戳 用于下次时间判断上报心跳数据 + print("date_tmp :{} time_tmp:{}\r\n".format(date_tmp,time_tmp)) + self.report_state = 1 #表示上报成功 置标志1 12小时之内不清0 12小时之后再次上报清零 + self.TimeSec = str(time_tmp) + self.config_data["TimeSec"] = str(time_tmp) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "protocolTypeTime":"xxx" + # } + # } + result_s = 1 + else: + result_s = 0 + except Exception as e: #不是json格式 + print("response:{}".format(e)) + result_s = 0 + else: + result_s = 0 + except Exception as e: + print("response:{}".format(e)) + result_s = 0 + if REPORT_MODE == 1: #上报方式1 + if result_s == 1: #当前上报数据成功 开启下一个上报心跳数据定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #两个时间戳相减大于24小时啧清0 + timerStart_init = HEARBEAT_REPORT_TIMER_CONFIG*1000+random_integer*1000*60 + print("timerStart_init {} random_integer:{}\r\n".format(timerStart_init,random_integer)) + self.timerStartReportHr.start(timerStart_init,0,self.timerStartReportHrCbOne)#重新开始 单次定时器 + else: #上报方式2 + if self.startTimerState == 0: + self.startTimerState = 1 + self.open_report_start_timer() + else: + result_s = 2 + self.AIRegulation_init() #重新初始化 + return result_s + return result_s + def timerStartReportHrCbOne(self,*argc): + reportStatus = self.report_hr_data() #上报心跳数据接口函数 + print("timerStartReportHrCbOne {}\r\n".format(reportStatus)) + if reportStatus == 0: #当前上报失败 开启1分钟的定时器检测 + self.timerStart.stop() + self.report_err_count = 0 + self.timerStart.start(HEART_REPORT_ERROR_TIMER*1000,1,self.oneMinTimerStartCb)#重新开始 + else: + self.timerStart.stop() + + def oneMinTimerStartCb(self,*argc): + reportStatus = self.report_hr_data() + print("oneMinTimerStartCb {}\r\n".format(reportStatus)) + if reportStatus != 0: # + self.timerStart.stop() + else: + self.report_err_count+=1 + if self.report_err_count >= HEART_REPORT_ERR_MAX_NUM: + self.report_err_count = 0 + self.timerStart.stop() + Power.powerRestart() #重启设备 可能网络异常或者哪里出错了 + + def timerStartReportHrCb(self,*argc): #上报心跳定时器回调 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #-15 - +15上报时间随机值分钟单位 *60*1000 + data = RTC().datetime() + year = data[0] + month = data[1] + day = data[2] + + if self.report_state == 1: #上报过一次 就等下一个12小时再上报一次 + #当前时间大于上次记录时间加上12小时就上报一次 + next_alarm_time = utime.localtime(int(self.TimeSec)) + old_month = next_alarm_time[1] + old_day = next_alarm_time[2] + old_year = next_alarm_time[0] + # if 1: + # if old_year != year or old_month != month or old_day != day: + # self.report_state = 0 + # self.report_hr_data() + + # else: + if (time_tmp >= self.TimeSec + HEARBEAT_REPORT_TIMER_CONFIG*1000 + random_integer*60*1000) or (old_year != year or old_month != month or old_day != day): #or old_year != year or old_month != month or old_day != day: #上次上报时间戳+12小时时间戳 大于当前时间戳 上报一次 或者年 月 日不一致也上报一次 + self.report_state = 0 + self.report_hr_data() + else: #确保12小时之内上报一次 每一个小时上 + self.report_hr_data()#上报一次心跳数据 + + def open_report_start_timer(self): #1小时的定时器 + self.timerStartReportHr.start(REALY_TIME_COUNT*1000,1,self.timerStartReportHrCb)#1小时定时 + + def timerStartCb(self,*argc):#获取设备信息定时器回调 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:# + self.getDevInforErrCount+=1 + if self.getDevInforErrCount >= 20: + self.getDevInforErrCount = 0 + self.timerStart.stop() + else: + self.getDevInforErrCount = 0 + self.timerStart.stop() + self.report_hr_data()#上报一次心跳数据 + + def AIRegulation_init(self):#AI 纳管 初始化 获取完设备数据后立马上报心跳数据 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") + if IFEXIST == True: + uos.remove("/usr/cm_ai_regulation.json") + self.init_flag = 1 + self.report_state = 0 + self.getDevInforErrCount = 0 + self.report_err_count = 0 + self.timerStartReportHr.stop() + + self.startTimerState = 0 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:#开机获取失败了再等30s重新获取 获取二十次都失败就等下次重启设备获取 + self.timerStart.stop() + self.timerStart.start(30*1000,1,self.timerStartCb)#重新开始 开机10分钟内没有获取到设备信息就不获取了需要手动重启设备 + else: #设备开机获取设备信息成功 立马上报一次心跳数据 + self.report_hr_data()#上报一次心跳数据 + +aiRegulation = AIRegulation() + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_dmp.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_dmp.py new file mode 100644 index 000000000..0ae967c12 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/china_mobile_dmp.py @@ -0,0 +1,759 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from ucryptolib import aes +import hashlib +from usr.EventMesh import eventMesh +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") +import modem +import base64 +import request +import ujson +BLOCK_SIZE = 16 +NEED_SAVE_CONFIG_FILE = 0 #是否需要保存上报次数 异常重试次数 时间戳到配置文件 0不保存 1保存 +#中国移动入库 +class chinamobile: + def __init__(self): + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + self.config_data = {} + + self.__net_connected = 0 + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mac_data ="" + self.address = "a.fxltsbl.com" + + self.new_address = "a.fxltsbl.com" + + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + self.init_flag = 0#初始化状态指初始化一次 + self.retryTimer = osTimer()#异常重试定时器 + self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发 + self.heartreportTimer = osTimer()#心跳上报定时器 + + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息 + eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息 + + eventMesh.subscribe("set_dmp_cm_address",self.set_dmp_cm_address)#订阅消息 + eventMesh.subscribe("get_dmp_cm_address",self.get_dmp_cm_address)#订阅消息 + + pass + + def set_dmp_cm_address(self,event,msg):#设置网络是否正常 + self.address = str(msg) + self.new_address = str(msg) + + def get_dmp_cm_address(self,event,msg):#获取网络是否正常 + return self.address + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def set_dev_mac(self,event,msg):#设置BLE MAC地址 + self.mac_data = str(msg) + + def get_dev_mac(self,event,msg):#获取BLE MAC地址 + return self.mac_data + + def sha256_encode(self,key,data):#对数据进行AES256加密 + h = hashlib.sha256() + h.update(key) + crypto_key = h.digest() + #IV是偏移量 默认16个十六进制00 + IV = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + crypto = aes(crypto_key, 2, IV) + + #进行PKCS7Padding填充。 + block_num = len(data) // BLOCK_SIZE+1 + k = len(data) % BLOCK_SIZE + j = len(data) // BLOCK_SIZE + padding = BLOCK_SIZE - k + i = 0 + szDataIn = bytearray(data) + # print(szDataIn) + szDataIn = szDataIn+bytearray(block_num * BLOCK_SIZE -len(data)) + # print(szDataIn) + + for i in range(padding): + szDataIn[j * BLOCK_SIZE + k + i] = padding + # print("szDataIn:{} {} {}\r\n".format(szDataIn,j * BLOCK_SIZE + k + i,padding)) + + indata = bytes(szDataIn) + enc = crypto.encrypt(indata) + #最后将加密AES256的数据转换成base64的编码格式 + msg_tmp = base64.b64encode(enc) + data_encode = msg_tmp.decode('ascii')#转换成字符串 + return data_encode + + #写文件信息 + def write_config_msg_file(self,msg): + + print("write_config_msg_file msg:{}\r\n".format(msg)) + with open("/usr/china_mobie_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + #读文件信息 + def read_config_msg_file(self): + IFEXIST = ql_fs.path_exists("/usr/china_mobie_config.json") #不存在 + if IFEXIST == True: + with open("/usr/china_mobie_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("read_config_msg_file self.config_data:{}\r\n".format(self.config_data)) + + def china_mobile_first_get_config(self,url): + ##############第一步#######获取采集规则配置####### + brand = "Watch"#品牌 + + model = "Watch"#型号 + appKey = "M100001131"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = "autoRegist"#自注册填autoRegist 心跳配置传输 keepAlive + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + + + #配置拉取数据格式 + config_data = {"endpoint":"{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,preField1,preField2,preField3),"configType":"{}".format(configType)} + + #配置拉取数据上报地址 + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + headers_T ={"Content-Type":"application/json"} + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + request_result = 0 + result_json = "" + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + request_result = 1 + if response.status_code == 200:#服务器响应成功并返回数据 + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + + if request_result == 0: #请求出错了 + return "" + + + return result_json + + + def first_get_config_json(self):#开机上电获取配置信息 + getresult = 0 + print("first_get_config_json false",self.__net_connected) + if self.__net_connected != 1:#网络不正常 + return getresult + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + result_json = self.china_mobile_first_get_config(url) + if result_json == "": + return 0 + # { + # "reportTime":1440, + # "reportNum":8, + # "heartBeatTime":1440, + # "retryInterval":10, + # "retryNum":1 + # }#默认采集规则配置 + #默认参数 + + retryInterval = self.retryInterval + heartBeatTime = self.heartBeatTime + reportTime = self.reportTime + reportNum = self.reportNum + retryNum = self.retryNum + new_address = self.address + print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,new_address)) + if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档 + rspCode = result_json["rspCode"] + rspCode_zh = result_json["rspMsg"] + if rspCode == "0000" or rspCode_zh == "成功": + getresult = 1 + if "result" in result_json: + msg_data = result_json["result"] #采集规则配置信息 + if "ruleConfig" in msg_data:#不存在就是空 + msg_data = msg_data["ruleConfig"] + msg_data = ujson.loads(msg_data)#转换成json格式 + if "reportTime" in msg_data: + self.reportTime = int(msg_data["reportTime"]) + if "heartBeatTime" in msg_data: + self.heartBeatTime = int(msg_data["heartBeatTime"]) + if "reportNum" in msg_data: + self.reportNum = int(msg_data["reportNum"]) + if "retryInterval" in msg_data: + self.retryInterval = int(msg_data["retryInterval"]) + if "retryNum" in msg_data: + self.retryNum = int(msg_data["retryNum"]) + if "address" in msg_data: + self.address = str(msg_data["address"]) + print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum,self.address)) + + print("true") + else: + print("false") + + if getresult == 1:#请求配置文件成功 + if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or\ + (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != new_address): + #重新走注册流程 清空报错次数 记录当前时间戳 + print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致 + self.config_data["reportTime"] = self.reportTime + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportNum"] = self.reportNum + self.config_data["retryNum"] = self.retryNum + self.config_data["retryInterval"] = self.retryInterval + # self.config_data["address"] = str(self.address) + if new_address != self.address : #服务器下发和本地不一致需要用服务器下发的最新的IP 并把这个IP发送到BLE保存 + eventMesh.publish("send_dmp_cm_address_toBLE",str(self.address)) + + self.write_config_msg_file(self.config_data) #保存新的配置文件 + return 2 + return getresult #1 获取成功 0 获取失败 + + + def china_mobile_autoregist_infor(self,url,configType_data): + #########################第二步############自注册上报################### + #设备自注册上报 + dev_autoregist_result = 0 #默认是1成功 0是失败 + if self.__net_connected != 1:#网络不正常 + return dev_autoregist_result + #密钥 + key = "f74c005251dc40c4b64a283827da3812" + + brand = "{}".format("Watch")#品牌 + + model = "Watch"#型号 + appKey = "M100001131"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = configType_data#自注册填autoRegist 心跳配置传输 keepAlive 暂时不用 + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + #不需要加密 #||分隔符不能超过11个 否则平台会解析出错 + config_data = "{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,configType,preField1,preField2) + + #需要加密的数据明文 + if (len(self.mac_data) == 0):#获取失败了 + self.mac_data = "***" + + MAC = self.mac_data + # base64_MAC = sha256_encode(key,MAC) + RAM = "32MB" + # base64_RAM = sha256_encode(key,RAM) + ROM = "144MB" + # base64_ROM = sha256_encode(key,ROM) + CPU = "YH601S" + # base64_CPU = sha256_encode(key,CPU) + sysVersion = "OpenHarmony 3.2" + # base64_sysVersion = sha256_encode(key,sysVersion) + if (len(self.software_version) == 0):#获取失败了 + self.software_version = "Watch Soar V1.0" + softwareVer = self.software_version + # base64_softwareVer = sha256_encode(key,softwareVer) + softwareName ="FD230" + # base64_softwareName = sha256_encode(key,softwareName) + volte="0" #0:开;1:关;-1:不支持 + # base64_volte = sha256_encode(key,volte) + netType="4G" + # base64_netType = sha256_encode(key,netType) + + resolution="466*466" + # base64_resolution = sha256_encode(key,resolution) + + screenSize = "1.43" + # base64_screenSize = sha256_encode(key,screenSize) + wearingStatus ="-1" + # base64_wearingStatus = sha256_encode(key,wearingStatus) + + networkStatus ="1"#1:连接;0:未连接;-1:不支持 + + routerMac = "***" + + wifiMac = "***" + # base64_networkStatus = sha256_encode(key,networkStatus) + encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus,routerMac,wifiMac] + print(len(encyr_data)) + encyr_new_data=[] + for i in range(len(encyr_data)): + tmp_data = self.sha256_encode(key,encyr_data[i]) + encyr_new_data.append(tmp_data) + + # deviceInfo_tmp = { + # "bluetoothMac":"{}".format(base64_MAC),#mac地址可填可不填 + # "ram":"{}".format(base64_RAM),#ram信息 + # "rom":"{}".format(base64_ROM),#rom信息 + # "cpu":"{}".format(base64_CPU),#cpu信息 + # "sysVersion":"{}".format(base64_sysVersion),#操作系统版本号 + # "softwareVer":"{}".format(base64_softwareVer),#固件版本号 + # "softwareName":"{}".format(base64_softwareName),#固件名称 + # "volte":"{}".format(base64_volte),#volte开关 默认是开 + # "netType":"{}".format(base64_netType),#当前网络类型4G + # "resolution":"{}".format(base64_resolution),#屏幕分辨率466*466 + # "screenSize":"{}".format(base64_screenSize),#屏幕尺寸默认1.43 + # "wearingStatus":"{}".format(base64_wearingStatus),#佩戴状态不支持 + # "networkStatus":"{}".format(base64_networkStatus)#网络状态 + + # } + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]) #wifi mac + } + json_data = ujson.dumps(deviceInfo_tmp)#需要转义的字符串 + + send_autoregist = { + "endpoint":config_data, + "deviceInfo":"{}".format(json_data) + } + + test_data = ujson.dumps(send_autoregist)#需要转义的字符串 + print("test_data:{}".format(test_data)) + headers_T ={"Content-Type":"application/json"} + request_result = 0 + print("shangbao address:{}\r\n".format(url)) + try: + response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T) + request_result = 1 + result_json = "" + print("response success:response.status_code{}\r\n".format(response.status_code)) + if response.status_code == 200: + dev_autoregist_result = 1 + content = response.content + c = next(content) + result_json = ujson.loads(c)#解析成json格式 + else: + dev_autoregist_result = 0 + + + if "rspCode" in result_json: + rspCode = result_json["rspCode"] + rspMsg = result_json["rspMsg"] + print("response success:rspCode{} {}\r\n".format(rspMsg,rspCode)) + if rspCode == "0000" or rspMsg == "成功": + dev_autoregist_result = 1 + else: + dev_autoregist_result = 0 + else: + dev_autoregist_result = 0 + print("response success:\r\n") + return dev_autoregist_result + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + if request_result == 0:#请求出错了 + dev_autoregist_result = 0 + return dev_autoregist_result + + + def read_config_file(self):#获取配置文件,一开机是没有配置文件的 + + self.read_config_msg_file()#读文件信息 + if self.config_data != {}: + if "retryInterval" in self.config_data: + self.retryInterval = int(self.config_data["retryInterval"]) + if "retryNum" in self.config_data: + self.retryNum = int(self.config_data["retryNum"]) + if "heartBeatTime" in self.config_data: + self.heartBeatTime = int(self.config_data["heartBeatTime"]) + if "reportTime" in self.config_data: + self.reportTime = int(self.config_data["reportTime"]) + if "reportNum" in self.config_data: + self.reportNum = int(self.config_data["reportNum"]) + if "address" in self.config_data: + self.address = str(self.config_data["address"]) + + #终端本地需要保存本地的数据 + # self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + # self.report_Num_old = 0#保存本地 + # self.retryNum_old = 3#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + if "reportTime_Sec" in self.config_data: + self.reportTime_Sec = int(self.config_data["reportTime_Sec"]) + if "report_Num_old" in self.config_data: + self.report_Num_old = int(self.config_data["report_Num_old"]) + if "retryNum_old" in self.config_data: + self.retryNum_old = int(self.config_data["retryNum_old"]) + + print("read_config_file self.config_data:{} ".format(self.config_data)) + def retryTimerCb(self,*argc):#异常重试机制定时器回调 + #保存本地 + self.retryNum_old+=1 #1 self.reportNum = 1 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["retryNum_old"] = self.retryNum_old + self.write_config_msg_file(self.config_data) + print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old)) + self.search_report_num_step() + pass + def reportTimerIntervalError(self): + self.retryNum_old = 0#保存 + self.report_Num_old = 0#保存 定时清空数据 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.search_report_num_step()#重新查询 + pass + def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤 + print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{} self.reportTime:{}\r\n".format(self.retryNum_old,self.retryNum,self.reportTime)) + + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#self.retryNum_old > 10#结束HTPP下一个最大频率周期时间间隔流程 + print("error_retryNum_step:self.retryNum_old >= self.retryNum\r\n") + self.reportTimerIntervalError() + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalError)#重新开始 需要清空数据 + else: + get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端 + if get_result == 0:#获取失败或者没有网络 走异常重试机制 + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step:self.retryTimer.start :{} {} {}\r\n".format(self.retryInterval,self.report_Num_old,self.reportNum)) + self.checkMaxReportNum()#检查上报最大次数 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + pass + else:# + + #第一步触发自注册 + if get_result == 2:#请求的配置文件和本地不一致重启 + self.retryNum_old = 0#保存本地 配置文件不同重启模组 清空异常重试的报错次数 + # self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + # if NEED_SAVE_CONFIG_FILE == 1: + # self.config_data["report_Num_old"] = self.report_Num_old + # self.config_data["retryNum_old"] = self.retryNum_old + # self.write_config_msg_file(self.config_data) + + self.china_mobile_init_param()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件 + self.search_report_num_step() + return + + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step self.report_Num_old:{}\r\n".format(self.report_Num_old)) + if self.checkMaxReportNum() == 1:#检查上报最大次数 + self.search_report_num_step()#重新查询 + return + report_result = self.onself_regist_report_cb()#注册 + + #第二步触发心跳上报次数 + if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳 + self.heartreportTimer.stop() + self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb) + + def heartreportTimerCb(self,*argc): + self.heart_report_cb() + + def retpoertTimerClear(self): + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.retpoertTimerC.stop()#关闭定时器 + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + pass + def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + # + date_tmp = utime.localtime() + currentTime = utime.mktime(date_tmp)#获取时间戳 + reportTime = self.reportTime_Sec + print("check_current_time:time_tmp - self.reportTime_Sec:{} currentTime:{} self.reportTime*60:{}".format(reportTime, currentTime,self.reportTime*60)) + if currentTime >= reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据 + #在规定时间内上报次数大于8次就要等下一个10分钟 或者1440分了开个定时器 + print("currentTime >= reportTime:\r\n") + self.retpoertTimerClear() + else:#否则次数置零,记录一下(当前时间+reportTime)时间 + time_count = (reportTime - currentTime) #self.reportTime_Sec永远比time_tmp大 + print("time_count:{}".format(time_count)) + print("currentTime < reportTime:\r\n") + self.retpoertTimerC.start(time_count*1000,0,self.retpoertTimerCB) + + + # 第一次请求的时候,记录一下(当前时间+reportTime)时间与次数,如果次数小于最大次数,直接返回true。 + # 如果次数大于最大次数,则判断一下当前时间是否超过上次设置的时间,如果超过了,则表示超过最大次数;否则次数置零,记录一下(当前时间+reportTime)时间。 + def retpoertTimerCB(self,*argc):#按照剩余的时间做定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + + + def search_report_num_step(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + def search_report_num_step_init(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.reportTime_Sec == 0: + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + + def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器 要清空数据 + print("reportTimerIntervalCb\r\n") + self.search_report_num_step()#重新查询 + + def onself_regist_report_cb(self):#自注册上报信息 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("onself_regist_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + self.report_Num_old+=1 ##保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + #设备自注册上报信息 + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址 + confing_type = "autoRegist"#上报传输配置 + result = self.china_mobile_autoregist_infor(url,confing_type) + + + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum()#检查上报最大次数 + if self.checkMaxRetryNum() == 1: + print("retryTimerCb timer22")#异常重试过多重新间隔reportTime注册流程 关闭所有的定时器 + self.search_report_num_step()#重新查询 + return 0 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return 0 + else: + if self.checkMaxReportNum() == 1: + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) + return 0 + else: + return 1 + def checkMaxReportNum(self):#检查上报次数最大值 + print("checkMaxReportNum :self.reportNum :{} self.report_Num_old:{}\r\n".format(self.reportNum,self.report_Num_old)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + return 1 + else: + return 0 + + def checkMaxRetryNum(self):#检查上报错误次数 + print("checkMaxRetryNum :self.retryNum:{} self.retryNum_old:{}\r\n".format(self.retryNum_old,self.retryNum)) + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程 + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop()#关闭心跳定时器 + return 1 + else: + return 0 + + def heart_report_cb(self):#心跳上报信息 + + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.report_Num_old+=1#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("heart_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime,self.reportTime_Sec)) + + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址 + confing_type = "keepAlive"#上报传输配置 + result = self.china_mobile_autoregist_infor(url,confing_type) + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum() + if self.checkMaxRetryNum() == 1:#异常重试过多重新间隔reportTime注册流程 + self.search_report_num_step()#重新查询 + return + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return + if self.checkMaxReportNum() == 1:#上报次数大于8次 + self.search_report_num_step()#重新查询 + return + + def china_mobile_init_param(self):#初始化 + + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + #先清空再写入默认参数 + self.init_flag = 1 + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + get_address = eventMesh.publish("get_dmp_cm_address") + if get_address == None:#获取出来地址是空的使用适配地址 + self.address = "a.fxltsbl.com"#默认 + else: #恢复出厂使用BLE传送过来的地址 + self.address = str(eventMesh.publish("get_dmp_cm_address")) + + self.config_data["retryInterval"] = self.retryInterval + self.config_data["retryNum"] = self.retryNum + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportTime"] = self.reportTime + self.config_data["reportNum"] = self.reportNum + # self.config_data["address"] = self.address + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["report_Num_old"] = self.report_Num_old + self.config_data["retryNum_old"] = self.retryNum_old + + self.write_config_msg_file(self.config_data) + #读配置文件 + self.read_config_file()#只读一下配置文件 + + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + def china_mobile_init(self): + self.china_mobile_init_param() + #查询上报总数流程 + self.search_report_num_step_init() + + + + +chinamobileCb = chinamobile() + + + + + + + + + + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/httpota.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/httpota.py new file mode 100644 index 000000000..1f7ff897c --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/httpota.py @@ -0,0 +1,43 @@ +#远程升级 + +import fota +import utime +import log +import checkNet + +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 +import uos + + +# 设置日志输出级别 + +class httpota: + def __init__(self): + print("httpota init") + + + def run(url_1,url_2): + print("httpDownload...{}".format(url_1)) + print("httpDownload...{}".format(url_2)) + # format(str(url_2))) + fota_obj = fota() # 创建Fota对象 + # res = fota_obj.httpDownload(str(url_1),str(url_2)) + res = fota_obj.httpDownload(url1="{}".format(url_1),url2="{}".format(url_2)) + if res != 0: + print.error("httpDownload error") + return + print("wait httpDownload update...") + utime.sleep(2) + # Power.powerRestart() + +# httpota = httpota() +# httpota.run("http://snicker.com.cn:8089/FD230/V18-V19OTA") \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/main.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/main.py new file mode 100644 index 000000000..3d70c7cac --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/main.py @@ -0,0 +1,15 @@ +import example +main_flag = 1 +try: + from usr.slipService import slipservice + from usr.tcpService import TcpService + import usr.checkota + example.exec('/usr/main_init.py') + print("启动成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + print("启动失败!!!!!\r\n".format(e)) + + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/main_init.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/main_init.py new file mode 100644 index 000000000..9ed74f7ce --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/main_init.py @@ -0,0 +1,77 @@ +import example +import osTimer +import ql_fs +import log +import sms +from misc import Power +ota_flag = 0 +try: + from usr.EventMesh import eventMesh + from usr.telecom_dmp import telecomDmpCb + from usr.china_mobile_dmp import chinamobileCb + from usr.cat1Service import cat1service + ota_flag = 1 + print("检测文件成功!!!!!!!\r\n") +except Exception as e: + print("检测文件失败!!!!!!!{}\r\n".format(e)) + ota_flag = 0 +tmp_dir = ql_fs.path_exists("/usr/TmpPyFile") #临时存放的文件夹 +if tmp_dir == True: + try: + ql_fs.rmdirs("/usr/TmpPyFile") + print("移除 TmpPyFile 成功!!!!!!!\r\n") + except Exception as e: + print("移除 TmpPyFile 失败!!!!!!!{}\r\n".format(e)) + +sms_get = sms.getSaveLoc() +if(sms_get != -1): + sms_lacv = sms_get[0][0] + if sms_lacv != 'SM': #每次开机设置一下短信的存储位置 + sms.setSaveLoc('SM', 'SM', 'SM') + +PROJECT_VERSION = "PY_MAIN_V3" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pymain" + + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +cat1service_log = log.getLogger("pymain") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V2" + elif (app_type == "pysrv"): + return "PY_SRV_V2" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + cat1service_log.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + cat1service_log.info("{}".format(config_data)) + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +def checkota_cb(arg): + print("start checkota!!") + example.exec('/usr/checkota.py') +# 创建os定时器 + +timer = osTimer() +# 启动定时器,参数依次为时间、是否循环、回调函数 定时器超时的时间(单位ms) +# 开机delay 20秒后执行一次ota升级 +timer.start(20000,0,checkota_cb) +print("checkota py end!!") diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/slipService.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/slipService.py new file mode 100644 index 000000000..eddba83fb --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/slipService.py @@ -0,0 +1,20 @@ + +import log +import slip +from machine import UART +class slipServiceInit: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + slip.destroy() + print('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + print('slip netif construct fail') + else: + print('slip netif construct success') + +slipservice = slipServiceInit() \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/system/cat1ota/telecom_dmp.py b/code/sdk/files/leiniao/fs/user/system/cat1ota/telecom_dmp.py new file mode 100644 index 000000000..28c8dc69c --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1ota/telecom_dmp.py @@ -0,0 +1,432 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") +import modem +import base64 +import request +import ujson +REGIST_MAX_NUM=10 #自注册的最大次数 现在是默认是10次 +REGIST_INTERVAL_TIMER=60*60 #自注册失败的间隔时间 1小时 +REGIST_POWER_ON_TIME=5*60 #开机5分钟内就必须自注册触发 +MULTI_DAY_RESEND_T = 30*24*60*60-12*60*60#多日重发的机制的周期T 30天 +MULTI_DAY_RESEND_t = 12*60*60#多日重发的机制的周期t 0.5天 +def get_report_url_website(mode = None):#获取上报网址 + url = "http://zzhc.vnet.cn:9998/"#上报网址 + return url + +class telecomDmp: + def __init__(self): + self.config_data = {} + self.check_timer = osTimer()#1小时定时器 + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + self.telecomTimer = osTimer() + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + eventMesh.subscribe("get_telecom_init_state",self.get_telecom_init_state) + eventMesh.subscribe("set_telecom_init_state",self.set_telecom_init_state) + + eventMesh.subscribe("set_dmp_power_num",self.set_dmp_power_num) + eventMesh.subscribe("get_dmp_power_num",self.get_dmp_power_num) + + eventMesh.subscribe("get_dmp_power_timer_count",self.get_dmp_power_timer_count) + + self.regist_queue = Queue() + _thread.stack_size(10*1024) + _thread.start_new_thread(self.regist_queue_thread, ()) + _thread.stack_size(8*1024) + + eventMesh.subscribe("publish_message_event_registinfor",self.publish_message_event_registinfor) + self.__net_connected = 0 + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("save_iccid_data",self.save_iccid_data)#订阅消息 保存ICCID + eventMesh.subscribe("get_iccid_data",self.get_iccid_data)#订阅消息 保存ICCID + + eventMesh.subscribe("set_regist_time",self.set_regist_time)#订阅消息 保存ICCID + eventMesh.subscribe("get_regist_time",self.get_regist_time)#订阅消息 保存ICCID + + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mulit_day_timesec = 0#多日重发的开始的时间戳 + pass + def regist_queue_thread(self): + while True: + data = self.regist_queue.get() + #EventMesh.debug_log("regist_queue:data = {}".format(data)) + if data != None: + try: + data["func"](data["data"]) + except Exception as e: + print("regist_queue:ERROR:{}".format(e)) + usys.print_exception(e) + def publish_message_event_registinfor(self,event,msg): + self.regist_queue.put(msg) + + def publish_regist_event_cb(self, *args, **kwargs): + eventMesh.publish("publish_message_event_registinfor",{"func":self.timer_cb,"data":0}) + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def save_iccid_data(self,event,msg): + self.iccid_data = str(msg)[6:]#ICCID: + print("write_config_msg_file msg:{}\r\n".format(msg)) + self.config_data["ICCID"]=self.iccid_data + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + #读文件信息 + def get_iccid_data(self,event,msg): + + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_iccid_data self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "ICCID" in self.config_data: + value = self.config_data["ICCID"] + self.iccid_data = str(value) + else: + self.iccid_data = "" + print("get_iccid_data self.config_data end:{}\r\n".format(self.config_data)) + return self.iccid_data + + def set_regist_time(self,event,msg):# + self.regist_timeSec = str(msg)[7:]#REGIST: + print("set_regist_time msg:{}\r\n".format(msg)) + self.config_data["REGIST"]=self.regist_timeSec + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + + def get_regist_time(self,event,msg):# + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_regist_time self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "REGIST" in self.config_data: + value = self.config_data["REGIST"] + self.regist_timeSec = int(value) + else: + self.regist_timeSec = 0 + return self.regist_timeSec + + + def get_sim_state(self):#获取sim状态 不为1是sim异常 + return sim.getStatus() + + def get_sim_iccid(self):#获取sim的iccid + return sim.getIccid() + + def get_sim_imsi(self):#获取sim的imsi + return sim.getImsi() + def get_dev_imei(self):#获取设备的imei号 + return modem.getDevImei() + + def telecom_regeist_infor(self):#自注册信息 可变更 + network_state = eventMesh.publish("get_network_state") + print("telecom_regeist_infor :",network_state,self.isRegistOk,REGIST_INTERVAL_TIMER,MULTI_DAY_RESEND_T,MULTI_DAY_RESEND_t,REGIST_POWER_ON_TIME) + if network_state == 0:# 第一次进入网络不正常就需要开启1小时定时器 等待下一个周期判断网络是否正常 需要判断网络是否正常 不正常就不去触发自注册了 就等待下一次 如果10次都不成功 就等一下次开机再去自注册 + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + return + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + + print("iccid!!!!!!!!!!iccid {} read_iccid:{}".format(iccid,read_iccid)) + if read_iccid != "": + if str(read_iccid) == str(iccid):#两者相同 并且本地有保存 不再自注册了 说明已经自注册过了 + print("already registed!!!!!!") #已自注册过 + self.isRegistOk = 1 + + if self.isRegistOk == 1: + print("multiple_day_resend!!!!!!\r\n") + self.multiple_day_resend() + return + self.telecom_regist_infor_init()#自注册初始化函数 + if self.isRegistOk == 0: + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + + def telecom_regist_infor_init(self):#自注册的数据部分 + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + url = get_report_url_website(None)#上报网址 根据需要更改上报网址 + if iccid == -1: + iccid = str("FF")#为空就填写FF + + IMSI = self.get_sim_imsi() + if IMSI == -1:#没有卡 则填FF + IMSI = str("FF") + imei = self.get_dev_imei() + if imei == -1: + imei = str("FF") + + data_tmp = net.getCellInfo() #会适当卡个3-5s + i = 0 + cell_data = 0 + if(len(data_tmp) >= 1): + for cell in data_tmp: + if i == 2:#在list里面最多就三个元素 最后一个是LTE的数据 + if cell != []: + for tup in cell: + print("tup:{}".format(tup)) + if tup[0] == 0 and len(tup) > 0:#第0个代表当前服务的小区CELLID 7位16进制数 + cell_data = tup[1]#这个是十进制数需要自行转换成十六进制数 + print(cell_data) + break + i+=1 + # cell_data = 0 + cell_data = "%07x"%(cell_data)#7位16进制数不够前面补0 + print(cell_data) + sendCellid = "{}".format(cell_data) + REGVER = "12.0"#当前数据域协议版本号 + MODEL = "TXB-Watch Soar"#机型字段 -前面是厂商名 -后面是设备名 + get_dev_version = eventMesh.publish("get_dev_version")#订阅消息 + if get_dev_version == None: + get_dev_version = "" + SWVER = get_dev_version #软件版本号 + UETYPE = "12"#终端类型 12是智能手表 11是儿童手表 + SIM1ICCID = iccid + SIM1LTEIMSI = IMSI + MACID = ""#可用WALN的地址 终端布支持WLAN 就是不可上网 + OSVER = "RTOS"#操作系统版本号 + IMEI1 = imei#"876226002021717"#imei + SIM1CELLID = sendCellid#下发的小区ID + data = { + "REGVER":REGVER, + "MODEL":MODEL, + "SWVER":SWVER, + "UETYPE":UETYPE, + "SIM1ICCID":SIM1ICCID, + "SIM1LTEIMSI":IMSI, + "MACID":MACID, + "OSVER":OSVER, + "IMEI1":IMEI1, + "SIM1CELLID":SIM1CELLID, + "NETWORKTYPE":4 + } + data_infor=ujson.dumps(data)#将字典转换成json格式 + json_bytes = bytes(data_infor, 'utf-8')#转换成字节数 + data_encode = base64.b64encode(json_bytes)#再转换成base64的编码格式 密文 + print("data_infor:{} data:{}".format(data_encode,data)) + headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写 + request_result = 0 + try: + response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T) + request_result = 1 + if response.status_code == 200 : #返回状态码 200服务器正常解析数据 + content = response.content#后台返回的结果 + c = next(content) + + jsload_data = ujson.loads(c) + print("jsload_data:{}".format(ujson.loads(c))) #{"resultCode": "0","resultDesc": "Success"} + if "resultCode" in jsload_data or "resultDesc" in jsload_data:#返回结果码值 + resultCode = jsload_data["resultCode"]#结果解析 "0" 成功 "1" 解码错误 "2" 校验错误 + resultDesc = jsload_data["resultDesc"]#Success 表示自注册成功 + + if resultCode == "0" or resultDesc == "Success":#注册成功退出当前注册 保存当前的ICCID 不在进行自注册了 + iccid = self.get_sim_iccid()#获取当前SIM的ICCID + if iccid != -1:#读到ICCID + self.timer_count = 0 + self.check_timer.stop() + self.isRegistOk = 1#已完成自注册的标识 + iccid_buf =str("ICCID:")+str(str(iccid)) + eventMesh.publish("save_iccid_data",iccid_buf) + self.multiple_day_resend() + #上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域 + print("regist success:!!!!!") + return 1 + if resultCode == "1": + print("Decode error")#解码错误 设备编码不正确 + return 0 + + if resultCode == "2":# + print("Check error")#校验错误 设备里面数据不正确 有些数据不应该为空 + return 0 + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + return 0 + + def timer_cb(self,data):#定时器回调 + self.telecom_regeist_infor()#重新进行自注册 + pass + # 多日重发功能要求: + # 1) 多日重发是指:在重发周期 T 内,如果没有功能性触发数据域自注册(触发发送且发送成功), + # 则终端应根据当前终端实时信息组织数据域自注册(不能直接拿上一周期的内容不变而重发)内容 + # 并发送的过程; + # 2) 多日重发的时间间隔周期 T 设置为 30 天; + # 3) 多日重发的过程应设置为:功能性(比如换卡等)触发数据域自注册后,立即启动定时器 t(t + # 的初始值应设为 0.5 天)开始重发计时,以后每当 t 时间等于 T 的整数倍(t=N*T)时,终端就进 + # 行数据域自注册发送,发送后 t 不要清零不要初始化,只有当功能性触发数据域自注册后,t 才初 + # 始化,t 的初始化值为 0.5 天。 + # Multiple day resend + def multiple_day_resend(self):#多日重发机制函数 没有发送数据域或者发送成功 + + t = 12 #计时周期 按照0.5天 也就是12小时来计算 + T = 30*24 #周期为30天 计算30天的总共小时数 + # t = N*T#只有t为T的整数倍就需要重发数据域自注册 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.multimer_init == 1:#已注册过或者开机5分钟之内没有注册 或者注册成功就开始出发多日重发机制 + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t#初始值多加12小时 #初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + return + self.multimer_init = 1 + #设置开始时间戳 + get_timesec = eventMesh.publish("get_regist_time")#一开机初始化为0 没有保存过数据 如果保存过就用保存的时间 + if get_timesec == 0: + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + else: + self.mulit_day_timesec = get_timesec + self.multiDayResend_timer.start(60*60*1000,1,self.multiDayResendTimer_Cb)#一分钟计时 + + def multiDayResendTimer_Cb(self,*argc):#多日重发机制定时器回调函数 + T = 30*24*60*60 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)+MULTI_DAY_RESEND_t#获取时间戳 + + if time_tmp < self.mulit_day_timesec:#如果当前时间戳小于保存的时间戳 + self.mulit_day_timesec = time_tmp + print("time_tmp: self.mulit_day_timesec:\r\n",time_tmp,self.mulit_day_timesec) + + if time_tmp - self.mulit_day_timesec >= MULTI_DAY_RESEND_T:#一个周期的时间到了重发注册一次 + network_state = eventMesh.publish("get_network_state") + print("get_network_state:\r\n",network_state) + if network_state == 0:#网络不正常就不需要重发了等下一个周期 + return + result = self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t + if result == 0: #上报出错了 + return + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + + + def set_telecom_init_state(self,event,msg):#开机5分钟内检查是否有联网 有一次联网就关闭检查 + self.telecom_init_state = msg + + def get_telecom_init_state(self,event,msg): + return self.telecom_init_state + + def get_dmp_power_timer_count(self,event,msg):#开机后限定5分钟内完成自注册 + return REGIST_POWER_ON_TIME + + def get_dmp_power_num(self,event,msg):#开机限定次数最多十次 十次不成功就等下一次开机 或者多日重发机制 + print("get_dmp_power_num:{}".format(self.timerPowerNum)) + return self.timerPowerNum + + def set_dmp_power_num(self,event,msg): + print("set_dmp_power_num:{}".format(msg)) + self.timerPowerNum = msg + def clear_storage_data(self): + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + print("clear_storage_data;{} {}".format(IFEXIST,isStorage)) + + + def telecom_dmp_power_on_init(self):#开机初始化一次检测 + if eventMesh.publish("get_telecom_init_state") == 1:#发送消息获取对应的值 + return + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#开机检查 + if eventMesh.publish("get_telecom_init_state") == 0:#开机初始化一次 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + if status == 0:#恢复出厂过需要清空存储数据 + self.clear_storage_data() + pass + self.telecomTimer.start(1*1000,0,self.fun_cb) + eventMesh.publish("set_telecom_init_state",1) + + def fun_cb(self,*argc): + self.telecom_regeist_infor()#开机初始一次自注册信息 + pass + def telecom_dmp_power_on_count(self):#开机计时判断最多十次 + if eventMesh.publish("get_telecom_init_state") != 1:#在开机五分钟之内只要一次联网正常就不需要再检查是否网络正常去自注册了 + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#10+1 + num = eventMesh.publish("get_dmp_power_num") #开机计时 如果开机5分钟内没有一次网络正常的话 当前开机自注册不生效 等待下一次开机自注册触发 或者触发多日重发机制 + num+=1 + eventMesh.publish("set_dmp_power_num",num)#次数累计加一 + else: + if self.power_on_multiflag == 1: + return + self.power_on_multiflag = 1 + self.multiple_day_resend() + pass + +telecomDmpCb = telecomDmp() + + + + + + + + + + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/cat1Service.py b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/cat1Service.py new file mode 100644 index 000000000..f0d46dc3b --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/cat1Service.py @@ -0,0 +1,682 @@ +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import ql_fs +import pm +import sms + +from usr.EventMesh import eventMesh + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +CAT1_SERVICE_HEAD = 'FE' +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V17" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + +voiceCall.setVolume(10) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +pm.wakelock_lock(lpm_fd) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) +def ExtIntfun(args): + if args[1] == 0: + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + pm.wakelock_unlock(lpm_fd) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' +UDP_CMD_DIAL_NUMB = '1' +UDP_CMD_HUNGUP = '2' +UDP_CMD_ANSWER = '3' +UDP_CMD_CAT1_OTA_UPDATE = '4' +UDP_CMD_SEND_SMS = '5' +UDP_CMD_GET_TIME = '6' +UDP_CMD_GET_RECV_NETWORKSTAT = '7' +UDP_MSG_SMS = '8' +UDP_CMD_ATCMD = '9' +UDP_MSG_CALL_CONNECTED = 'A' +UDP_MSG_CALL_DISCONNECTED = 'B' +UDP_MSG_COMMING_CALL = 'C' +UDP_MSG_REPLY = 'F' + +class Cat1Service: + AP = 0 + STA = 1 + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + return None + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.volte_switch = 1 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb) + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + self.telecom_dmp_switch = 0 + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + return None + + def __socket_init(self): + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + if cmd == "00": + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + if eventMesh.publish("get_volte_switch") == 1: + ret = voiceCall.callStart(str(parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "06": + time=utime.localtime() + zone=utime.getTimeZone() + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + operator = net.operatorName() + signal = net.csqQueryPoll() + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + self.reply_cmd('09',"{}".format(resp.decode())) + else: + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + eventMesh.publish("set_dmp_change_mode",on) + elif cmd == "16": + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": + voiceCall.startDtmf(str(parm),100) + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "AC": + if self.ack_sem==1: + self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): + self.volte_switch = int(msg) + + def get_volte_switch(self,event,msg): + return self.volte_switch + + def china_mobile_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "16": + eventMesh.publish("set_dev_mac",str(parm)) + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + message=self.sms_get_message_info(int(msg)) + if message == -1: + return + message_pdu = sms.decodePdu(message[5],20) + if message_pdu != -1: + message_ref = message[0] + message_total_num = message[1] + message_seq = message[2] + data = message[5] + data_len = len(data) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + message0=sms.searchPduMsg(index) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + sca = self.sms_deal_phone_number(sca) + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + oa = self.sms_deal_phone_number(oa) + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + if ((pdu_tye & 0x40 ) >> 6) == 1: + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2] + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0] + num = message[1] + curren_num = message[2] + data_len = message[4] + sms_data.append(code) + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return -1 + + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + self.__err = 0 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + return slip.router_add(self.ip, self.mask) + + def ipconfig(self): + return slip.ipconfig() + + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.4.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + + def set_network_config(self): + if (self.__net_connected == 1) : + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.1.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0: + return + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + + def stop(self): + slip.destroy() + return 0 + + def __pack_tlv_format(self, head, content): + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + + def __unpack_tlv_format(self, msg): + self.msg = str(msg)[2:] + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + def __Socket_UDP(self, head, content): + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + data=self.send_data_q.get() + self.ack_sem=1 + self.__Socket_UDP_write( data[0], data[1]) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + self.__Socket_UDP_write( data[0], data[1]) + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head, content) + server_addr = ('172.16.1.5',1000) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + self.__wait_resp = 1 + self.__wait_resp = 0 + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + self.send_data_q.put([head,content]) + + def __Socket_Thread(self): + while True: + try: + data=self.__sock.recv(1024) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + self.btmcu_cmd_handler(value[0],value[2]) + else: + clog.error("data error!!") + except Exception as recverr: + if "110" in str(recverr): + self.__err = 1 + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() +cat1service = Cat1Service() + +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + voiceCall.callEnd() + else: + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyDisconnectCall(args[6]) +voiceCall.setCallback(voice_callback) +def checknet_cb(arg): + _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/china_mobile_dmp.py b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/china_mobile_dmp.py new file mode 100644 index 000000000..632476ec2 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/china_mobile_dmp.py @@ -0,0 +1,17 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") + + + + + + + + + + + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/is_need_updata.txt b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/is_need_updata.txt new file mode 100644 index 000000000..e69de29bb diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/main.py b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/main.py new file mode 100644 index 000000000..ab14d8bf5 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/main.py @@ -0,0 +1,27 @@ +import example +import log +from machine import UART + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +# 设置输出到debug口 +uart = UART(UART.UART0, 115200, 8, 0, 1, 0) +log.set_output(uart) +clog = log.getLogger("cat1") + +main_flag = 1 + + +try: + example.exec('/usr/main_init.py') + clog.info("启动main_init成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + clog.error("启动失败!!!!!\r\n".format(e)) + +try: + example.exec('/usr/tcpserver.py') + clog.info("启动tcpserver成功!!!!!\r\n") +except Exception as e: + clog.error("启动失败!!!!!\r\n".format(e)) + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/tcpserver.py b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/tcpserver.py new file mode 100644 index 000000000..afe23b2c1 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/tcpserver.py @@ -0,0 +1,602 @@ +from misc import Power +import usocket +import log +import utime +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import osTimer +import utime +import ql_fs +import binascii +import ujson +import uos + + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +USR_FILE_PATH = "/usr" # +BAK_FILE_PATH = "{}/TmpPyFile".format(USR_FILE_PATH) +BAK_FILE_TMP = "_bak" +CAT1_SERVICE_HEAD = "FE" +CAT1_FILE_DATA_HEAD = "FF" +CAT1_REPLAY_STATE="00" +CAT1_CREAT_DIR_FAILE= "01" +CAT1_CREAT_DIR_OK= "02" +CAT1_NO_REPLAY_OTA_OK= "03" +CAT1_WRITE_FILE_SUCC= "04" +CAT1_WRITE_FILE_ERROR = "05" +CAT1_CRC_ERROR = "06" +CAT1_SEND_HEAD_ERR = "07" +CAT1_OTA_TIMEOUT_BLE_NO_REPLAY = "08" +CAT1_CREAT_FILE_ERROR = "09" +CAT1_CREAT_FILE_SUCC = "0A" +CAT1_ALLPY_FILE_TRANSFER_END = "0B" +CAT1_REPLAY_OTA_SUCC = "0C" +CAT1_REPLAY_OTA_FALIE = "0D" +CAT1_REPLAY_FILE_SIZE_OK = "0E" +CAT1_REPLAY_FILE_SIZE_ERR = "0F" +CAT1_REPLAY_OTA_END_FAILE = "10" +CAT1_NEED_UPDATE_OTA = "11" +CAT1_TCP_STOP_OTA = 0 +CAT1_TCP_START_OTA = 1 +CAT1_TCP_START_SEND_SINGLE_FILE_INFO= 2 +CAT1_TCP_START_SEND_FILE_DATA= 3 +CAT1_TCP_START_OTA_FAILE = 4 +CAT1_TCP_START_OTA_SUCC = 5 +CAT1_TCP_START_SEND_ALLFILE_FINESH = 6 +CAT1_TCP_SEND_SINGLE_FINESH = 7 +CAT1_TCP_START_ERROR_INFO = 255 + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) +FILE_TRANSFER_TIMEOUT=60 +class TcpServiceInit: + AP = 0 + STA = 1 + + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.Cat1FileState = 0 + self.Cat1FileReplayBle = 0 + self.Cat1TimeCount = 0 + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer = osTimer() + self.Cat1OtaTimeOut = osTimer() + self.crc_err = 0 + self.allPyRecvFlag = 0 + self.ota_state =0 + self.ota_bstate =0 + self.fileNameTmp = "" + self.fileNameList = [] + self.fileSizeList = [] + self.fileSize = 0 + self.updateTimer = osTimer() + self.updateTimerCount = 0 + self.updateTimerFlag = 0 + self.sock = None + self.bakFlag = "0" + self.conn= None + self.__sock_file = None + self.__sock_file = self.__socket_file_init() + self.__thread_file = _thread.start_new_thread(self.__Socket_File_Thread, ()) + self.conn_thread=_thread.start_new_thread(self._client_conn_proc, ()) + + def __pack_tlv_format(self, head, content): + head1 = head + content1 = content + if len(content1) == 0 or len(content1) > 9999 or len(head1) != 2: + return -1 + len_str ='%04d' % len(content1) + tlv_pack = CAT1_SERVICE_HEAD+head1+len_str+content1 + return tlv_pack + + def __unpack_tlv_format(self, msg): + msg_tmp = str(msg)[2:] + tag = msg_tmp[0:2] + length = msg_tmp[2:6] + value = msg_tmp[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != msg_tmp[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + + def __socket_file_init(self): + self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP_SER) + self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5001) + self.sock.bind(bind_addr) + self.sock.listen(10) + return self.sock + + def __Socket_TCP_file_noreply(self, head, content): + head1 = head + content1 = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head1,content1) + if msg == -1: + return 0 + try: + self.conn.send(msg) + except Exception as e: + clog.info("self.__sock_file error {}".format(e)) + return 0 + + def _client_conn_proc(self): + while True: + if self.conn==None: + utime.sleep_ms(20) + continue + try: + data = self.conn.recv(1024) + if not data: + clog.info("__Socket_File_Thread data null:\r\n") + else: + self.src_data(data.decode('uft-8')) + except: + self.conn.close() + break + + def __Socket_File_Thread(self): + while True: + try : + cli_conn, cli_ip_addr, cli_port = self.__sock_file.accept() + self.conn=cli_conn + clog.info('[serveice] accept a client: %s, %s' % (cli_ip_addr, cli_port)) + except : + utime.sleep_ms(20) + + def cat1FileTimerCb(self,*argc): + clog.info("timer test\r\n") + if self.Cat1PyFileTimout > 0: + self.Cat1PyFileTimout-=1 + if self.Cat1PyFileTimout == 0: + self.Cat1PyFileTimout = 0 + self.Cat1FileState = 0 + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_OTA_TIMEOUT_BLE_NO_REPLAY,"ota error") #结束文件接收不完整的 + self.Cat1FileTransTimer.stop() + pass + + def crc_cal(self,msg): + bytes_data = msg.encode('utf-8') + hex_data = binascii.hexlify(bytes_data) + hex_data = hex_data.decode() + data = hex_data + crcValue = 0 + j = 0 + i = 0 + json_state = 0 + crcbuf = 0 + data_len = len(str(data)) + try: + if data_len % 2 != 0: + json_state = 0 + return [json_state,crcbuf] + except Exception as e: + json_state = 0 + for i in range(data_len): + if j >= data_len: + break + try: + decimal_number = int(str(data[j:j+2]), 16) + crcValue=crcValue+decimal_number + crcValue = crcValue&0xff + except Exception as e: + clog.info("crc_cal") + j+=2 + crcbuf = crcValue%256 + crcbuf = 256-crcbuf + crcbuf = crcbuf%256 + return [json_state,"%02x"%(crcbuf)] + def deleteTmpFile(self): + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + ql_fs.rmdirs(BAK_FILE_PATH) + + def deleteUsrTmpFile(self): + return + + def src_data(self,data): + if self.updateTimerFlag == 0: + self.updateTimerFlag = 1 + self.updateTimer.stop() + msg = "" + json_state = 0 + try: + msg = ujson.loads(data) + json_state = 1 + except Exception as e: + json_state = 0 + if json_state == 0: + value = self.__unpack_tlv_format(data) + self.cmd_data(value[0],value[2]) + return + else: + self.file_data(msg) + pass + def cmd_data(self,cmd,parm): + if cmd == "01": + self.bakFlag = str(parm) + pass + def file_data(self,msg): + if "Code" in msg: + Code = int(msg["Code"]) + if Code == CAT1_TCP_STOP_OTA: + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_OTA: + self.ota_state =0 + self.ota_bstate =0 + self.allPyRecvFlag = 0 + self.fileNameList = [] + self.fileSizeList = [] + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.deleteUsrTmpFile() + self.Cat1OtaTimeOut.stop() + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + mk_dir_state = 0 + if check_dir == True: + try: + self.deleteTmpFile() + except Exception as e: + clog.info("移除失败\r\n") + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + if check_dir == False: + try: + ql_fs.mkdirs(BAK_FILE_PATH) + mk_dir_state = 1 + except Exception as e: + mk_dir_state = 0 + else: + mk_dir_state = 1 + if mk_dir_state == 0: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat dir error!") + else: + self.Cat1FileState = 1 + self.fileNameList = [] + self.fileSizeList = [] + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer.stop() + self.Cat1FileTransTimer.start(1000,1,self.cat1FileTimerCb) + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_OK,"creat dir success!") + + elif Code == CAT1_TCP_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.fileNameTmp = str(msg["fileName"]) + self.fileSize = msg["fileSize"] + self.fileNameList = msg["fileNameList"] + path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + check_touch = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if check_touch == True: + try: + uos.remove("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + except Exception as e: + clog.info("移除文件失败\r\n") + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"1creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"1creat file or dir err!") + else: + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.crc_err = 0 + + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"2creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"2creat file or dir err!") + + + elif Code == CAT1_TCP_START_SEND_FILE_DATA and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + if len(self.fileNameTmp) == 0: + return + data = msg["data"] + if len(data) == 0: + return + tmpdata = str(data) + head = tmpdata[0:2] + if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8: + clog.info("head {}\r\n".format(head)) + self.__Socket_TCP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!") + return + datalen = str(tmpdata[2:6]) + datalen = int("0x" + datalen, 16) + data_buf = tmpdata[6:] + data_buf = data_buf[:-2] + crc = tmpdata[-2:] + if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"crc error or data null!") + return + data = str(data_buf) + path = "{}/{}".format(BAK_FILE_PATH,str(self.fileNameTmp)) + try: + with open(path,"a") as fd: + fd.write(data) + fd.close() + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_SUCC,"write file success!") + + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"write file error!") + + elif Code == CAT1_TCP_START_OTA_FAILE and self.Cat1FileState == 1: + self.allPyRecvFlag = 0 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"OTA FAILE") + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1: + if self.bakFlag == "0": + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + try: + copy_state = 1 + compare_flag = 1 + copy_flag = 0 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("copy file \r\n") + else: + compare_flag = 0 + break + except Exception as e: + clog.info("copy file \r\n") + + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_state == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_START_OTA_SUCC and self.Cat1FileState == 1: + if self.bakFlag == "0": + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + if self.allPyRecvFlag == 0: + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + try: + copy_state = 1 + compare_flag = 1 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("file\r\n") + else: + compare_flag = 0 + break + + except Exception as e: + clog.info("file\r\n") + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_bstate = 1 + self.conn.close() + self.Cat1OtaTimeOut.start(10000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_bstate == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_SEND_SINGLE_FINESH and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + tmp_file = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if tmp_file == True: + file_size = ql_fs.path_getsize("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if self.fileSize != file_size: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + else: + if self.bakFlag == "0": + dst_path = "{}/{}".format(USR_FILE_PATH,self.fileNameTmp) + src_path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + ret = False + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错 yichu!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + return + else: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错!!!!!!!!!!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok") + return + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file copy ok") + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"creat file or dir err!") + pass + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat file or dir error!") + pass + else: + if self.Cat1FileState == 0: + if self.Cat1FileReplayBle == 1: + return + self.Cat1FileReplayBle = 1 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!") + self.Cat1FileState == 0 + self.Cat1FileTransTimer.stop() + self.Cat1PyFileTimout = 0 + self.fileNameList=[] + self.deleteTmpFile() + self.deleteUsrTmpFile() + + def otaTimeOut(self,*argc): + clog.info("重启成功!!!!!!!!\r\n") + +TcpService = TcpServiceInit() + + diff --git a/code/sdk/files/leiniao/fs/user/system/cat1otaudp/telecom_dmp.py b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/telecom_dmp.py new file mode 100644 index 000000000..f60e74899 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/system/cat1otaudp/telecom_dmp.py @@ -0,0 +1,5 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") diff --git a/code/sdk/files/leiniao/fs/user/update/test2.txt b/code/sdk/files/leiniao/fs/user/update/test2.txt new file mode 100644 index 000000000..69ead2249 --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/update/test2.txt @@ -0,0 +1 @@ +this is test2 file \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/userdata/readme.txt b/code/sdk/files/leiniao/fs/user/userdata/readme.txt new file mode 100644 index 000000000..c41b29b3a --- /dev/null +++ b/code/sdk/files/leiniao/fs/user/userdata/readme.txt @@ -0,0 +1 @@ +Óû§Êý¾Ý·¾¶ \ No newline at end of file diff --git a/code/sdk/files/leiniao/fs/user/video/46x46_sad.mp4 b/code/sdk/files/leiniao/fs/user/video/46x46_sad.mp4 new file mode 100644 index 000000000..023e16db7 Binary files /dev/null and b/code/sdk/files/leiniao/fs/user/video/46x46_sad.mp4 differ diff --git a/code/sdk/files/n9/fs/user/dial/res_dial/distortion.bin b/code/sdk/files/n9/fs/user/dial/res_dial/distortion.bin new file mode 100644 index 000000000..708f76a1c Binary files /dev/null and b/code/sdk/files/n9/fs/user/dial/res_dial/distortion.bin differ diff --git a/code/sdk/files/n9/fs/user/dial/res_dial/eagle.bin b/code/sdk/files/n9/fs/user/dial/res_dial/eagle.bin new file mode 100644 index 000000000..b9f84712c Binary files /dev/null and b/code/sdk/files/n9/fs/user/dial/res_dial/eagle.bin differ diff --git a/code/sdk/files/n9/fs/user/dial/res_dial/lake.bin b/code/sdk/files/n9/fs/user/dial/res_dial/lake.bin new file mode 100644 index 000000000..59c656bde Binary files /dev/null and b/code/sdk/files/n9/fs/user/dial/res_dial/lake.bin differ diff --git a/code/sdk/files/n9/fs/user/dial/res_dial/science.bin b/code/sdk/files/n9/fs/user/dial/res_dial/science.bin new file mode 100644 index 000000000..5c7fb594e Binary files /dev/null and b/code/sdk/files/n9/fs/user/dial/res_dial/science.bin differ diff --git a/code/sdk/files/n9/fs/user/dial/res_dial/vibrantnumber.bin b/code/sdk/files/n9/fs/user/dial/res_dial/vibrantnumber.bin new file mode 100644 index 000000000..d204bd6ff Binary files /dev/null and b/code/sdk/files/n9/fs/user/dial/res_dial/vibrantnumber.bin differ diff --git a/code/sdk/files/n9/fs/user/music/ring/alarm.mp3 b/code/sdk/files/n9/fs/user/music/ring/alarm.mp3 new file mode 100644 index 000000000..106054d42 Binary files /dev/null and b/code/sdk/files/n9/fs/user/music/ring/alarm.mp3 differ diff --git a/code/sdk/files/n9/fs/user/music/ring/calling.mp3 b/code/sdk/files/n9/fs/user/music/ring/calling.mp3 new file mode 100644 index 000000000..f0de98f2d Binary files /dev/null and b/code/sdk/files/n9/fs/user/music/ring/calling.mp3 differ diff --git a/code/sdk/files/n9/fs/user/music/ring/findwatch.mp3 b/code/sdk/files/n9/fs/user/music/ring/findwatch.mp3 new file mode 100644 index 000000000..2b0a83095 Binary files /dev/null and b/code/sdk/files/n9/fs/user/music/ring/findwatch.mp3 differ diff --git a/code/sdk/files/n9/fs/user/music/ring/ring.mp3 b/code/sdk/files/n9/fs/user/music/ring/ring.mp3 new file mode 100644 index 000000000..94085c2cb Binary files /dev/null and b/code/sdk/files/n9/fs/user/music/ring/ring.mp3 differ diff --git a/code/sdk/files/n9/fs/user/music/test3.txt b/code/sdk/files/n9/fs/user/music/test3.txt new file mode 100644 index 000000000..e56d2dca9 --- /dev/null +++ b/code/sdk/files/n9/fs/user/music/test3.txt @@ -0,0 +1 @@ +this is test3 file \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/res/466x100button.bin b/code/sdk/files/n9/fs/user/res/466x100button.bin new file mode 100644 index 000000000..cf81399fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/466x100button.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/1.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/1.bin new file mode 100644 index 000000000..b2121fe7d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/10.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/10.bin new file mode 100644 index 000000000..2ba1e4bc6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/11.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/11.bin new file mode 100644 index 000000000..3ccfb050e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/12.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/12.bin new file mode 100644 index 000000000..57b2aab36 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/13.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/13.bin new file mode 100644 index 000000000..9b9f5444a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/14.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/14.bin new file mode 100644 index 000000000..44db97035 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/15.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/15.bin new file mode 100644 index 000000000..819398296 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/16.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/16.bin new file mode 100644 index 000000000..bda48ac4e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/17.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/17.bin new file mode 100644 index 000000000..709b664d0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/18.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/18.bin new file mode 100644 index 000000000..1ab941a35 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/19.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/19.bin new file mode 100644 index 000000000..ed758d97c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/2.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/2.bin new file mode 100644 index 000000000..49dffe8da Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/20.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/20.bin new file mode 100644 index 000000000..755fb57c4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/21.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/21.bin new file mode 100644 index 000000000..e3237f236 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/22.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/22.bin new file mode 100644 index 000000000..376aed410 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/23.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/23.bin new file mode 100644 index 000000000..836cf4f55 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/24.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/24.bin new file mode 100644 index 000000000..0f52976a7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/25.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/25.bin new file mode 100644 index 000000000..cdb4c4155 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/26.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/26.bin new file mode 100644 index 000000000..54ddd4089 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/27.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/27.bin new file mode 100644 index 000000000..7662e3950 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/28.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/28.bin new file mode 100644 index 000000000..a5b157b51 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/29.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/29.bin new file mode 100644 index 000000000..ed6add77c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/3.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/3.bin new file mode 100644 index 000000000..cc73f2b1d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/30.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/30.bin new file mode 100644 index 000000000..6053116d2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/31.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/31.bin new file mode 100644 index 000000000..448e0d486 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/32.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/32.bin new file mode 100644 index 000000000..05b441d16 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/33.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/33.bin new file mode 100644 index 000000000..116b7f9f2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/34.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/34.bin new file mode 100644 index 000000000..6ea5637c7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/35.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/35.bin new file mode 100644 index 000000000..30481e8e2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/36.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/36.bin new file mode 100644 index 000000000..6b951574e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/37.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/37.bin new file mode 100644 index 000000000..8321bb85c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/38.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/38.bin new file mode 100644 index 000000000..3512f7a16 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/39.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/39.bin new file mode 100644 index 000000000..b2dc8cd48 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/4.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/4.bin new file mode 100644 index 000000000..f15ce5b61 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/40.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/40.bin new file mode 100644 index 000000000..59cd3a03f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/5.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/5.bin new file mode 100644 index 000000000..bac61f446 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/6.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/6.bin new file mode 100644 index 000000000..47a993a0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/7.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/7.bin new file mode 100644 index 000000000..3321cd8d5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/8.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/8.bin new file mode 100644 index 000000000..1c119166a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/9.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/9.bin new file mode 100644 index 000000000..de647c7ac Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceListening/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/1.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/1.bin new file mode 100644 index 000000000..a92fc4fc2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/10.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/10.bin new file mode 100644 index 000000000..0c7b90798 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/11.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/11.bin new file mode 100644 index 000000000..d30c8c17b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/12.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/12.bin new file mode 100644 index 000000000..3d81526da Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/13.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/13.bin new file mode 100644 index 000000000..d4c6e565b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/14.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/14.bin new file mode 100644 index 000000000..2e4a246fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/15.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/15.bin new file mode 100644 index 000000000..2855cdeea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/16.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/16.bin new file mode 100644 index 000000000..d23aeae05 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/17.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/17.bin new file mode 100644 index 000000000..3a321205c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/18.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/18.bin new file mode 100644 index 000000000..e4d7896fb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/19.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/19.bin new file mode 100644 index 000000000..faced71c4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/2.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/2.bin new file mode 100644 index 000000000..06283f362 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/20.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/20.bin new file mode 100644 index 000000000..5950aaa91 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/21.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/21.bin new file mode 100644 index 000000000..54fdc47fb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/22.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/22.bin new file mode 100644 index 000000000..374f8a95f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/23.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/23.bin new file mode 100644 index 000000000..5a098e165 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/24.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/24.bin new file mode 100644 index 000000000..216b8b766 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/25.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/25.bin new file mode 100644 index 000000000..2b453f467 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/26.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/26.bin new file mode 100644 index 000000000..942ea4156 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/27.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/27.bin new file mode 100644 index 000000000..52bea26f8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/28.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/28.bin new file mode 100644 index 000000000..0a54aa320 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/29.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/29.bin new file mode 100644 index 000000000..a34146459 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/3.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/3.bin new file mode 100644 index 000000000..7f73d2400 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/30.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/30.bin new file mode 100644 index 000000000..90b2dc653 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/31.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/31.bin new file mode 100644 index 000000000..7a76c01c0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/32.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/32.bin new file mode 100644 index 000000000..b48391995 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/33.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/33.bin new file mode 100644 index 000000000..670af9bdb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/34.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/34.bin new file mode 100644 index 000000000..27577ee77 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/35.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/35.bin new file mode 100644 index 000000000..2f8142732 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/36.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/36.bin new file mode 100644 index 000000000..b67eda927 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/37.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/37.bin new file mode 100644 index 000000000..de69c5af1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/38.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/38.bin new file mode 100644 index 000000000..bf93bfeb1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/39.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/39.bin new file mode 100644 index 000000000..63e2e96c3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/4.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/4.bin new file mode 100644 index 000000000..a02f49a0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/40.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/40.bin new file mode 100644 index 000000000..5b8a7972c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/5.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/5.bin new file mode 100644 index 000000000..1a977f3c1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/6.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/6.bin new file mode 100644 index 000000000..cadc92740 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/7.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/7.bin new file mode 100644 index 000000000..972774b0c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/8.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/8.bin new file mode 100644 index 000000000..73d9f07ec Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/9.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/9.bin new file mode 100644 index 000000000..c34499a19 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AIVoiceThinking/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AI_EllWhite.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AI_EllWhite.bin new file mode 100644 index 000000000..9233fbcf9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AI_EllWhite.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecBlack.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecBlack.bin new file mode 100644 index 000000000..3bfd5d2a0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecBlack.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecGreen.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecGreen.bin new file mode 100644 index 000000000..72cfe438c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AI_RecGreen.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/AI_Union.bin b/code/sdk/files/n9/fs/user/res/AIVoice/AI_Union.bin new file mode 100644 index 000000000..1fedfcbd1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/AI_Union.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon.bin b/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon.bin new file mode 100644 index 000000000..67dc31c04 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon_bg.bin b/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon_bg.bin new file mode 100644 index 000000000..252f419a2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/ai_chart_icon_bg.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin new file mode 100644 index 000000000..309fc8b84 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin new file mode 100644 index 000000000..d33714aea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin new file mode 100644 index 000000000..536761bae Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin new file mode 100644 index 000000000..659b638df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin new file mode 100644 index 000000000..0c32be31b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin new file mode 100644 index 000000000..dc693290d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin new file mode 100644 index 000000000..abe058be5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin differ diff --git a/code/sdk/files/n9/fs/user/res/AIVoice/apikey.bin b/code/sdk/files/n9/fs/user/res/AIVoice/apikey.bin new file mode 100644 index 000000000..b2c22b440 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/AIVoice/apikey.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_FAILURE.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_FAILURE.bin new file mode 100644 index 000000000..120b4f221 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_FAILURE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_SUCCESS.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_SUCCESS.bin new file mode 100644 index 000000000..89af5fe16 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_BIND_SUCCESS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_HELP.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_HELP.bin new file mode 100644 index 000000000..07872c9ea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_HELP.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_PAY.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_PAY.bin new file mode 100644 index 000000000..4b0c3ed58 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_PAY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_SETTING.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_SETTING.bin new file mode 100644 index 000000000..f37a192f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_SETTING.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_TRANS.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_TRANS.bin new file mode 100644 index 000000000..89337fab2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_LIST_TRANS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin new file mode 100644 index 000000000..5feb11717 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin b/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin new file mode 100644 index 000000000..a26ed67db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Alarm/alarm_delete.bin b/code/sdk/files/n9/fs/user/res/Alarm/alarm_delete.bin new file mode 100644 index 000000000..33a596c2a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Alarm/alarm_delete.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Alarm/alarm_prompt.bin b/code/sdk/files/n9/fs/user/res/Alarm/alarm_prompt.bin new file mode 100644 index 000000000..ab4e298a8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Alarm/alarm_prompt.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Attention.bin b/code/sdk/files/n9/fs/user/res/Attention.bin new file mode 100644 index 000000000..b8120b857 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Attention.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTHEAR.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTHEAR.bin new file mode 100644 index 000000000..50683b6fe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTHEAR.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_01.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_01.bin new file mode 100644 index 000000000..ecaa9cced Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_01.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_02.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_02.bin new file mode 100644 index 000000000..35a2c4ffa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_02.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_03.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_03.bin new file mode 100644 index 000000000..7059ff88f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_03.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_04.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_04.bin new file mode 100644 index 000000000..4673939dc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_04.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_05.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_05.bin new file mode 100644 index 000000000..b7cef36fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_05.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_06.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_06.bin new file mode 100644 index 000000000..571ef4dad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_06.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_07.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_07.bin new file mode 100644 index 000000000..09c701ce0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_07.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_08.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_08.bin new file mode 100644 index 000000000..7113d0402 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_08.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_09.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_09.bin new file mode 100644 index 000000000..ddcfd6f7f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_09.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_10.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_10.bin new file mode 100644 index 000000000..d5628f4a9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_11.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_11.bin new file mode 100644 index 000000000..682e4972c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_12.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_12.bin new file mode 100644 index 000000000..c5b48dc7b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_13.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_13.bin new file mode 100644 index 000000000..643d9d285 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_14.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_14.bin new file mode 100644 index 000000000..299b25fca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_15.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_15.bin new file mode 100644 index 000000000..8a390d216 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_16.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_16.bin new file mode 100644 index 000000000..289b89880 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_IMAGE_16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUETOOTH_TITLE.bin b/code/sdk/files/n9/fs/user/res/BLUETOOTH_TITLE.bin new file mode 100644 index 000000000..b4e8aa8bd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUETOOTH_TITLE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BLUE_ADD.bin b/code/sdk/files/n9/fs/user/res/BLUE_ADD.bin new file mode 100644 index 000000000..fe9abe815 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BLUE_ADD.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Battery/Battery_Black.bin b/code/sdk/files/n9/fs/user/res/Battery/Battery_Black.bin new file mode 100644 index 000000000..73eefe331 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Battery/Battery_Black.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Battery/Battery_White.bin b/code/sdk/files/n9/fs/user/res/Battery/Battery_White.bin new file mode 100644 index 000000000..3f1a32e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Battery/Battery_White.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Battery/Icon.bin b/code/sdk/files/n9/fs/user/res/Battery/Icon.bin new file mode 100644 index 000000000..c79f063ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Battery/Icon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/Error.bin b/code/sdk/files/n9/fs/user/res/Blood/Error.bin new file mode 100644 index 000000000..b8120b857 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/Error.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/SaO2.bin b/code/sdk/files/n9/fs/user/res/Blood/SaO2.bin new file mode 100644 index 000000000..7f77e35dc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/SaO2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/Vector.bin b/code/sdk/files/n9/fs/user/res/Blood/Vector.bin new file mode 100644 index 000000000..ea9887da9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/Vector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/beijing.bin b/code/sdk/files/n9/fs/user/res/Blood/beijing.bin new file mode 100644 index 000000000..960d11214 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/beijing.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/boutton.bin b/code/sdk/files/n9/fs/user/res/Blood/boutton.bin new file mode 100644 index 000000000..5be4c17d5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/boutton.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_01.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_01.bin new file mode 100644 index 000000000..f9c6c8755 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_01.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_02.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_02.bin new file mode 100644 index 000000000..e45d77821 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_02.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_03.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_03.bin new file mode 100644 index 000000000..554762fcf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_03.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_04.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_04.bin new file mode 100644 index 000000000..a6675c179 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_04.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_05.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_05.bin new file mode 100644 index 000000000..cf02766ff Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_05.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_06.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_06.bin new file mode 100644 index 000000000..ff9f288ad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_06.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_07.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_07.bin new file mode 100644 index 000000000..a3ddd4c98 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_07.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_08.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_08.bin new file mode 100644 index 000000000..0a0058155 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_08.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_09.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_09.bin new file mode 100644 index 000000000..a2f1c1757 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_09.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_10.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_10.bin new file mode 100644 index 000000000..a03297ddc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_11.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_11.bin new file mode 100644 index 000000000..e3b6f5cdb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_12.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_12.bin new file mode 100644 index 000000000..dc45505c6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_13.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_13.bin new file mode 100644 index 000000000..28b8fd61f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_14.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_14.bin new file mode 100644 index 000000000..401cc59e0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_15.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_15.bin new file mode 100644 index 000000000..5cc60cb4b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_16.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_16.bin new file mode 100644 index 000000000..611b941f8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_17.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_17.bin new file mode 100644 index 000000000..de5ceae61 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_18.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_18.bin new file mode 100644 index 000000000..d1603a22e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_19.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_19.bin new file mode 100644 index 000000000..d32af4968 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_20.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_20.bin new file mode 100644 index 000000000..bd92461c4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_21.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_21.bin new file mode 100644 index 000000000..d9338e2b5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_22.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_22.bin new file mode 100644 index 000000000..1ab150206 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_23.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_23.bin new file mode 100644 index 000000000..0a568e9bd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_24.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_24.bin new file mode 100644 index 000000000..b88c0bcfa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_25.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_25.bin new file mode 100644 index 000000000..a1ba31e2d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_26.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_26.bin new file mode 100644 index 000000000..c5f255f81 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_27.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_27.bin new file mode 100644 index 000000000..053a7f184 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_28.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_28.bin new file mode 100644 index 000000000..a159f785d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_29.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_29.bin new file mode 100644 index 000000000..8a1228fff Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_30.bin b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_30.bin new file mode 100644 index 000000000..85fbe4bbd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Blood/spo2_gif/spo2_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/BringhtnessContuolVector.bin b/code/sdk/files/n9/fs/user/res/BringhtnessContuolVector.bin new file mode 100644 index 000000000..21d20587e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/BringhtnessContuolVector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/CHECKBOX_OFF.bin b/code/sdk/files/n9/fs/user/res/CHECKBOX_OFF.bin new file mode 100644 index 000000000..02f4511df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/CHECKBOX_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/CHECKBOX_ON.bin b/code/sdk/files/n9/fs/user/res/CHECKBOX_ON.bin new file mode 100644 index 000000000..1212ce47e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/CHECKBOX_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/CLOSE_RING_CLOCK.bin b/code/sdk/files/n9/fs/user/res/CLOSE_RING_CLOCK.bin new file mode 100644 index 000000000..f5730e0ee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/CLOSE_RING_CLOCK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin b/code/sdk/files/n9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin new file mode 100644 index 000000000..18ac42a93 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle1.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle1.bin new file mode 100644 index 000000000..12be1e6c9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle2.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle2.bin new file mode 100644 index 000000000..20a126191 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle3.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle3.bin new file mode 100644 index 000000000..4814d58ff Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/circle3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/devicebinding.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/devicebinding.bin new file mode 100644 index 000000000..96a988ec9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/devicebinding.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/dingwei.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/dingwei.bin new file mode 100644 index 000000000..080ccba69 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/dingwei.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/faild.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/faild.bin new file mode 100644 index 000000000..1afb2d367 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/faild.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/fieldcheckin.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/fieldcheckin.bin new file mode 100644 index 000000000..695c29597 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/fieldcheckin.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/notask.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/notask.bin new file mode 100644 index 000000000..4638e1b9e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/notask.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/personalinformation.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/personalinformation.bin new file mode 100644 index 000000000..5e882bcc2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/personalinformation.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/remind.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/remind.bin new file mode 100644 index 000000000..c9f5b5637 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/remind.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/reposition.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/reposition.bin new file mode 100644 index 000000000..ec6cd7de6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/reposition.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/success.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/success.bin new file mode 100644 index 000000000..fd14c59e8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/success.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/task.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/task.bin new file mode 100644 index 000000000..22adbb33b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/task.bin differ diff --git a/code/sdk/files/n9/fs/user/res/ChinamobileIOT/worktask.bin b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/worktask.bin new file mode 100644 index 000000000..c290c4123 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/ChinamobileIOT/worktask.bin differ diff --git a/code/sdk/files/n9/fs/user/res/DELETE.bin b/code/sdk/files/n9/fs/user/res/DELETE.bin new file mode 100644 index 000000000..0d5167531 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/DELETE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Ellipse_37.bin b/code/sdk/files/n9/fs/user/res/Ellipse_37.bin new file mode 100644 index 000000000..a6413e9e4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Ellipse_37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf b/code/sdk/files/n9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf new file mode 100644 index 000000000..25069dad0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygen.bin b/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygen.bin new file mode 100644 index 000000000..61d09ccab Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygen.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygenCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygenCard.bin new file mode 100644 index 000000000..4a646e6fd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/BloodOxygenCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/CARD_ACTIVITY.bin b/code/sdk/files/n9/fs/user/res/MainCard/CARD_ACTIVITY.bin new file mode 100644 index 000000000..45a459dac Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/CARD_ACTIVITY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/CARD_ADD.bin b/code/sdk/files/n9/fs/user/res/MainCard/CARD_ADD.bin new file mode 100644 index 000000000..f308fc020 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/CARD_ADD.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/CARD_DEL.bin b/code/sdk/files/n9/fs/user/res/MainCard/CARD_DEL.bin new file mode 100644 index 000000000..0c0adcbd8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/CARD_DEL.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/CompassCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/CompassCard.bin new file mode 100644 index 000000000..e5a311a5e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/CompassCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/HeartCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/HeartCard.bin new file mode 100644 index 000000000..b6f4bce02 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/HeartCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/MusicCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/MusicCard.bin new file mode 100644 index 000000000..c8d32c198 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/MusicCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/SetMainCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/SetMainCard.bin new file mode 100644 index 000000000..f52c3ccf2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/SetMainCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/SleepCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/SleepCard.bin new file mode 100644 index 000000000..c08d559f4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/SleepCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/SportCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/SportCard.bin new file mode 100644 index 000000000..7b1a5ea69 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/SportCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/Training.bin b/code/sdk/files/n9/fs/user/res/MainCard/Training.bin new file mode 100644 index 000000000..3fe1da28d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/Training.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/TrainingCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/TrainingCard.bin new file mode 100644 index 000000000..949a7dda2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/TrainingCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/WeatherCard.bin b/code/sdk/files/n9/fs/user/res/MainCard/WeatherCard.bin new file mode 100644 index 000000000..2e0b50616 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/WeatherCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/clock.bin b/code/sdk/files/n9/fs/user/res/MainCard/clock.bin new file mode 100644 index 000000000..ac22cee43 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/clock.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/compass.bin b/code/sdk/files/n9/fs/user/res/MainCard/compass.bin new file mode 100644 index 000000000..2ac20faf2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/compass.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/disturbicon.bin b/code/sdk/files/n9/fs/user/res/MainCard/disturbicon.bin new file mode 100644 index 000000000..21226544d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/disturbicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/dropdown.bin b/code/sdk/files/n9/fs/user/res/MainCard/dropdown.bin new file mode 100644 index 000000000..d4305ccd9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/dropdown.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/heart.bin b/code/sdk/files/n9/fs/user/res/MainCard/heart.bin new file mode 100644 index 000000000..3b3bdd67a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/heart.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MainCard/player.bin b/code/sdk/files/n9/fs/user/res/MainCard/player.bin new file mode 100644 index 000000000..ad44132d4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MainCard/player.bin differ diff --git a/code/sdk/files/n9/fs/user/res/MotionRecognition/MotionRecognition.bin b/code/sdk/files/n9/fs/user/res/MotionRecognition/MotionRecognition.bin new file mode 100644 index 000000000..91abee4d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/MotionRecognition/MotionRecognition.bin differ diff --git a/code/sdk/files/n9/fs/user/res/OK.bin b/code/sdk/files/n9/fs/user/res/OK.bin new file mode 100644 index 000000000..e6c2d7a64 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/OK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/POP_UP_CLOCK.bin b/code/sdk/files/n9/fs/user/res/POP_UP_CLOCK.bin new file mode 100644 index 000000000..eb25f0624 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/POP_UP_CLOCK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/0.bin b/code/sdk/files/n9/fs/user/res/Phone/0.bin new file mode 100644 index 000000000..015cb149e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/0.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/1.bin b/code/sdk/files/n9/fs/user/res/Phone/1.bin new file mode 100644 index 000000000..64eace654 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/2.bin b/code/sdk/files/n9/fs/user/res/Phone/2.bin new file mode 100644 index 000000000..4bb124f1b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/3.bin b/code/sdk/files/n9/fs/user/res/Phone/3.bin new file mode 100644 index 000000000..b2a915897 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/4.bin b/code/sdk/files/n9/fs/user/res/Phone/4.bin new file mode 100644 index 000000000..4305e5edb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/5.bin b/code/sdk/files/n9/fs/user/res/Phone/5.bin new file mode 100644 index 000000000..301bd19d1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/6.bin b/code/sdk/files/n9/fs/user/res/Phone/6.bin new file mode 100644 index 000000000..b37f07a88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/7.bin b/code/sdk/files/n9/fs/user/res/Phone/7.bin new file mode 100644 index 000000000..1d2b72696 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/8.bin b/code/sdk/files/n9/fs/user/res/Phone/8.bin new file mode 100644 index 000000000..527ee5d34 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/9.bin b/code/sdk/files/n9/fs/user/res/Phone/9.bin new file mode 100644 index 000000000..f51b8f2a0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Phone_Call.bin b/code/sdk/files/n9/fs/user/res/Phone/Phone_Call.bin new file mode 100644 index 000000000..b5fb6744c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Phone_Call.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Phone_Ring.bin b/code/sdk/files/n9/fs/user/res/Phone/Phone_Ring.bin new file mode 100644 index 000000000..3934d2d68 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Phone_Ring.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/DialingMethod.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/DialingMethod.bin new file mode 100644 index 000000000..5b7cd092d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/DialingMethod.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin new file mode 100644 index 000000000..a3b00a080 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/TelephoneLine.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/TelephoneLine.bin new file mode 100644 index 000000000..209fcae25 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/TelephoneLine.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/calllogdelete.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/calllogdelete.bin new file mode 100644 index 000000000..33a596c2a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/calllogdelete.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/phone.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/phone.bin new file mode 100644 index 000000000..81045ff1d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/phone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/Telephone/watch.bin b/code/sdk/files/n9/fs/user/res/Phone/Telephone/watch.bin new file mode 100644 index 000000000..4f97b654b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/Telephone/watch.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/boy.bin b/code/sdk/files/n9/fs/user/res/Phone/boy.bin new file mode 100644 index 000000000..06dd386ca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/boy.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/call.bin b/code/sdk/files/n9/fs/user/res/Phone/call.bin new file mode 100644 index 000000000..82f5574d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/call.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/callanswer.bin b/code/sdk/files/n9/fs/user/res/Phone/callanswer.bin new file mode 100644 index 000000000..dcd059284 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/callanswer.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/callhangup.bin b/code/sdk/files/n9/fs/user/res/Phone/callhangup.bin new file mode 100644 index 000000000..12338573a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/callhangup.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/del.bin b/code/sdk/files/n9/fs/user/res/Phone/del.bin new file mode 100644 index 000000000..93acb6361 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/del.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/girl.bin b/code/sdk/files/n9/fs/user/res/Phone/girl.bin new file mode 100644 index 000000000..94082bdca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/girl.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/little-boy.bin b/code/sdk/files/n9/fs/user/res/Phone/little-boy.bin new file mode 100644 index 000000000..34c720726 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/little-boy.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/little-girl.bin b/code/sdk/files/n9/fs/user/res/Phone/little-girl.bin new file mode 100644 index 000000000..d59cd7d62 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/little-girl.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/microphone-no.bin b/code/sdk/files/n9/fs/user/res/Phone/microphone-no.bin new file mode 100644 index 000000000..d2df91a1e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/microphone-no.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/microphone.bin b/code/sdk/files/n9/fs/user/res/Phone/microphone.bin new file mode 100644 index 000000000..7c719cfca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/microphone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/no_sim.bin b/code/sdk/files/n9/fs/user/res/Phone/no_sim.bin new file mode 100644 index 000000000..85f9d7dba Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/no_sim.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/phone-call.bin b/code/sdk/files/n9/fs/user/res/Phone/phone-call.bin new file mode 100644 index 000000000..03acc44d6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/phone-call.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/phone-call1.bin b/code/sdk/files/n9/fs/user/res/Phone/phone-call1.bin new file mode 100644 index 000000000..0f8ea222a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/phone-call1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/phone-off-round.bin b/code/sdk/files/n9/fs/user/res/Phone/phone-off-round.bin new file mode 100644 index 000000000..a08c7895a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/phone-off-round.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/phone-off.bin b/code/sdk/files/n9/fs/user/res/Phone/phone-off.bin new file mode 100644 index 000000000..12338573a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/phone-off.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/phonedir.bin b/code/sdk/files/n9/fs/user/res/Phone/phonedir.bin new file mode 100644 index 000000000..f123d8b8f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/phonedir.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/voice-no.bin b/code/sdk/files/n9/fs/user/res/Phone/voice-no.bin new file mode 100644 index 000000000..90de78f2e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/voice-no.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Phone/voice.bin b/code/sdk/files/n9/fs/user/res/Phone/voice.bin new file mode 100644 index 000000000..59f2276a4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Phone/voice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RIGHT.bin b/code/sdk/files/n9/fs/user/res/RIGHT.bin new file mode 100644 index 000000000..2dbcf5f64 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RIGHT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RING_CLOCK.bin b/code/sdk/files/n9/fs/user/res/RING_CLOCK.bin new file mode 100644 index 000000000..f5a58b003 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RING_CLOCK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/1.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/10.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/11.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/12.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/13.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/14.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/15.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/16.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/17.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/18.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/19.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/2.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/20.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/21.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/22.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/23.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/24.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/25.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/26.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/27.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/28.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/29.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/3.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/30.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/4.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/5.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/6.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/7.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/8.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/9.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ReBoot/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/1.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/10.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/11.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/12.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/13.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/14.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/15.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/16.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/17.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/18.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/19.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/2.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/20.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/21.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/22.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/23.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/24.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/25.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/26.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/27.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/28.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/29.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/3.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/30.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/4.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/5.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/6.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/7.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/8.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/9.bin b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RebootAndShutDown/ShutDown/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCGroupList.bin b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCGroupList.bin new file mode 100644 index 000000000..9ba40f7ef Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCGroupList.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCVector.bin b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCVector.bin new file mode 100644 index 000000000..be501a130 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RTCVector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin new file mode 100644 index 000000000..4760aa90d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin differ diff --git a/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin new file mode 100644 index 000000000..fc98a59b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SELECTION_BOX.bin b/code/sdk/files/n9/fs/user/res/SELECTION_BOX.bin new file mode 100644 index 000000000..ec6a5eea1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SELECTION_BOX.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SETTING_BACKGROUND.bin b/code/sdk/files/n9/fs/user/res/SETTING_BACKGROUND.bin new file mode 100644 index 000000000..abffa0ed8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SETTING_BACKGROUND.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SETTING_NEXT.bin b/code/sdk/files/n9/fs/user/res/SETTING_NEXT.bin new file mode 100644 index 000000000..1a68bf4f1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SETTING_NEXT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOff.bin b/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOff.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOff.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOn.bin b/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOn.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SYSTEM_CheckOn.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-E.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-E.bin new file mode 100644 index 000000000..f6fe312e4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-E.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-F.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-F.bin new file mode 100644 index 000000000..7b3c3a859 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/Battery-F.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/SaveEle.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/SaveEle.bin new file mode 100644 index 000000000..59d8ed98a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/SaveEle.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Error.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Error.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Error.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Right.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Right.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/Save_Right.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/finger.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/finger.bin new file mode 100644 index 000000000..9cbfbac9d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/finger.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/finger2.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/finger2.bin new file mode 100644 index 000000000..b08089fff Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/finger2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Save_Ele/wathch.bin b/code/sdk/files/n9/fs/user/res/Save_Ele/wathch.bin new file mode 100644 index 000000000..7ae6bf2ac Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Save_Ele/wathch.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin b/code/sdk/files/n9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin new file mode 100644 index 000000000..31bf814aa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Schedule/schedule_no_data.bin b/code/sdk/files/n9/fs/user/res/Schedule/schedule_no_data.bin new file mode 100644 index 000000000..7f9b5f0c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Schedule/schedule_no_data.bin differ diff --git a/code/sdk/files/n9/fs/user/res/SedentaryReminder/SedentaryReminder.bin b/code/sdk/files/n9/fs/user/res/SedentaryReminder/SedentaryReminder.bin new file mode 100644 index 000000000..e721061af Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/SedentaryReminder/SedentaryReminder.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/alarmicon.bin b/code/sdk/files/n9/fs/user/res/Sleep/alarmicon.bin new file mode 100644 index 000000000..f49a20dbf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/alarmicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/back.bin b/code/sdk/files/n9/fs/user/res/Sleep/back.bin new file mode 100644 index 000000000..976b16634 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/back.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/goodmorning.bin b/code/sdk/files/n9/fs/user/res/Sleep/goodmorning.bin new file mode 100644 index 000000000..a47c4320d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/goodmorning.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/line.bin b/code/sdk/files/n9/fs/user/res/Sleep/line.bin new file mode 100644 index 000000000..2f1218c8a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/line.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/room.bin b/code/sdk/files/n9/fs/user/res/Sleep/room.bin new file mode 100644 index 000000000..481b31a43 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/room.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/sunny.bin b/code/sdk/files/n9/fs/user/res/Sleep/sunny.bin new file mode 100644 index 000000000..1e7c086ee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/sunny.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/transverse_line.bin b/code/sdk/files/n9/fs/user/res/Sleep/transverse_line.bin new file mode 100644 index 000000000..c76a3d11a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/transverse_line.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleep/up.bin b/code/sdk/files/n9/fs/user/res/Sleep/up.bin new file mode 100644 index 000000000..96f896968 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleep/up.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Sleepmode/sleepmode.bin b/code/sdk/files/n9/fs/user/res/Sleepmode/sleepmode.bin new file mode 100644 index 000000000..81c306714 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Sleepmode/sleepmode.bin differ diff --git a/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_OFF.bin b/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_OFF.bin new file mode 100644 index 000000000..d96672bf3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_ON.bin b/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_ON.bin new file mode 100644 index 000000000..99056d1b6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/TOGGLEBUTTON_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/TRUE_ADD.bin b/code/sdk/files/n9/fs/user/res/TRUE_ADD.bin new file mode 100644 index 000000000..bc6eb297f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/TRUE_ADD.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ball.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ball.bin new file mode 100644 index 000000000..2058eb59c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ball.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Dance.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Dance.bin new file mode 100644 index 000000000..fe79dab2f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Dance.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Fitness.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Fitness.bin new file mode 100644 index 000000000..532aba7e6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Fitness.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin new file mode 100644 index 000000000..cd011d567 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ice.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ice.bin new file mode 100644 index 000000000..3edcf807f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Ice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Jumprope.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Jumprope.bin new file mode 100644 index 000000000..4008537cc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Jumprope.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Limit.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Limit.bin new file mode 100644 index 000000000..77dc84c45 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Limit.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Mountaineering.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Mountaineering.bin new file mode 100644 index 000000000..d556e7e1c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Mountaineering.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Other.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Other.bin new file mode 100644 index 000000000..6d628c943 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Other.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Pingpong.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Pingpong.bin new file mode 100644 index 000000000..90bdb3e7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Pingpong.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Rest.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Rest.bin new file mode 100644 index 000000000..6c222eb69 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Rest.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding.bin new file mode 100644 index 000000000..9afc52395 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding_60.bin new file mode 100644 index 000000000..acdd2a499 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Riding_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running.bin new file mode 100644 index 000000000..97573a07f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running_60.bin new file mode 100644 index 000000000..0d9c011a3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Running_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Swimming.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Swimming.bin new file mode 100644 index 000000000..03fcbe38c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/Swimming.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking.bin new file mode 100644 index 000000000..2d23784dd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking_60.bin new file mode 100644 index 000000000..6faf11661 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_36x36/walking_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ball_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ball_54.bin new file mode 100644 index 000000000..b93746ad7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ball_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Dance_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Dance_54.bin new file mode 100644 index 000000000..85cb1e01d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Dance_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Fitness_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Fitness_54.bin new file mode 100644 index 000000000..85ce2a06c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Fitness_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ice_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ice_54.bin new file mode 100644 index 000000000..2ff457221 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Ice_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Limit_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Limit_54.bin new file mode 100644 index 000000000..00b61ec82 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Limit_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Other_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Other_54.bin new file mode 100644 index 000000000..f6dd40be0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Other_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Rest_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Rest_54.bin new file mode 100644 index 000000000..2141e2e96 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Rest_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Swimming_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Swimming_54.bin new file mode 100644 index 000000000..9443d8314 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Swimming_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Walking_54.bin b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Walking_54.bin new file mode 100644 index 000000000..7e498ca0d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_54x79/Walking_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin new file mode 100644 index 000000000..cd011d567 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Riding_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Riding_60.bin new file mode 100644 index 000000000..acdd2a499 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Riding_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Running_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Running_60.bin new file mode 100644 index 000000000..0d9c011a3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/Running_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/riding.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/riding.bin new file mode 100644 index 000000000..126d44cc1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/riding.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/running.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/running.bin new file mode 100644 index 000000000..44aada84c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/running.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking.bin new file mode 100644 index 000000000..beec31cf1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking_60.bin b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking_60.bin new file mode 100644 index 000000000..6faf11661 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_60x60/walking_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Jumprope_80.bin b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Jumprope_80.bin new file mode 100644 index 000000000..65fe2e789 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Jumprope_80.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin new file mode 100644 index 000000000..468ee9e01 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Pingpong_80.bin b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Pingpong_80.bin new file mode 100644 index 000000000..0670ad4d3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Pingpong_80.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Riding_80.bin b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Riding_80.bin new file mode 100644 index 000000000..abc376f92 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/icon_80x80/Riding_80.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Arrows.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Arrows.bin new file mode 100644 index 000000000..797a64a25 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Arrows.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Back.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Back.bin new file mode 100644 index 000000000..489261160 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Back.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Bouttonground.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Bouttonground.bin new file mode 100644 index 000000000..a494fe202 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Bouttonground.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Bubble.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Bubble.bin new file mode 100644 index 000000000..268046d4c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Bubble.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Buttonground2.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Buttonground2.bin new file mode 100644 index 000000000..a48543767 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Buttonground2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Buttonok.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Buttonok.bin new file mode 100644 index 000000000..0dbdb0712 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Buttonok.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Calories.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Calories.bin new file mode 100644 index 000000000..a46782845 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Calories.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Calories_30.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Calories_30.bin new file mode 100644 index 000000000..8674a596f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Calories_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Color_Progress.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Color_Progress.bin new file mode 100644 index 000000000..da0c82952 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Color_Progress.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Control_point.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Control_point.bin new file mode 100644 index 000000000..199c0f137 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Control_point.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Data_point.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Data_point.bin new file mode 100644 index 000000000..0cd66a165 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Data_point.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/GPS_1.bin b/code/sdk/files/n9/fs/user/res/Training/modules/GPS_1.bin new file mode 100644 index 000000000..c5532930e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/GPS_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/GPS_2.bin b/code/sdk/files/n9/fs/user/res/Training/modules/GPS_2.bin new file mode 100644 index 000000000..815678cf0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/GPS_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Go.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Go.bin new file mode 100644 index 000000000..4ae9a3879 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Go.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Go_2.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Go_2.bin new file mode 100644 index 000000000..ec87acf4c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Go_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate.bin new file mode 100644 index 000000000..a8d074d1a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_1.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_1.bin new file mode 100644 index 000000000..4ae0fe6dc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_2.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_2.bin new file mode 100644 index 000000000..e7a6abb15 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_30.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_30.bin new file mode 100644 index 000000000..1697c6bc7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Heartrate_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Icon.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Icon.bin new file mode 100644 index 000000000..1a68bf4f1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Icon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up.bin new file mode 100644 index 000000000..d81048b08 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up_40.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up_40.bin new file mode 100644 index 000000000..96f896968 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Inco_up_40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Line.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Line.bin new file mode 100644 index 000000000..9ba40f7ef Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Line.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Line_1.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Line_1.bin new file mode 100644 index 000000000..f04c971b6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Line_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Line_2.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Line_2.bin new file mode 100644 index 000000000..635cb2c34 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Line_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Mileage.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Mileage.bin new file mode 100644 index 000000000..ca135d13f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Mileage.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Mileage_30.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Mileage_30.bin new file mode 100644 index 000000000..76237bd30 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Mileage_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/More.bin b/code/sdk/files/n9/fs/user/res/Training/modules/More.bin new file mode 100644 index 000000000..de2ee9146 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/More.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/MoreView.bin b/code/sdk/files/n9/fs/user/res/Training/modules/MoreView.bin new file mode 100644 index 000000000..3fde01787 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/MoreView.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/More_icon.bin b/code/sdk/files/n9/fs/user/res/Training/modules/More_icon.bin new file mode 100644 index 000000000..e98798a25 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/More_icon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/No.bin b/code/sdk/files/n9/fs/user/res/Training/modules/No.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/No.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Norecord.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Norecord.bin new file mode 100644 index 000000000..efc960e12 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Norecord.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Note.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Note.bin new file mode 100644 index 000000000..48ab51d86 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Note.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Path.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Path.bin new file mode 100644 index 000000000..ab6c2a848 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Path.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Piont_bubble.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Piont_bubble.bin new file mode 100644 index 000000000..818a9abd0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Piont_bubble.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Point_black.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Point_black.bin new file mode 100644 index 000000000..a9bc0b8c9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Point_black.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Point_bule.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Point_bule.bin new file mode 100644 index 000000000..808b8987a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Point_bule.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Point_green.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Point_green.bin new file mode 100644 index 000000000..03f2625b4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Point_green.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Point_orange.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Point_orange.bin new file mode 100644 index 000000000..cd6cef386 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Point_orange.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Point_yellow.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Point_yellow.bin new file mode 100644 index 000000000..6ea0184e1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Point_yellow.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Progress.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Progress.bin new file mode 100644 index 000000000..2d456e0c8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Progress.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Sport_continue.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_continue.bin new file mode 100644 index 000000000..29fa070bb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_continue.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Sport_pause.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_pause.bin new file mode 100644 index 000000000..09cfcda72 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_pause.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Sport_stop.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_stop.bin new file mode 100644 index 000000000..7b5a977a5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_stop.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Sport_strength.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_strength.bin new file mode 100644 index 000000000..2f682a0bd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Sport_strength.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Step_30.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Step_30.bin new file mode 100644 index 000000000..98998f919 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Step_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Time.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Time.bin new file mode 100644 index 000000000..493393ae6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Time.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Walking_54.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Walking_54.bin new file mode 100644 index 000000000..0c977057b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Walking_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Warning.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Warning.bin new file mode 100644 index 000000000..7301e2834 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Warning.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/Yes.bin b/code/sdk/files/n9/fs/user/res/Training/modules/Yes.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/Yes.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/modules/sport_heartrate.bin b/code/sdk/files/n9/fs/user/res/Training/modules/sport_heartrate.bin new file mode 100644 index 000000000..9b6dd786d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/modules/sport_heartrate.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/1.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/1.bin new file mode 100644 index 000000000..4ed2da99c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/10.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/10.bin new file mode 100644 index 000000000..21c074611 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/11.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/11.bin new file mode 100644 index 000000000..cf967b494 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/12.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/12.bin new file mode 100644 index 000000000..4743d0839 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/13.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/13.bin new file mode 100644 index 000000000..3011f2971 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/14.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/14.bin new file mode 100644 index 000000000..6e48a1271 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/15.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/15.bin new file mode 100644 index 000000000..6472ae0e8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/16.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/16.bin new file mode 100644 index 000000000..f1354f325 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/17.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/17.bin new file mode 100644 index 000000000..23f391e93 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/18.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/18.bin new file mode 100644 index 000000000..eb2317942 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/19.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/19.bin new file mode 100644 index 000000000..3365d6424 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/2.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/2.bin new file mode 100644 index 000000000..17779e612 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/20.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/20.bin new file mode 100644 index 000000000..f8cab7b50 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/21.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/21.bin new file mode 100644 index 000000000..643935db1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/22.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/22.bin new file mode 100644 index 000000000..8bfdfb3ec Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/23.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/23.bin new file mode 100644 index 000000000..963e047f7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/24.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/24.bin new file mode 100644 index 000000000..51463704d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/25.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/25.bin new file mode 100644 index 000000000..4a9354d98 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/26.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/26.bin new file mode 100644 index 000000000..3633c4d7a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/27.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/27.bin new file mode 100644 index 000000000..036f37a73 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/28.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/28.bin new file mode 100644 index 000000000..8178e69c5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/29.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/29.bin new file mode 100644 index 000000000..484c3d982 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/3.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/3.bin new file mode 100644 index 000000000..b0572b8e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/30.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/30.bin new file mode 100644 index 000000000..59de63584 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/31.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/31.bin new file mode 100644 index 000000000..a3205ff8e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/32.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/32.bin new file mode 100644 index 000000000..384f3d083 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/33.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/33.bin new file mode 100644 index 000000000..3fd42685d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/34.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/34.bin new file mode 100644 index 000000000..b031242d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/35.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/35.bin new file mode 100644 index 000000000..6c39992cd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/36.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/36.bin new file mode 100644 index 000000000..b4c830b35 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/37.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/37.bin new file mode 100644 index 000000000..83ff3e2dd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/38.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/38.bin new file mode 100644 index 000000000..394020dfc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/39.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/39.bin new file mode 100644 index 000000000..e0b491b61 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/4.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/4.bin new file mode 100644 index 000000000..ad317f72e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/40.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/40.bin new file mode 100644 index 000000000..f2159ee32 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/41.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/41.bin new file mode 100644 index 000000000..ad258b618 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/41.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/42.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/42.bin new file mode 100644 index 000000000..b7333980b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/42.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/43.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/43.bin new file mode 100644 index 000000000..d84af3f5a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/43.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/44.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/44.bin new file mode 100644 index 000000000..65291fb87 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/44.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/45.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/45.bin new file mode 100644 index 000000000..b3ce23526 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/45.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/46.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/46.bin new file mode 100644 index 000000000..c42cede09 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/46.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/47.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/47.bin new file mode 100644 index 000000000..2bc3f103c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/47.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/48.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/48.bin new file mode 100644 index 000000000..37cf3a547 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/48.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/49.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/49.bin new file mode 100644 index 000000000..01518ecc7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/49.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/5.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/5.bin new file mode 100644 index 000000000..f966e5e0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/50.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/50.bin new file mode 100644 index 000000000..6e052345b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/50.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/51.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/51.bin new file mode 100644 index 000000000..50958ac84 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/51.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/52.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/52.bin new file mode 100644 index 000000000..440a14694 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/52.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/53.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/53.bin new file mode 100644 index 000000000..5c07ed6e4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/53.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/54.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/54.bin new file mode 100644 index 000000000..2051ad940 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/55.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/55.bin new file mode 100644 index 000000000..8a222c7bc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/55.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/56.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/56.bin new file mode 100644 index 000000000..409735f38 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/56.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/57.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/57.bin new file mode 100644 index 000000000..c04c430db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/57.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/58.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/58.bin new file mode 100644 index 000000000..93450790e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/58.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/59.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/59.bin new file mode 100644 index 000000000..7985c9f15 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/59.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/6.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/6.bin new file mode 100644 index 000000000..baa022f57 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/60.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/60.bin new file mode 100644 index 000000000..6a214be81 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/61.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/61.bin new file mode 100644 index 000000000..9bef293fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/61.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/62.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/62.bin new file mode 100644 index 000000000..8820c1113 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/62.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/63.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/63.bin new file mode 100644 index 000000000..850f763c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/63.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/64.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/64.bin new file mode 100644 index 000000000..4c178f190 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/64.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/65.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/65.bin new file mode 100644 index 000000000..9ad9748c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/65.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/66.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/66.bin new file mode 100644 index 000000000..7fa61e90d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/66.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/67.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/67.bin new file mode 100644 index 000000000..cb3f9b04a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/67.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/68.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/68.bin new file mode 100644 index 000000000..f70963790 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/68.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/69.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/69.bin new file mode 100644 index 000000000..ef9b430ca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/69.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/7.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/7.bin new file mode 100644 index 000000000..4c63fe945 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/70.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/70.bin new file mode 100644 index 000000000..66c478413 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/70.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/71.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/71.bin new file mode 100644 index 000000000..103fc4b20 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/71.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/72.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/72.bin new file mode 100644 index 000000000..8513e1e3a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/72.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/73.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/73.bin new file mode 100644 index 000000000..d08f6a358 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/73.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/74.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/74.bin new file mode 100644 index 000000000..9947f68c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/74.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/75.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/75.bin new file mode 100644 index 000000000..2023be892 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/75.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/76.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/76.bin new file mode 100644 index 000000000..2562e2307 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/76.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/77.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/77.bin new file mode 100644 index 000000000..f25d256b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/77.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/78.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/78.bin new file mode 100644 index 000000000..f45defc7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/78.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/79.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/79.bin new file mode 100644 index 000000000..f09097603 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/79.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/8.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/8.bin new file mode 100644 index 000000000..24f99dc3a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/80.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/80.bin new file mode 100644 index 000000000..e1048d5b4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/80.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/81.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/81.bin new file mode 100644 index 000000000..431451666 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/81.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/82.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/82.bin new file mode 100644 index 000000000..aff794395 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/82.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/83.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/83.bin new file mode 100644 index 000000000..03a762591 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/83.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/84.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/84.bin new file mode 100644 index 000000000..0ad2148b9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/84.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/85.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/85.bin new file mode 100644 index 000000000..c0f620206 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/85.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/86.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/86.bin new file mode 100644 index 000000000..31e9173d5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/86.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/87.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/87.bin new file mode 100644 index 000000000..719699b9f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/87.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/88.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/88.bin new file mode 100644 index 000000000..9b69168b9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/88.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/89.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/89.bin new file mode 100644 index 000000000..08e68b6f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/89.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/9.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/9.bin new file mode 100644 index 000000000..9be948fb8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/90.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/90.bin new file mode 100644 index 000000000..3fae73c7c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/90.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/91.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/91.bin new file mode 100644 index 000000000..a03d7b8d8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/91.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/92.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/92.bin new file mode 100644 index 000000000..895d9eba1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/92.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/93.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/93.bin new file mode 100644 index 000000000..ba97a715d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/93.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/94.bin b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/94.bin new file mode 100644 index 000000000..6b3789195 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Training/training_GIF/win/94.bin differ diff --git a/code/sdk/files/n9/fs/user/res/Vector.bin b/code/sdk/files/n9/fs/user/res/Vector.bin new file mode 100644 index 000000000..a9c7511bd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/Vector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/VolumeControlVector.bin b/code/sdk/files/n9/fs/user/res/VolumeControlVector.bin new file mode 100644 index 000000000..da3928e81 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/VolumeControlVector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/add_card/button_no.bin b/code/sdk/files/n9/fs/user/res/add_card/button_no.bin new file mode 100644 index 000000000..8c397c803 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/add_card/button_no.bin differ diff --git a/code/sdk/files/n9/fs/user/res/add_card/button_ok.bin b/code/sdk/files/n9/fs/user/res/add_card/button_ok.bin new file mode 100644 index 000000000..68257926f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/add_card/button_ok.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/1.bin b/code/sdk/files/n9/fs/user/res/alipay/1.bin new file mode 100644 index 000000000..1a4c9939d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/2.bin b/code/sdk/files/n9/fs/user/res/alipay/2.bin new file mode 100644 index 000000000..410fac639 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/3.bin b/code/sdk/files/n9/fs/user/res/alipay/3.bin new file mode 100644 index 000000000..b69a6207e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/4.bin b/code/sdk/files/n9/fs/user/res/alipay/4.bin new file mode 100644 index 000000000..d675b7783 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/5.bin b/code/sdk/files/n9/fs/user/res/alipay/5.bin new file mode 100644 index 000000000..33211a909 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/6.bin b/code/sdk/files/n9/fs/user/res/alipay/6.bin new file mode 100644 index 000000000..14b9a96aa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/7.bin b/code/sdk/files/n9/fs/user/res/alipay/7.bin new file mode 100644 index 000000000..501f7a95b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/8.bin b/code/sdk/files/n9/fs/user/res/alipay/8.bin new file mode 100644 index 000000000..a1be23997 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin new file mode 100644 index 000000000..120b4f221 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin new file mode 100644 index 000000000..89af5fe16 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin new file mode 100644 index 000000000..07872c9ea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin new file mode 100644 index 000000000..4b0c3ed58 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin new file mode 100644 index 000000000..f37a192f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin new file mode 100644 index 000000000..89337fab2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin new file mode 100644 index 000000000..5feb11717 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin new file mode 100644 index 000000000..a26ed67db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/alipay_logo.bin b/code/sdk/files/n9/fs/user/res/alipay/alipay_logo.bin new file mode 100644 index 000000000..db057a195 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/alipay_logo.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/alipaylog.bin b/code/sdk/files/n9/fs/user/res/alipay/alipaylog.bin new file mode 100644 index 000000000..0402d782c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/alipaylog.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/no.bin b/code/sdk/files/n9/fs/user/res/alipay/no.bin new file mode 100644 index 000000000..8dd8ac995 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/no.bin differ diff --git a/code/sdk/files/n9/fs/user/res/alipay/yes.bin b/code/sdk/files/n9/fs/user/res/alipay/yes.bin new file mode 100644 index 000000000..cfacfbe6b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/alipay/yes.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/Bluetooth.bin b/code/sdk/files/n9/fs/user/res/applist_icon/Bluetooth.bin new file mode 100644 index 000000000..2f980bdaa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/Bluetooth.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/aivoice.bin b/code/sdk/files/n9/fs/user/res/applist_icon/aivoice.bin new file mode 100644 index 000000000..158f25871 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/aivoice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/alarm.bin b/code/sdk/files/n9/fs/user/res/applist_icon/alarm.bin new file mode 100644 index 000000000..d386339e6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/alarm.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/alipay.bin b/code/sdk/files/n9/fs/user/res/applist_icon/alipay.bin new file mode 100644 index 000000000..5b71df1c7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/alipay.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/Bluetooth.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/Bluetooth.bin new file mode 100644 index 000000000..755ad9a68 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/Bluetooth.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin new file mode 100644 index 000000000..6fc75a1a4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alarm.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alarm.bin new file mode 100644 index 000000000..c178e98a8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alarm.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alipay.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alipay.bin new file mode 100644 index 000000000..94afd4d64 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/alipay.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/assistant.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/assistant.bin new file mode 100644 index 000000000..ba23b2efe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/assistant.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin new file mode 100644 index 000000000..cf6d2d754 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/breathe.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/breathe.bin new file mode 100644 index 000000000..476930a8c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/breathe.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/calendar.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/calendar.bin new file mode 100644 index 000000000..106fe72c9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/calendar.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin new file mode 100644 index 000000000..b6aa1b14e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/changedial.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/changedial.bin new file mode 100644 index 000000000..dd30fb86a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/changedial.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/clock.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/clock.bin new file mode 100644 index 000000000..7a54c3d49 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/clock.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/compass.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/compass.bin new file mode 100644 index 000000000..af30bca9f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/compass.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/countdown.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/countdown.bin new file mode 100644 index 000000000..60a633b2a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/countdown.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/disturb.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/disturb.bin new file mode 100644 index 000000000..4ac882a60 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/disturb.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/findphone.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/findphone.bin new file mode 100644 index 000000000..526fb529f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/findphone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin new file mode 100644 index 000000000..51803f1da Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/heart.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/heart.bin new file mode 100644 index 000000000..f63c40d0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/heart.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/information.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/information.bin new file mode 100644 index 000000000..a43ecf7cf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/information.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/lighting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/lighting.bin new file mode 100644 index 000000000..d5cead04f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/lighting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/message.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/message.bin new file mode 100644 index 000000000..81b3ee5c9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/message.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/music.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/music.bin new file mode 100644 index 000000000..b2f6c4a45 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/music.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phone.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phone.bin new file mode 100644 index 000000000..e5c7ac1d3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin new file mode 100644 index 000000000..12354b483 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/record.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/record.bin new file mode 100644 index 000000000..9f3aace90 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/record.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/recording.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/recording.bin new file mode 100644 index 000000000..c5ba61d99 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/recording.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/save.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/save.bin new file mode 100644 index 000000000..cad4762ba Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/save.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/schedule.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/schedule.bin new file mode 100644 index 000000000..057a37885 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/schedule.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/setting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/setting.bin new file mode 100644 index 000000000..5665f4296 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/setting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin new file mode 100644 index 000000000..ca5eb8715 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/smart.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/smart.bin new file mode 100644 index 000000000..4d9fef7d4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/smart.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sport.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sport.bin new file mode 100644 index 000000000..953229212 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/sport.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/theme.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/theme.bin new file mode 100644 index 000000000..787540c43 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/theme.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/training.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/training.bin new file mode 100644 index 000000000..76756265d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/training.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/voice.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/voice.bin new file mode 100644 index 000000000..c9736d3fd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/voice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/weather.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/weather.bin new file mode 100644 index 000000000..5e5522f3a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/weather.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/worksync.bin b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/worksync.bin new file mode 100644 index 000000000..a3c110f5f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/applist_big_icon/worksync.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/assistant.bin b/code/sdk/files/n9/fs/user/res/applist_icon/assistant.bin new file mode 100644 index 000000000..442e8e62a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/assistant.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/booldoxygen.bin b/code/sdk/files/n9/fs/user/res/applist_icon/booldoxygen.bin new file mode 100644 index 000000000..480578efc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/booldoxygen.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/breathe.bin b/code/sdk/files/n9/fs/user/res/applist_icon/breathe.bin new file mode 100644 index 000000000..b6c5254e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/breathe.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/calendar.bin b/code/sdk/files/n9/fs/user/res/applist_icon/calendar.bin new file mode 100644 index 000000000..21b31b95f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/calendar.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/cardsetting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/cardsetting.bin new file mode 100644 index 000000000..e9cdf458d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/cardsetting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/changedial.bin b/code/sdk/files/n9/fs/user/res/applist_icon/changedial.bin new file mode 100644 index 000000000..4e13dc1f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/changedial.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/clock.bin b/code/sdk/files/n9/fs/user/res/applist_icon/clock.bin new file mode 100644 index 000000000..508925b29 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/clock.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/compass.bin b/code/sdk/files/n9/fs/user/res/applist_icon/compass.bin new file mode 100644 index 000000000..a91d0788d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/compass.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/countdown.bin b/code/sdk/files/n9/fs/user/res/applist_icon/countdown.bin new file mode 100644 index 000000000..837910624 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/countdown.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/disturb.bin b/code/sdk/files/n9/fs/user/res/applist_icon/disturb.bin new file mode 100644 index 000000000..2a16f04b6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/disturb.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/findphone.bin b/code/sdk/files/n9/fs/user/res/applist_icon/findphone.bin new file mode 100644 index 000000000..f6bc8a7d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/findphone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/flashlight.bin b/code/sdk/files/n9/fs/user/res/applist_icon/flashlight.bin new file mode 100644 index 000000000..64d5083b0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/flashlight.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/heart.bin b/code/sdk/files/n9/fs/user/res/applist_icon/heart.bin new file mode 100644 index 000000000..57fc069cf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/heart.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/information.bin b/code/sdk/files/n9/fs/user/res/applist_icon/information.bin new file mode 100644 index 000000000..7d85a73f3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/information.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/lighting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/lighting.bin new file mode 100644 index 000000000..1fe402538 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/lighting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/message.bin b/code/sdk/files/n9/fs/user/res/applist_icon/message.bin new file mode 100644 index 000000000..5c2561340 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/message.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/music.bin b/code/sdk/files/n9/fs/user/res/applist_icon/music.bin new file mode 100644 index 000000000..236386c37 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/music.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/phone.bin b/code/sdk/files/n9/fs/user/res/applist_icon/phone.bin new file mode 100644 index 000000000..463ab01c7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/phone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/phonebook.bin b/code/sdk/files/n9/fs/user/res/applist_icon/phonebook.bin new file mode 100644 index 000000000..c4ef74118 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/phonebook.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/record.bin b/code/sdk/files/n9/fs/user/res/applist_icon/record.bin new file mode 100644 index 000000000..bbe90fe76 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/record.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/recording.bin b/code/sdk/files/n9/fs/user/res/applist_icon/recording.bin new file mode 100644 index 000000000..8541c117f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/recording.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/save.bin b/code/sdk/files/n9/fs/user/res/applist_icon/save.bin new file mode 100644 index 000000000..c6ed1ff2b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/save.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/schedule.bin b/code/sdk/files/n9/fs/user/res/applist_icon/schedule.bin new file mode 100644 index 000000000..a77168010 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/schedule.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/setting.bin b/code/sdk/files/n9/fs/user/res/applist_icon/setting.bin new file mode 100644 index 000000000..952c21a72 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/setting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/sleeping.bin b/code/sdk/files/n9/fs/user/res/applist_icon/sleeping.bin new file mode 100644 index 000000000..8d9440aee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/sleeping.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/smart.bin b/code/sdk/files/n9/fs/user/res/applist_icon/smart.bin new file mode 100644 index 000000000..713af0f2c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/smart.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/sport.bin b/code/sdk/files/n9/fs/user/res/applist_icon/sport.bin new file mode 100644 index 000000000..6b6b97c45 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/sport.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/theme.bin b/code/sdk/files/n9/fs/user/res/applist_icon/theme.bin new file mode 100644 index 000000000..b6f6903d1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/theme.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/training.bin b/code/sdk/files/n9/fs/user/res/applist_icon/training.bin new file mode 100644 index 000000000..267101726 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/training.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/voice.bin b/code/sdk/files/n9/fs/user/res/applist_icon/voice.bin new file mode 100644 index 000000000..976cb6f2f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/voice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/weather.bin b/code/sdk/files/n9/fs/user/res/applist_icon/weather.bin new file mode 100644 index 000000000..d4b1f84f3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/weather.bin differ diff --git a/code/sdk/files/n9/fs/user/res/applist_icon/worksync.bin b/code/sdk/files/n9/fs/user/res/applist_icon/worksync.bin new file mode 100644 index 000000000..909af6fa8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/applist_icon/worksync.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant.bin new file mode 100644 index 000000000..e7c053e13 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_01.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_01.bin new file mode 100644 index 000000000..36b7c858f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_01.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_02.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_02.bin new file mode 100644 index 000000000..8bb7b5589 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_02.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_03.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_03.bin new file mode 100644 index 000000000..5b2ce8b98 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_03.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_04.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_04.bin new file mode 100644 index 000000000..442443839 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_04.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_05.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_05.bin new file mode 100644 index 000000000..67c9b9fd1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_05.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_06.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_06.bin new file mode 100644 index 000000000..3b3906fae Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_06.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_07.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_07.bin new file mode 100644 index 000000000..b1a731eea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_07.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_08.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_08.bin new file mode 100644 index 000000000..374dc49c8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_08.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_09.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_09.bin new file mode 100644 index 000000000..5198df1e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_09.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_10.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_10.bin new file mode 100644 index 000000000..e1f0f88c6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_11.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_11.bin new file mode 100644 index 000000000..43da933df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_12.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_12.bin new file mode 100644 index 000000000..eb2540e43 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_13.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_13.bin new file mode 100644 index 000000000..6d71317b0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_14.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_14.bin new file mode 100644 index 000000000..0866db557 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_15.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_15.bin new file mode 100644 index 000000000..a8fd17c3c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_16.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_16.bin new file mode 100644 index 000000000..93604e902 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_17.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_17.bin new file mode 100644 index 000000000..55c1e6e70 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_18.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_18.bin new file mode 100644 index 000000000..ca4f41466 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_19.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_19.bin new file mode 100644 index 000000000..1bb75ec71 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_20.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_20.bin new file mode 100644 index 000000000..2d3198d66 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_21.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_21.bin new file mode 100644 index 000000000..4065902d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_22.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_22.bin new file mode 100644 index 000000000..f5bfc44ca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_23.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_23.bin new file mode 100644 index 000000000..27e8c9a26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_24.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_24.bin new file mode 100644 index 000000000..01e8c9245 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_25.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_25.bin new file mode 100644 index 000000000..80f696572 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_26.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_26.bin new file mode 100644 index 000000000..ce9a4e1ad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_27.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_27.bin new file mode 100644 index 000000000..29ca1b738 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_28.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_28.bin new file mode 100644 index 000000000..59c377b58 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_29.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_29.bin new file mode 100644 index 000000000..e60b0b9ce Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_30.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_30.bin new file mode 100644 index 000000000..8073c86c2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_31.bin b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_31.bin new file mode 100644 index 000000000..b34cd66c0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/assistant/assistant_gif/assistant_31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/1.bin b/code/sdk/files/n9/fs/user/res/connect/1.bin new file mode 100644 index 000000000..b8ea06f4a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/10.bin b/code/sdk/files/n9/fs/user/res/connect/10.bin new file mode 100644 index 000000000..37e1433d2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/11.bin b/code/sdk/files/n9/fs/user/res/connect/11.bin new file mode 100644 index 000000000..ab6c42baa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/12.bin b/code/sdk/files/n9/fs/user/res/connect/12.bin new file mode 100644 index 000000000..832c4fada Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/13.bin b/code/sdk/files/n9/fs/user/res/connect/13.bin new file mode 100644 index 000000000..ef3fa72a7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/14.bin b/code/sdk/files/n9/fs/user/res/connect/14.bin new file mode 100644 index 000000000..e92650386 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/15.bin b/code/sdk/files/n9/fs/user/res/connect/15.bin new file mode 100644 index 000000000..f9f1fb024 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/16.bin b/code/sdk/files/n9/fs/user/res/connect/16.bin new file mode 100644 index 000000000..90ee32f71 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/17.bin b/code/sdk/files/n9/fs/user/res/connect/17.bin new file mode 100644 index 000000000..d22d5812e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/18.bin b/code/sdk/files/n9/fs/user/res/connect/18.bin new file mode 100644 index 000000000..1b00c6b36 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/19.bin b/code/sdk/files/n9/fs/user/res/connect/19.bin new file mode 100644 index 000000000..ba7fa1f02 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/2.bin b/code/sdk/files/n9/fs/user/res/connect/2.bin new file mode 100644 index 000000000..134cdf40c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/20.bin b/code/sdk/files/n9/fs/user/res/connect/20.bin new file mode 100644 index 000000000..795d2f2f9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/21.bin b/code/sdk/files/n9/fs/user/res/connect/21.bin new file mode 100644 index 000000000..62e081119 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/22.bin b/code/sdk/files/n9/fs/user/res/connect/22.bin new file mode 100644 index 000000000..190ba4b33 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/23.bin b/code/sdk/files/n9/fs/user/res/connect/23.bin new file mode 100644 index 000000000..e699b2ed7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/24.bin b/code/sdk/files/n9/fs/user/res/connect/24.bin new file mode 100644 index 000000000..1aa03972b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/25.bin b/code/sdk/files/n9/fs/user/res/connect/25.bin new file mode 100644 index 000000000..bfcb401e5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/26.bin b/code/sdk/files/n9/fs/user/res/connect/26.bin new file mode 100644 index 000000000..ceb749a21 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/27.bin b/code/sdk/files/n9/fs/user/res/connect/27.bin new file mode 100644 index 000000000..2996d5905 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/28.bin b/code/sdk/files/n9/fs/user/res/connect/28.bin new file mode 100644 index 000000000..a112217d8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/29.bin b/code/sdk/files/n9/fs/user/res/connect/29.bin new file mode 100644 index 000000000..421d73be0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/3.bin b/code/sdk/files/n9/fs/user/res/connect/3.bin new file mode 100644 index 000000000..8a2443ca6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/30.bin b/code/sdk/files/n9/fs/user/res/connect/30.bin new file mode 100644 index 000000000..0d3928db9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/31.bin b/code/sdk/files/n9/fs/user/res/connect/31.bin new file mode 100644 index 000000000..42a555a33 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/32.bin b/code/sdk/files/n9/fs/user/res/connect/32.bin new file mode 100644 index 000000000..d39e56c75 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/33.bin b/code/sdk/files/n9/fs/user/res/connect/33.bin new file mode 100644 index 000000000..385ca7200 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/34.bin b/code/sdk/files/n9/fs/user/res/connect/34.bin new file mode 100644 index 000000000..943399a4c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/35.bin b/code/sdk/files/n9/fs/user/res/connect/35.bin new file mode 100644 index 000000000..8d8972ca9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/36.bin b/code/sdk/files/n9/fs/user/res/connect/36.bin new file mode 100644 index 000000000..9a660d8aa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/37.bin b/code/sdk/files/n9/fs/user/res/connect/37.bin new file mode 100644 index 000000000..83cd7a0a2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/38.bin b/code/sdk/files/n9/fs/user/res/connect/38.bin new file mode 100644 index 000000000..cbb2d2d41 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/39.bin b/code/sdk/files/n9/fs/user/res/connect/39.bin new file mode 100644 index 000000000..8f18bb71f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/4.bin b/code/sdk/files/n9/fs/user/res/connect/4.bin new file mode 100644 index 000000000..7f714137c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/40.bin b/code/sdk/files/n9/fs/user/res/connect/40.bin new file mode 100644 index 000000000..cf56194df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/41.bin b/code/sdk/files/n9/fs/user/res/connect/41.bin new file mode 100644 index 000000000..375a75190 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/41.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/42.bin b/code/sdk/files/n9/fs/user/res/connect/42.bin new file mode 100644 index 000000000..f40b8b79a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/42.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/43.bin b/code/sdk/files/n9/fs/user/res/connect/43.bin new file mode 100644 index 000000000..50a0fbe9a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/43.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/44.bin b/code/sdk/files/n9/fs/user/res/connect/44.bin new file mode 100644 index 000000000..34a3d1d37 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/44.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/45.bin b/code/sdk/files/n9/fs/user/res/connect/45.bin new file mode 100644 index 000000000..5a238dfc0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/45.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/46.bin b/code/sdk/files/n9/fs/user/res/connect/46.bin new file mode 100644 index 000000000..af0c81003 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/46.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/47.bin b/code/sdk/files/n9/fs/user/res/connect/47.bin new file mode 100644 index 000000000..92cbfb01b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/47.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/48.bin b/code/sdk/files/n9/fs/user/res/connect/48.bin new file mode 100644 index 000000000..c013ee99d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/48.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/49.bin b/code/sdk/files/n9/fs/user/res/connect/49.bin new file mode 100644 index 000000000..6634654cd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/49.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/5.bin b/code/sdk/files/n9/fs/user/res/connect/5.bin new file mode 100644 index 000000000..995fd13ec Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/50.bin b/code/sdk/files/n9/fs/user/res/connect/50.bin new file mode 100644 index 000000000..b482c6dd7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/50.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/51.bin b/code/sdk/files/n9/fs/user/res/connect/51.bin new file mode 100644 index 000000000..219a745f7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/51.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/52.bin b/code/sdk/files/n9/fs/user/res/connect/52.bin new file mode 100644 index 000000000..9d5478d66 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/52.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/53.bin b/code/sdk/files/n9/fs/user/res/connect/53.bin new file mode 100644 index 000000000..a89d60ed7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/53.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/54.bin b/code/sdk/files/n9/fs/user/res/connect/54.bin new file mode 100644 index 000000000..01ce8ac0f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/55.bin b/code/sdk/files/n9/fs/user/res/connect/55.bin new file mode 100644 index 000000000..7f199a35b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/55.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/56.bin b/code/sdk/files/n9/fs/user/res/connect/56.bin new file mode 100644 index 000000000..8bd4b2a4b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/56.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/57.bin b/code/sdk/files/n9/fs/user/res/connect/57.bin new file mode 100644 index 000000000..1d068f4ae Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/57.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/58.bin b/code/sdk/files/n9/fs/user/res/connect/58.bin new file mode 100644 index 000000000..b245412a9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/58.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/59.bin b/code/sdk/files/n9/fs/user/res/connect/59.bin new file mode 100644 index 000000000..2c0dd0714 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/59.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/6.bin b/code/sdk/files/n9/fs/user/res/connect/6.bin new file mode 100644 index 000000000..4574c0f24 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/60.bin b/code/sdk/files/n9/fs/user/res/connect/60.bin new file mode 100644 index 000000000..bd9ef11fa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/7.bin b/code/sdk/files/n9/fs/user/res/connect/7.bin new file mode 100644 index 000000000..007fbbca2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/8.bin b/code/sdk/files/n9/fs/user/res/connect/8.bin new file mode 100644 index 000000000..65ffac62f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/connect/9.bin b/code/sdk/files/n9/fs/user/res/connect/9.bin new file mode 100644 index 000000000..8acfb3eb4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/connect/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_END.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_END.bin new file mode 100644 index 000000000..85ed573cf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_END.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin new file mode 100644 index 000000000..87c18748a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PLAY.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PLAY.bin new file mode 100644 index 000000000..97b64f812 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_PLAY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_RESET.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_RESET.bin new file mode 100644 index 000000000..2d3105e7d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_RESET.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin new file mode 100644 index 000000000..ff8eb2dbd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin new file mode 100644 index 000000000..40be9d194 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWN_COLONE.bin b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWN_COLONE.bin new file mode 100644 index 000000000..f3d90d91f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/COUNTDOWN_COLONE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/Vector_Big.bin b/code/sdk/files/n9/fs/user/res/countdown/Vector_Big.bin new file mode 100644 index 000000000..d569231c8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/Vector_Big.bin differ diff --git a/code/sdk/files/n9/fs/user/res/countdown/repeat_button.bin b/code/sdk/files/n9/fs/user/res/countdown/repeat_button.bin new file mode 100644 index 000000000..2d3105e7d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/countdown/repeat_button.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/KUMI.bin b/code/sdk/files/n9/fs/user/res/dial_soures/KUMI.bin new file mode 100644 index 000000000..982845bf5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/KUMI.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/KUMIVIEW.bin b/code/sdk/files/n9/fs/user/res/dial_soures/KUMIVIEW.bin new file mode 100644 index 000000000..5532379ee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/KUMIVIEW.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin b/code/sdk/files/n9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin new file mode 100644 index 000000000..350fed251 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/background.bin b/code/sdk/files/n9/fs/user/res/dial_soures/background.bin new file mode 100644 index 000000000..1469df65f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/background.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/main_bg.bin b/code/sdk/files/n9/fs/user/res/dial_soures/main_bg.bin new file mode 100644 index 000000000..8c7778a08 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/main_bg.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_soures/thumbnail.bin b/code/sdk/files/n9/fs/user/res/dial_soures/thumbnail.bin new file mode 100644 index 000000000..8b2ca7342 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_soures/thumbnail.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_state/disturbicon.bin b/code/sdk/files/n9/fs/user/res/dial_state/disturbicon.bin new file mode 100644 index 000000000..387118cab Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_state/disturbicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_state/lock.bin b/code/sdk/files/n9/fs/user/res/dial_state/lock.bin new file mode 100644 index 000000000..f272ad8e5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_state/lock.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_state/sleep.bin b/code/sdk/files/n9/fs/user/res/dial_state/sleep.bin new file mode 100644 index 000000000..bedbeb8d5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_state/sleep.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dial_state/unread.bin b/code/sdk/files/n9/fs/user/res/dial_state/unread.bin new file mode 100644 index 000000000..da64bdc7c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dial_state/unread.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/1.bin b/code/sdk/files/n9/fs/user/res/down/1.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/10.bin b/code/sdk/files/n9/fs/user/res/down/10.bin new file mode 100644 index 000000000..8dc49d6fe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/11.bin b/code/sdk/files/n9/fs/user/res/down/11.bin new file mode 100644 index 000000000..8c6a7cbdb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/12.bin b/code/sdk/files/n9/fs/user/res/down/12.bin new file mode 100644 index 000000000..c887ac0c7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/13.bin b/code/sdk/files/n9/fs/user/res/down/13.bin new file mode 100644 index 000000000..a841d7702 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/14.bin b/code/sdk/files/n9/fs/user/res/down/14.bin new file mode 100644 index 000000000..2bb520fb1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/15.bin b/code/sdk/files/n9/fs/user/res/down/15.bin new file mode 100644 index 000000000..58101646f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/16.bin b/code/sdk/files/n9/fs/user/res/down/16.bin new file mode 100644 index 000000000..e184bc195 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/17.bin b/code/sdk/files/n9/fs/user/res/down/17.bin new file mode 100644 index 000000000..a9691d22c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/18.bin b/code/sdk/files/n9/fs/user/res/down/18.bin new file mode 100644 index 000000000..25e4e9486 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/19.bin b/code/sdk/files/n9/fs/user/res/down/19.bin new file mode 100644 index 000000000..be47b3da5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/2.bin b/code/sdk/files/n9/fs/user/res/down/2.bin new file mode 100644 index 000000000..be739815b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/20.bin b/code/sdk/files/n9/fs/user/res/down/20.bin new file mode 100644 index 000000000..467d8c1a1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/21.bin b/code/sdk/files/n9/fs/user/res/down/21.bin new file mode 100644 index 000000000..a65fecc7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/22.bin b/code/sdk/files/n9/fs/user/res/down/22.bin new file mode 100644 index 000000000..c1b706938 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/23.bin b/code/sdk/files/n9/fs/user/res/down/23.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/24.bin b/code/sdk/files/n9/fs/user/res/down/24.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/3.bin b/code/sdk/files/n9/fs/user/res/down/3.bin new file mode 100644 index 000000000..02baeddfb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/4.bin b/code/sdk/files/n9/fs/user/res/down/4.bin new file mode 100644 index 000000000..ff0bd976f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/5.bin b/code/sdk/files/n9/fs/user/res/down/5.bin new file mode 100644 index 000000000..72dd45fc3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/6.bin b/code/sdk/files/n9/fs/user/res/down/6.bin new file mode 100644 index 000000000..cbbccb498 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/7.bin b/code/sdk/files/n9/fs/user/res/down/7.bin new file mode 100644 index 000000000..b62f089a3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/8.bin b/code/sdk/files/n9/fs/user/res/down/8.bin new file mode 100644 index 000000000..79cb70251 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/down/9.bin b/code/sdk/files/n9/fs/user/res/down/9.bin new file mode 100644 index 000000000..745099b44 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/down/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/drinkReminder/DrinkReminder.bin b/code/sdk/files/n9/fs/user/res/drinkReminder/DrinkReminder.bin new file mode 100644 index 000000000..fd3b4eae0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/drinkReminder/DrinkReminder.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin new file mode 100644 index 000000000..dc42228a7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin new file mode 100644 index 000000000..b0672f332 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin new file mode 100644 index 000000000..766920684 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin new file mode 100644 index 000000000..57b12686d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin new file mode 100644 index 000000000..97df05bfa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT.bin new file mode 100644 index 000000000..e0978030c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin new file mode 100644 index 000000000..20ca20564 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin new file mode 100644 index 000000000..e806a2ca6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin new file mode 100644 index 000000000..1f10216fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin new file mode 100644 index 000000000..1c159b708 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin new file mode 100644 index 000000000..e263427a6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin new file mode 100644 index 000000000..2ab029386 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin new file mode 100644 index 000000000..50b7c157f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_HD.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_HD.bin new file mode 100644 index 000000000..2f8fa0cd7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_HD.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin new file mode 100644 index 000000000..fd14a2422 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LINE.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LINE.bin new file mode 100644 index 000000000..7b0ca25b4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_LINE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin new file mode 100644 index 000000000..d215fec3b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin new file mode 100644 index 000000000..6c2d33048 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin new file mode 100644 index 000000000..007019247 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin new file mode 100644 index 000000000..4548053a2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin new file mode 100644 index 000000000..fa7de75ae Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin new file mode 100644 index 000000000..9890c4e77 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin new file mode 100644 index 000000000..f6b2ba234 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin new file mode 100644 index 000000000..f4dd0fe4e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SETTING.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SETTING.bin new file mode 100644 index 000000000..c89f3fd70 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SETTING.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin new file mode 100644 index 000000000..8e8136926 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin new file mode 100644 index 000000000..5af99761e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_connect.bin b/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_connect.bin new file mode 100644 index 000000000..e1bc5caf0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_connect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_disconnect.bin b/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_disconnect.bin new file mode 100644 index 000000000..f4e82052e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/bluetooth_disconnect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/earphones_connect.bin b/code/sdk/files/n9/fs/user/res/dropdown/earphones_connect.bin new file mode 100644 index 000000000..2a378f49c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/earphones_connect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/earphones_disconnect.bin b/code/sdk/files/n9/fs/user/res/dropdown/earphones_disconnect.bin new file mode 100644 index 000000000..06f2aaa7c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/earphones_disconnect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/phone_connect.bin b/code/sdk/files/n9/fs/user/res/dropdown/phone_connect.bin new file mode 100644 index 000000000..e0e1731bc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/phone_connect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/dropdown/phone_disconnect.bin b/code/sdk/files/n9/fs/user/res/dropdown/phone_disconnect.bin new file mode 100644 index 000000000..09044bf6e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/dropdown/phone_disconnect.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/1.bin b/code/sdk/files/n9/fs/user/res/findphone/1.bin new file mode 100644 index 000000000..2273cd870 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/10.bin b/code/sdk/files/n9/fs/user/res/findphone/10.bin new file mode 100644 index 000000000..f93d75014 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/11.bin b/code/sdk/files/n9/fs/user/res/findphone/11.bin new file mode 100644 index 000000000..df46946e5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/12.bin b/code/sdk/files/n9/fs/user/res/findphone/12.bin new file mode 100644 index 000000000..2d344f8b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/13.bin b/code/sdk/files/n9/fs/user/res/findphone/13.bin new file mode 100644 index 000000000..b447b41c3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/14.bin b/code/sdk/files/n9/fs/user/res/findphone/14.bin new file mode 100644 index 000000000..a4120b569 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/15.bin b/code/sdk/files/n9/fs/user/res/findphone/15.bin new file mode 100644 index 000000000..64c4bdf0f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/16.bin b/code/sdk/files/n9/fs/user/res/findphone/16.bin new file mode 100644 index 000000000..f8b169000 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/17.bin b/code/sdk/files/n9/fs/user/res/findphone/17.bin new file mode 100644 index 000000000..5e04ef8ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/18.bin b/code/sdk/files/n9/fs/user/res/findphone/18.bin new file mode 100644 index 000000000..3cd8ff5f0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/19.bin b/code/sdk/files/n9/fs/user/res/findphone/19.bin new file mode 100644 index 000000000..b1a06a562 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/2.bin b/code/sdk/files/n9/fs/user/res/findphone/2.bin new file mode 100644 index 000000000..f09d2d7c3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/20.bin b/code/sdk/files/n9/fs/user/res/findphone/20.bin new file mode 100644 index 000000000..3eb902dfc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/21.bin b/code/sdk/files/n9/fs/user/res/findphone/21.bin new file mode 100644 index 000000000..9f4c54121 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/22.bin b/code/sdk/files/n9/fs/user/res/findphone/22.bin new file mode 100644 index 000000000..911bc6461 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/23.bin b/code/sdk/files/n9/fs/user/res/findphone/23.bin new file mode 100644 index 000000000..481371bf8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/24.bin b/code/sdk/files/n9/fs/user/res/findphone/24.bin new file mode 100644 index 000000000..70d5a3620 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/25.bin b/code/sdk/files/n9/fs/user/res/findphone/25.bin new file mode 100644 index 000000000..140ead0ba Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/26.bin b/code/sdk/files/n9/fs/user/res/findphone/26.bin new file mode 100644 index 000000000..70a6edcca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/27.bin b/code/sdk/files/n9/fs/user/res/findphone/27.bin new file mode 100644 index 000000000..24ab75d7f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/28.bin b/code/sdk/files/n9/fs/user/res/findphone/28.bin new file mode 100644 index 000000000..e5c286ba1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/29.bin b/code/sdk/files/n9/fs/user/res/findphone/29.bin new file mode 100644 index 000000000..92299243e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/3.bin b/code/sdk/files/n9/fs/user/res/findphone/3.bin new file mode 100644 index 000000000..1802ec1eb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/30.bin b/code/sdk/files/n9/fs/user/res/findphone/30.bin new file mode 100644 index 000000000..00a693c30 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/31.bin b/code/sdk/files/n9/fs/user/res/findphone/31.bin new file mode 100644 index 000000000..23fb37373 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/32.bin b/code/sdk/files/n9/fs/user/res/findphone/32.bin new file mode 100644 index 000000000..17de93c05 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/33.bin b/code/sdk/files/n9/fs/user/res/findphone/33.bin new file mode 100644 index 000000000..bfa8f9b3d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/34.bin b/code/sdk/files/n9/fs/user/res/findphone/34.bin new file mode 100644 index 000000000..d022b510e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/35.bin b/code/sdk/files/n9/fs/user/res/findphone/35.bin new file mode 100644 index 000000000..fa67d6b6a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/36.bin b/code/sdk/files/n9/fs/user/res/findphone/36.bin new file mode 100644 index 000000000..c5966a954 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/37.bin b/code/sdk/files/n9/fs/user/res/findphone/37.bin new file mode 100644 index 000000000..d945f94cb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/38.bin b/code/sdk/files/n9/fs/user/res/findphone/38.bin new file mode 100644 index 000000000..31ae7aa65 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/39.bin b/code/sdk/files/n9/fs/user/res/findphone/39.bin new file mode 100644 index 000000000..cee47b3f6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/4.bin b/code/sdk/files/n9/fs/user/res/findphone/4.bin new file mode 100644 index 000000000..04d569552 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/40.bin b/code/sdk/files/n9/fs/user/res/findphone/40.bin new file mode 100644 index 000000000..e305830af Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/41.bin b/code/sdk/files/n9/fs/user/res/findphone/41.bin new file mode 100644 index 000000000..0fe61b708 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/41.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/42.bin b/code/sdk/files/n9/fs/user/res/findphone/42.bin new file mode 100644 index 000000000..d3bcc47dd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/42.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/43.bin b/code/sdk/files/n9/fs/user/res/findphone/43.bin new file mode 100644 index 000000000..c1806abb3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/43.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/44.bin b/code/sdk/files/n9/fs/user/res/findphone/44.bin new file mode 100644 index 000000000..9dea25e9c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/44.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/45.bin b/code/sdk/files/n9/fs/user/res/findphone/45.bin new file mode 100644 index 000000000..a84a93cce Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/45.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/46.bin b/code/sdk/files/n9/fs/user/res/findphone/46.bin new file mode 100644 index 000000000..5f7e4a65e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/46.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/47.bin b/code/sdk/files/n9/fs/user/res/findphone/47.bin new file mode 100644 index 000000000..13ce8d79c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/47.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/48.bin b/code/sdk/files/n9/fs/user/res/findphone/48.bin new file mode 100644 index 000000000..738841fa5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/48.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/49.bin b/code/sdk/files/n9/fs/user/res/findphone/49.bin new file mode 100644 index 000000000..bcb02d981 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/49.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/5.bin b/code/sdk/files/n9/fs/user/res/findphone/5.bin new file mode 100644 index 000000000..b8cba58f2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/50.bin b/code/sdk/files/n9/fs/user/res/findphone/50.bin new file mode 100644 index 000000000..765673b85 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/50.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/6.bin b/code/sdk/files/n9/fs/user/res/findphone/6.bin new file mode 100644 index 000000000..557684390 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/7.bin b/code/sdk/files/n9/fs/user/res/findphone/7.bin new file mode 100644 index 000000000..cf9250d24 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/8.bin b/code/sdk/files/n9/fs/user/res/findphone/8.bin new file mode 100644 index 000000000..9da6f900e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/findphone/9.bin b/code/sdk/files/n9/fs/user/res/findphone/9.bin new file mode 100644 index 000000000..ad40414c7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/findphone/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/Flashlight.bin b/code/sdk/files/n9/fs/user/res/flashlight/Flashlight.bin new file mode 100644 index 000000000..92982c34a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/Flashlight.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_0.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_0.bin new file mode 100644 index 000000000..9acd6841d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_0.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_1.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_1.bin new file mode 100644 index 000000000..d6220951a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_2.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_2.bin new file mode 100644 index 000000000..96446e692 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_3.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_3.bin new file mode 100644 index 000000000..89282c996 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_4.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_4.bin new file mode 100644 index 000000000..accc7a674 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_5.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_5.bin new file mode 100644 index 000000000..2a68cb9e2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_6.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_6.bin new file mode 100644 index 000000000..b85617724 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_custom_bg.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_custom_bg.bin new file mode 100644 index 000000000..7e9b4b856 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_custom_bg.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_custom_selected.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_custom_selected.bin new file mode 100644 index 000000000..47888e1ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_custom_selected.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_selected.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_selected.bin new file mode 100644 index 000000000..591ebcef1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_selected.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/color_setting.bin b/code/sdk/files/n9/fs/user/res/flashlight/color_setting.bin new file mode 100644 index 000000000..5a02b1e1c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/color_setting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/flahing_setting.bin b/code/sdk/files/n9/fs/user/res/flashlight/flahing_setting.bin new file mode 100644 index 000000000..7153ae7fb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/flahing_setting.bin differ diff --git a/code/sdk/files/n9/fs/user/res/flashlight/up_arrow.bin b/code/sdk/files/n9/fs/user/res/flashlight/up_arrow.bin new file mode 100644 index 000000000..cef9678a4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/flashlight/up_arrow.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font/ar.lang b/code/sdk/files/n9/fs/user/res/font/ar.lang new file mode 100644 index 000000000..0f0e3415b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ar.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/az.lang b/code/sdk/files/n9/fs/user/res/font/az.lang new file mode 100644 index 000000000..76985f369 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/az.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/cs.lang b/code/sdk/files/n9/fs/user/res/font/cs.lang new file mode 100644 index 000000000..a5b0c52b0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/cs.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/de.lang b/code/sdk/files/n9/fs/user/res/font/de.lang new file mode 100644 index 000000000..78a86a991 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/de.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/el.lang b/code/sdk/files/n9/fs/user/res/font/el.lang new file mode 100644 index 000000000..94fdcdf3c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/el.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/en.lang b/code/sdk/files/n9/fs/user/res/font/en.lang new file mode 100644 index 000000000..079c3ea84 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/en.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/es.lang b/code/sdk/files/n9/fs/user/res/font/es.lang new file mode 100644 index 000000000..110fc4881 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/es.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/fa.lang b/code/sdk/files/n9/fs/user/res/font/fa.lang new file mode 100644 index 000000000..06dffe9f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/fa.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/fi.lang b/code/sdk/files/n9/fs/user/res/font/fi.lang new file mode 100644 index 000000000..973c9ca18 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/fi.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/fr.lang b/code/sdk/files/n9/fs/user/res/font/fr.lang new file mode 100644 index 000000000..7155f8720 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/fr.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/he.lang b/code/sdk/files/n9/fs/user/res/font/he.lang new file mode 100644 index 000000000..cbf17478e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/he.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/hi.lang b/code/sdk/files/n9/fs/user/res/font/hi.lang new file mode 100644 index 000000000..834c4833a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/hi.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/hr.lang b/code/sdk/files/n9/fs/user/res/font/hr.lang new file mode 100644 index 000000000..fa9fc66e8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/hr.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/id.lang b/code/sdk/files/n9/fs/user/res/font/id.lang new file mode 100644 index 000000000..fca02336f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/id.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/it.lang b/code/sdk/files/n9/fs/user/res/font/it.lang new file mode 100644 index 000000000..62ab8f936 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/it.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ja.lang b/code/sdk/files/n9/fs/user/res/font/ja.lang new file mode 100644 index 000000000..6a718d6ea Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ja.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ko.lang b/code/sdk/files/n9/fs/user/res/font/ko.lang new file mode 100644 index 000000000..14303ba5a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ko.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ms.lang b/code/sdk/files/n9/fs/user/res/font/ms.lang new file mode 100644 index 000000000..17f04c6b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ms.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/nl.lang b/code/sdk/files/n9/fs/user/res/font/nl.lang new file mode 100644 index 000000000..11d72318a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/nl.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/pl.lang b/code/sdk/files/n9/fs/user/res/font/pl.lang new file mode 100644 index 000000000..8bbce9a02 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/pl.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/pt.lang b/code/sdk/files/n9/fs/user/res/font/pt.lang new file mode 100644 index 000000000..06fa00b2c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/pt.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ro.lang b/code/sdk/files/n9/fs/user/res/font/ro.lang new file mode 100644 index 000000000..5cfefd79b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ro.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ru.lang b/code/sdk/files/n9/fs/user/res/font/ru.lang new file mode 100644 index 000000000..0772c8826 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/ru.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/sv.lang b/code/sdk/files/n9/fs/user/res/font/sv.lang new file mode 100644 index 000000000..4d99b7bd9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/sv.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/th.lang b/code/sdk/files/n9/fs/user/res/font/th.lang new file mode 100644 index 000000000..fcc7083f0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/th.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/tr.lang b/code/sdk/files/n9/fs/user/res/font/tr.lang new file mode 100644 index 000000000..a122977c4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/tr.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/ui_resource_string.h b/code/sdk/files/n9/fs/user/res/font/ui_resource_string.h new file mode 100644 index 000000000..1ac231f45 --- /dev/null +++ b/code/sdk/files/n9/fs/user/res/font/ui_resource_string.h @@ -0,0 +1,751 @@ +/* +* Copyright (c) xxxxxxxx Technologies Co., Ltd. 2021-2021. All rights reserved. +* Description: language +* Author: Graphic develop team +* Create: 2021-07-06 +*/ + +#ifndef UI_RESOURCE_STRING_H +#define UI_RESOURCE_STRING_H +#include +namespace OHOS { +enum UIResourceTextId : uint16_t { + STR_EXERCISE_OUTDOORWALKING = 0, + STR_EXERCISE_OUTDOORRUNNING = 1, + STR_EXERCISE_OUTDOORBIKING = 2, + STR_EXERCISE_GENERAL = 3, + STR_EXERCISE_FREETRAINING = 4, + STR_EXERCISE_RESISTANCETRAINING = 5, + STR_EXERCISE_SPINBIKE = 6, + STR_EXERCISE_TREADMILL = 7, + STR_EXERCISE_STROLLMACHINE = 8, + STR_EXERCISE_HIIT = 9, + STR_EXERCISE_CROSSFIT = 10, + STR_EXERCISE_GROUPCALISTHENICS = 11, + STR_EXERCISE_YOGA = 12, + STR_EXERCISE_YOGACAT = 13, + STR_EXERCISE_YOGACOW = 14, + STR_EXERCISE_YOGACOBRA = 15, + STR_EXERCISE_YOGAHERO1 = 16, + STR_EXERCISE_YOGAHERO2 = 17, + STR_EXERCISE_YOGAHERO3 = 18, + STR_EXERCISE_YOGAROLLING = 19, + STR_EXERCISE_INDOORWALKING = 20, + STR_EXERCISE_INDOORRUNNING = 21, + STR_EXERCISE_JUMPINGROPE = 22, + STR_EXERCISE_PILATES = 23, + STR_EXERCISE_CROSS_FIT = 24, + STR_EXERCISE_FUNCTIONALTRAINING = 25, + STR_EXERCISE_PHYSICALTRAINING = 26, + STR_EXERCISE_TAEKWONDO = 27, + STR_EXERCISE_BOXING = 28, + STR_EXERCISE_KICKBOXING = 29, + STR_EXERCISE_KARATE = 30, + STR_EXERCISE_FENCING = 31, + STR_EXERCISE_CORETRAINING = 32, + STR_EXERCISE_BODYCOMBAT = 33, + STR_EXERCISE_KENDO = 34, + STR_EXERCISE_HORIZONTALBAR = 35, + STR_EXERCISE_PARALLELBARS = 36, + STR_EXERCISE_CIRCUIT = 37, + STR_EXERCISE_AEROBICS = 38, + STR_EXERCISE_CALISTHENICE = 39, + STR_EXERCISE_P90X = 40, + STR_EXERCISE_KETTLEBELLTRAINING = 41, + STR_EXERCISE_MIXEDMARTIALARTS = 42, + STR_EXERCISE_STAIRCLIMBINGMACHINE = 43, + STR_EXERCISE_WEIGHTLIFTING = 44, + STR_EXERCISE_BARRE = 45, + STR_EXERCISE_HANDCYCLING = 46, + STR_EXERCISE_TRACKFIELD = 47, + STR_EXERCISE_WRESTLING = 48, + STR_EXERCISE_MINDBODY = 49, + STR_EXERCISE_FLEXIBILITY = 50, + STR_EXERCISE_MIXEDCARDIO = 51, + STR_EXERCISE_TRADITIONALSTRENGTHTRAINING = 52, + STR_EXERCISE_CROSSTRAINING = 53, + STR_EXERCISE_GYMNASTICS = 54, + STR_EXERCISE_STEPTRAINING = 55, + STR_EXERCISE_ELLIPTICALTRAINER = 56, + STR_EXERCISE_ROWINGMACHINE = 57, + STR_DANCING_GENERAL = 58, + STR_DANCING_BELLY = 59, + STR_DANCING_JAZZ = 60, + STR_DANCING_LATIN = 61, + STR_DANCING_BALLET = 62, + STR_DANCING_STREET = 63, + STR_DANCING_PUBLICSQUARE = 64, + STR_DANCING_ZUMBA = 65, + STR_DANCING_SOCIALDANCE = 66, + STR_DANCING_TAPDANCE = 67, + STR_RECREATIONAL_SPORTS = 68, + STR_RECREATIONAL_SKATING = 69, + STR_RECREATIONAL_MARTIALARTS = 70, + STR_RECREATIONAL_TAICHI = 71, + STR_RECREATIONAL_HULAHOOP = 72, + STR_RECREATIONAL_DISCSPORT = 73, + STR_RECREATIONAL_DARTS = 74, + STR_RECREATIONAL_ARCHERY = 75, + STR_RECREATIONAL_HORSERIDING = 76, + STR_RECREATIONAL_BATTLEGAME = 77, + STR_RECREATIONAL_KITE = 78, + STR_RECREATIONAL_TUGOFWAR = 79, + STR_RECREATIONAL_SWING = 80, + STR_RECREATIONAL_STAIRCLIMBING = 81, + STR_RECREATIONAL_OBSTACLERACE = 82, + STR_RECREATIONAL_FISHING = 83, + STR_RECREATIONAL_HUNTING = 84, + STR_RECREATIONAL_SCOOTERRIDING = 85, + STR_RECREATIONAL_PARAGLIDING = 86, + STR_RECREATIONAL_TEAMSPORTS = 87, + STR_RECREATIONAL_FINESSGAMING = 88, + STR_RECREATIONAL_HIKING = 89, + STR_RECREATIONAL_EQUESTRIANSPORTS = 90, + STR_RECREATIONAL_PLAY = 91, + STR_BALL_GAMES = 92, + STR_BALL_BADMINTON = 93, + STR_BALL_TABLETENNIS = 94, + STR_BALL_TENNIS = 95, + STR_BALL_BILLIARDS = 96, + STR_BALL_BOWLING = 97, + STR_BALL_VOLLEYBALL = 98, + STR_BALL_SHUTTLECOCK = 99, + STR_BALL_HANDBALL = 100, + STR_BALL_BASEBALL = 101, + STR_BALL_SOFTBALL = 102, + STR_BALL_CRICKET = 103, + STR_BALL_FOOTBALL = 104, + STR_BALL_BEACHSOCCER = 105, + STR_BALL_BEACHVOLLEYBALL = 106, + STR_BALL_CROQUET = 107, + STR_BALL_HOCKEY = 108, + STR_BALL_SQUASH = 109, + STR_BALL_SEPAKTAKRAW = 110, + STR_BALL_DODGEBALL = 111, + STR_BALL_BASKETBALL = 112, + STR_BALL_SOCCER = 113, + STR_BALL_GOLF = 114, + STR_BALL_POLO = 115, + STR_BALL_RACQUETBALL = 116, + STR_BALL_RUGBY = 117, + STR_BALL_GATEBALL = 118, + STR_BALL_PICKLEBALL = 119, + STR_BALL_LACROSSE = 120, + STR_WATER_ACTIVITIES = 121, + STR_WATER_SAILING = 122, + STR_WATER_SURFING = 123, + STR_WATER_WHITEWATERRAFTING = 124, + STR_WATER_CANOEING = 125, + STR_WATER_KAYAKING = 126, + STR_WATER_ROWING = 127, + STR_WATER_MOTORBOAT = 128, + STR_WATER_SUP = 129, + STR_WATER_SCUBADIVING = 130, + STR_WATER_DIVING = 131, + STR_WATER_KITESURFING = 132, + STR_WATER_WAKEBOARDING = 133, + STR_WATER_POLO = 134, + STR_WATER_WINDSURFING = 135, + STR_WATER_DRIFTING = 136, + STR_WATER_FITNESS = 137, + STR_WATER_SPORTS = 138, + STR_WATER_OUTDOORSWIM = 139, + STR_WATER_INDOORSWIM = 140, + STR_WATER_SWIMFREESTYLE = 141, + STR_WATER_SWIMBREASTSTROKE = 142, + STR_WATER_SWIMBACKSTROKE = 143, + STR_WATER_SWIMBUTTERFLY = 144, + STR_ICE_SPORTS = 145, + STR_ICE_SKATING = 146, + STR_ICE_HOCKEY = 147, + STR_ICE_CURLING = 148, + STR_ICE_SNOWMOBILING = 149, + STR_ICE_SLED = 150, + STR_ICE_BIATHLON = 151, + STR_ICE_CROSSCOUNTRYSKING = 152, + STR_ICE_SKIING = 153, + STR_ICE_SNOWBOARDING = 154, + STR_ICE_SNOWSHOEING = 155, + STR_ICE_SNOWSPORTS = 156, + STR_EXTREME_SPORTS = 157, + STR_EXTREME_SKATEBOARDING = 158, + STR_EXTREME_ROCKCLIMBING = 159, + STR_EXTREME_BUNGEEJUMPING = 160, + STR_EXTREME_PARKOUR = 161, + STR_EXTREME_BMX = 162, + STR_EXTREME_ORIENTEERING = 163, + STR_EXTREME_PARACHUTE = 164, + STR_EXTREME_RACING = 165, + STR_EXTREME_TRIATHLONS = 166, + STR_OTHER_ELEVATOR = 167, + STR_OTHER_ESCALATOR = 168, + STR_OTHER_GARDENING = 169, + STR_OTHER_HORSEWORK = 170, + STR_OTHER_INVEHICLE = 171, + STR_OTHER_MEDITATION = 172, + STR_OTHER_STILL = 173, + STR_OTHER_TILTING = 174, + STR_OTHER_WHEELCHAIR = 175, + STR_HEART_RATE = 176, + STR_BLOOD_OXYGEN = 177, + STR_TRAINING = 178, + STR_TRAINING_RECORD = 179, + STR_COMPASS = 180, + STR_TELEPHONE = 181, + STR_FAVORITE_CONTACTS = 182, + STR_WEATHER = 183, + STR_ACTIVITY = 184, + STR_WATCH_FACE = 185, + STR_DISPLAY_MODE = 186, + STR_CARD_MANAGEMENT = 187, + STR_MUSIC = 188, + STR_SLEEP = 189, + STR_RECORD = 190, + STR_BREATH_TRAINING = 191, + STR_REMOTE_SHOOTING = 192, + STR_VOICE_ASSISTANT = 193, + STR_ALIPAY = 194, + STR_TIMER = 195, + STR_ALARM = 196, + STR_STOPWATCH = 197, + STR_CALCULATOR = 198, + STR_FIND_PHONE = 199, + STR_BRIGHTNESS_ADJUSTMENT = 200, + STR_SOUND = 201, + STR_BLUETOOTH = 202, + STR_DO_NOT_DISTURB = 203, + STR_MESSAGE_NOTIFICATION = 204, + STR_POWER_SAVE_MODE = 205, + STR_FLASHLIGHT = 206, + STR_SETTINGS = 207, + STR_EXERCISE_LIST = 208, + STR_BALL_LIST = 209, + STR_WATER_LIST = 210, + STR_DANCING_LIST = 211, + STR_EXTREME_LIST = 212, + STR_ICE_LIST = 213, + STR_RECREATIONAL_LIST = 214, + STR_OTHER_LIST = 215, + STR_DANCING_TITLE = 216, + STR_BALL_LIST_TITLE = 217, + STR_OTHER_TITLE = 218, + STR_EXERCISE_TITLE = 219, + STR_RAPID_TRAINING = 220, + STR_SET_GOALS = 221, + STR_DURATION = 222, + STR_DURATION_SETTING = 223, + STR_CALORIE = 224, + STR_CALORIE_SETTING = 225, + STR_DISTANCE = 226, + STR_RANGE_SETTING = 227, + STR_STEP_NUMBER = 228, + STR_STEP_SETTING = 229, + STR_HEART_RATE_SETTING = 230, + STR_MEAN_HEART_RATE = 231, + STR_TIMES_PER_MIN = 232, + STR_MEAN_HEART_RATE_MIN = 233, + STR_LOWER_STRENGTH = 234, + STR_MEDIUM_STRENGTH = 235, + STR_HIGH_STRENGTH = 236, + STR_ULTRA_HIGH_STRENGTH = 237, + STR_TRAINING_INTENSITY = 238, + STR_TRAINING_IN_PROGRESS = 239, + STR_BREAK_TRAINING = 240, + STR_FINISH = 241, + STR_PAUSE = 242, + STR_RESUME = 243, + STR_GOAL_ACHIEVED = 244, + STR_ACCOMPLISH_GOAL = 245, + STR_OK = 246, + STR_LOOK_OUT = 247, + STR_INSUFFICIENT_EXERCISE_AMOUNT = 248, + STR_END_MOVEMENT = 249, + STR_END_THIS_MOVEMENT = 250, + STR_GOAL_ACCOMPLISHMENT_DEGREE = 251, + STR_TRAINING_DURATION = 252, + STR_RANGE_MILE = 253, + STR_CLOSE = 254, + STR_MORE = 255, + STR_MORE_APP = 256, + STR_SAVENOTE = 257, + STR_SAVEBACK = 258, + STR_SAVEASK = 259, + STR_BLOOD = 260, + STR_CHECK = 261, + STR_CHECKNEW = 262, + STR_CHECKTIME = 263, + STR_CHECKLONG = 264, + STR_CHECKNO = 265, + STR_CHECKNOTE = 266, + STR_CHECKON = 267, + STR_CHECKSTOP = 268, + STR_CHECKERROR = 269, + STR_WAERKEEP = 270, + STR_WEARRE = 271, + STR_WEARREADY = 272, + STR_RECHECK = 273, + STR_CHECKEWARN = 274, + STR_BLOODSHORT = 275, + STR_HEARTNOTE = 276, + STR_KONW = 277, + STR_EXPLAIN = 278, + STR_HEARTREST = 279, + STR_HEARTDATA = 280, + STR_HEARTTITLE = 281, + STR_HEARTMAX = 282, + STR_HEARTMIN = 283, + STR_TRAINGNO = 284, + STR_TRAINGGO = 285, + STR_MESSAGENO = 286, + STR_CLEAN = 287, + STR_CLEANALL = 288, + STR_SLEEP_YESTERDAY = 289, + STR_HOUR = 290, + STR_MIN = 291, + STR_SLEEPMGOAL = 292, + STR_REATTIME = 293, + STR_SLEEPTIME = 294, + STR_WALKTIME = 295, + STR_APPMORE = 296, + STR_DISTURB = 297, + STR_DISTURBNOTE = 298, + STR_MORNNING = 299, + STR_NOW = 300, + STR_NAP = 301, + STR_TACK = 302, + STR_CLICK = 303, + STR_TACKNUM = 304, + STR_SCREEN_AND_BRIGHTNESS = 305, + STR_NETWORKANDCALL = 306, + STR_SOUND_AND_VIBRATION = 307, + STR_MOTION_RECOGNITION = 308, + STR_SYSTEM = 309, + STR_SHUTDOWN_AND_RESTART = 310, + STR_SCREEN_ON_DURATION = 311, + STR_RAISE_TO_WAKE = 312, + STR_5_SECONDS = 313, + STR_10_SECONDS = 314, + STR_15_SECONDS = 315, + STR_30_SECONDS = 316, + STR_60_SECONDS = 317, + STR_300_SECONDS = 318, + STR_4G_CAPABILITY = 319, + STR_VOLTE_CALL = 320, + STR_MOBILE_DATA_OPTION = 321, + STR_SYSTEM_UPDATE = 322, + STR_ONLINE_MUSIC = 323, + STR_BLUETOOTH_HEADPHONES = 324, + STR_TRADITIONAL_BLUETOOTH = 325, + STR_AUTO_OFF_BLUETOOTH_NOTE = 326, + STR_BLUETOOTH_SERVICE_OPTIONS = 327, + STR_HFP = 328, + STR_A2DP = 329, + STR_SYSTEM_VOLUME = 330, + STR_MEDIA_VOLUME = 331, + STR_CALL_VOLUME = 332, + STR_VIBRATION_MODE = 333, + STR_SILENT_MODE = 334, + STR_LIST_DISPLAY = 335, + STR_GRID_DISPLAY = 336, + STR_CELLULAR_DISPLAY = 337, + STR_AUTO_DETECT = 338, + STR_ABOUT_WATCH = 339, + STR_WATCH_QR_CODE = 340, + STR_SYSTEM_LANGUAGE = 341, + STR_RESTART = 342, + STR_SHUTDOWN = 343, + STR_FACTORY_RESET = 344, + STR_WATCH_NAME = 345, + STR_FIRMWARE_VERSION = 346, + STR_BLUETOOTH_NAME = 347, + STR_BLUETOOTH_ADDRESS = 348, + STR_UPDATENOW = 349, + STR_LATEST_VERSION = 350, + STR_LATER = 351, + STR_UP_TO_DATE = 352, + STR_NO_UPDATE = 353, + STR_LANGUAGE_SELECTION = 354, + STR_RESET_CONFIRM = 355, + STR_SHUTDOWN_CONFIRM = 356, + STR_RESET_CONFIRM_NOTE = 357, + STR_RECORDER = 358, + STR_CLICK_TO_RECORD = 359, + STR_RECORDING = 360, + STR_AUDIO_XX = 361, + STR_VOICE_RECORDING_REMINDER = 362, + STR_VOICE_RECORDING_REMINDER_NOTE = 363, + STR_DELETE_RECORDING = 364, + STR_DELETE_PERMANENTLY = 365, + STR_RECORDING_LIST = 366, + STR_CRLEMPTY = 367, + STR_DO_NOT_DISTURB_MODE = 368, + STR_CONNECTION_STATUS = 369, + STR_PHONE = 370, + STR_HEADSET = 371, + STR_CONNECTED = 372, + STR_DISCONNECTED = 373, + STR_PHONE_RINGING_VIBRATING = 374, + STR_BLUETOOTH_DISCONNECTED = 375, + STR_STOP = 376, + STR_WORKDAY = 377, + STR_REPEAT_NO = 378, + STR_EVERYDAY = 379, + STR_ADD_A_NEW_ALARM = 380, + STR_TIME = 381, + STR_NEXT_STEP = 382, + STR_MON = 383, + STR_TUES = 384, + STR_WEDNES = 385, + STR_THURS = 386, + STR_FRI = 387, + STR_SATUR = 388, + STR_SUN = 389, + STR_MONDAY = 390, + STR_TUESDAY = 391, + STR_WEDNESDAY = 392, + STR_THURSDAY = 393, + STR_FRIDAY = 394, + STR_SATURDAY = 395, + STR_SUNDAY = 396, + STR_CALIBRATE_COMPASS = 397, + STR_CALIBRATE_COMPASS_NOTE = 398, + STR_EAST = 399, + STR_SOUTH = 400, + STR_WEST = 401, + STR_NORTH = 402, + STR_SOUTHEAST = 403, + STR_SOUTHWEST = 404, + STR_NORTHEAST = 405, + STR_NORTHWEST = 406, + STR_KEEP_STILL_FOCUS_ON_BREATHING = 407, + STR_EXHALE_NOW = 408, + STR_INHALE_NOW = 409, + STR_TRAINING_COMPLETE = 410, + STR_THIS_BREATH = 411, + STR_TODAYS_BREATHING_TRAINING = 412, + STR_RECENT_CALLS = 413, + STR_NO_CALLS = 414, + STR_MISSED_CALLS = 415, + STR_DIALED_CALLS = 416, + STR_RECEIVED_CALLS = 417, + STR_NOTE_RECENT_CALLS_LIMITATION = 418, + STR_NO_CONTACTS_ADDED = 419, + STR_DIAL_MODE = 420, + STR_DIAL_VIA_WATCH_SIM = 421, + STR_DIAL_VIA_PHONE = 422, + STR_KUMI_TECHNOLOGY = 423, + STR_CALLING = 424, + STR_NOT_PAIRED = 425, + STR_PAIRED = 426, + STR_UNPAIR = 427, + STR_CONNECTION_ERROR = 428, + STR_INSERT_WATCH_SIM_OR_CONNECT_PHONE = 429, + STR_ENABLE_BLUETOOTH_CALL = 430, + STR_SOLUTION = 431, + STR_IPHONE = 432, + STR_ANDROID = 433, + STR_ENABLE_BLUETOOTH_CALL_NOTE_IPHONE = 434, + STR_ENABLE_BLUETOOTH_CALL_NOTE_ANDROID = 435, + STR_SIM_CARD_ERROR = 436, + STR_CHECK_SIM_CARD_INSERTION = 437, + STR_WEATHER_REPORT = 438, + STR_ULTRAVIOLET = 439, + STR_WIND_SPEED = 440, + STR_HUMIDITY = 441, + STR_NEXT_7_DAYS = 442, + STR_GET_WEATHER_ERROR = 443, + STR_MUSIC_SOURCE = 444, + STR_MOBILE_MUSIC = 445, + STR_WATCH_MUSIC = 446, + STR_MUSIC_LIST = 447, + STR_BLUETOOTH_CONNECTION_FAILED = 448, + STR_SCANNING_BINDING = 449, + STR_DEVICE_BINDING = 450, + STR_DEVICE_BINDING_NOTE = 451, + STR_EQUIPMENT_UNTYING = 452, + STR_EQUIPMENT_UNTYING_NOTE = 453, + STR_DRINK_WATER_REMINDER = 454, + STR_DRINK_WATER_REMINDER_NOTE = 455, + STR_SEDENTARY_REMINDER = 456, + STR_SEDENTARY_REMINDER_NOTE = 457, + STR_SYSTEM_UPGRADING = 458, + STR_NEWDEVICE_BIND_REMIND_NOTE1 = 459, + STR_NEWDEVICE_BIND_REMIND_NOTE2 = 460, + STR_NEWDEVICE_BIND_REMIND_NOTE3 = 461, + STR_AI_VOICE = 462, + STR_AI_INTELLIGENT_ASSISTANT = 463, + STR_START_CHAT = 464, + STR_BOOT_FAILED = 465, + STR_ENABLE_MOBILE_DATA_FIRST = 466, + STR_ENABLE_BLUETOOTH_FIRST = 467, + STR_LISTENING = 468, + STR_FINISH_SPEAKING = 469, + STR_THINKING = 470, + STR_CANCEL = 471, + STR_CONNECT_TIMEOUT = 472, + STR_PLEASE_RESTART_CHAT = 473, + STR_CONTINUE_CHAT = 474, + STR_AIMODELS_DOUBAO = 475, + STR_AIMODES_WENXINYIYAN = 476, + STR_AIMODES_KIMI = 477, + STR_AIMODES_CHATGPT = 478, + STR_SLIDE_TO_SHUTDOWN = 479, + STR_SLIDE_TO_REBOOT = 480, + STR_AI_FAMILY_MEALS = 481, + STR_CHAT = 482, + STR_PCY4GC_OR_AS = 483, + STR_API_KEYS = 484, + STR_PGTTAF = 485, + STR_DAFBS = 486, + STR_OPENAI_API_KEYS = 487, + STR_KHBB = 488, + STR_GTAS = 489, + STR_DYWTDAK = 490, + STR_CONNECTING = 491, + STR_CONNECTION_FAIL = 492, + STR_PTALORTM = 493, + STR_MOTION_DETECTION_WALK_NOTE = 494, + STR_MOTION_DETECTION_RUN_NOTE = 495, + STR_MOTION_DETECTION_RIDE_NOTE = 496, + STR_MOTION_DETECTION_ROWING_NOTE = 497, + STR_MOTION_DETECTION_ELLIPTICAL_NOTE = 498, + STR_PE4GC = 499, + STR_OBU_MESSAGE = 500, + STR_DELETE = 501, + STR_CHARGE = 502, + STR_CHARGE_NOTE = 503, + STR_STEP_FREQUENCY = 504, + STR_STEP_LENGTH = 505, + STR_AVG_PACE = 506, + STR_TONGYI_QIANWEN = 507, + STR_IFLYTEK_SPARK = 508, + STR_DISTURBNOTE_OFF = 509, + STR_4G_NOTE = 510, + STR_MUSIC_PLAYER_SOURCE_NOTE = 511, + STR_MUSIC_LIST_IS_EMPTY = 512, + STR_BT_HEADSET_RESCAN = 513, + STR_BT_HEADSET_NOFOND = 514, + STR_SCHEDULE = 515, + STR_SCHEDULE_TITLE = 516, + STR_SCHEDULE_NO_DATA = 517, + STR_SCHEDULE_NO_DATA_PROMPT = 518, + STR_NO_PAIRED_DEV = 519, + STR_IGNORE = 520, + STR_START = 521, + STR_ARC_SCALE_LIST_DISPLAY = 522, + STR_COUNT_DOWN = 523, + STR_CUSTOM_TIME = 524, + STR_QUICK_START = 525, + STR_1_MIN = 526, + STR_5_MIN = 527, + STR_10_MIN = 528, + STR_30_MIN = 529, + STR_SET_COUNT_DOWN_NOTE = 530, + STR_COUNTDOWN_ENDS = 531, + STR_MAXIMUM_TIME_REACH_NOTE = 532, + STR_STOPWATCH_STOP_NOTE = 533, + STR_TMCHBR = 534, + STR_SCHEDULE_TOPIC = 535, + STR_SCHEDULE_TIME = 536, + STR_SCHEDULE_NOTES = 537, + STR_SCHEDULE_DELETE_PROMPT = 538, + STR_HANG_UP_OR_ANSWER = 539, + STR_WATCH_CALL = 540, + STR_PHONE_CALL = 541, + STR_STEPS_OF_THE_DAY = 542, + STR_MILEAGE = 543, + STR_FAT_BURNING_TIME = 544, + STR_NUMBER_OF_STANDS = 545, + STR_CONSUME_CALORIES = 546, + STR_GOAL_HINT = 547, + STR_SLEEPMODE = 548, + STR_SLEEP_MODE_PROMPT_ON = 549, + STR_LOW_POWER_NOTIF_1 = 550, + STR_LOW_POWER_NOTIF_2 = 551, + STR_CONNECTION_SUCC = 552, + STR_RETRY = 553, + STR_BTEARPHONE_CONN_FAIL_TIP = 554, + STR_FLASHLIGHT_SETTING = 555, + STR_LIGHT_COLOR = 556, + STR_FLICKER_FREQUENCY = 557, + STR_NO_FLICKER = 558, + STR_FAST_FLICKER = 559, + STR_SLOW_FLICKER = 560, + STR_BROWSING_SPECIAL_EFFECTS = 561, + STR_OVERLAY_FLOW = 562, + STR_ROLLER = 563, + STR_DIAL_BROWSING_SPECIAL_EFFECTS = 564, + STR_SET_TARGET = 565, + STR_PWUWC = 566, + STR_CALENDAR = 567, + STR_ALARM_DELETE_NOTE = 568, + STR_ALARM_TIME_CHANGE = 569, + STR_ALARM_WEEK_CHANGE = 570, + STR_ALARM_REPEAT = 571, + STR_ALARM_ADD_LIMIT_NOTE = 572, + STR_MOTION_RECOGNITION_NOTE = 573, + STR_DURATION_SETTINGS = 574, + STR_2_MIN = 575, + STR_3_MIN = 576, + STR_4_MIN = 577, + STR_ONE_MIN = 578, + STR_TWO_MIN = 579, + STR_THREE_MIN = 580, + STR_FOUR_MIN = 581, + STR_FIVE_MIN = 582, + STR_MUSIC_TRANSMIT = 583, + STR_MUSIC_TRANSMIT_NOTE = 584, + STR_MUSIC_TRANSMIT_SUCCESS_NOTE = 585, + STR_OTA_DOWNLOAD = 586, + STR_OTA_DOWNLOADING = 587, + STR_OTA_DOWNLOADFIAL = 588, + STR_OTA_DOWNLOADFIAL_TRY = 589, + STR_OTA_DOWNLOADSUCC = 590, + STR_OTA_DOWNLOADSUCC_UPDATA = 591, + STR_DIAL_DOWNLOADING_TITLE = 592, + STR_DIAL_DOWNLOADING_LABEL = 593, + STR_MP3_SUCC_TITLE = 594, + STR_DIAL_SUCC_TITLE = 595, + STR_DIAL_SUCC_LABEL = 596, + STR_DIAL_FAIL_TITLE = 597, + STR_DIAL_FAIL_LABEL = 598, + STR_MP3_FAIL_TITL = 599, + STR_MP3_FAIL_LABEL = 600, + STR_CALLSOMEONE = 601, + STR_BLUENOTE = 602, + STR_VOICE_FAIL = 603, + STR_WAKE_VOIVE = 604, + STR_TIME_SET = 605, + STR_FORMAT = 606, + STR_FORMAT_NOTE = 607, + STR_SLEEP_UPDATE = 608, + STR_CAMERA = 609, + STR_GOAL_TITLE = 610, + STR_HEART_HIAGER = 611, + STR_CHARG_DOWN = 612, + STR_CHAEGING = 613, + STR_GOAL_DOWN = 614, + STR_OPERAT_FAIL = 615, + STR_DIAL_NOTE = 616, + STR_HEART_UNKOWN = 617, + STR_HEART_AVAILABLE = 618, + STR_HEART_JUST = 619, + STR_HEART_MIN_AGO = 620, + STR_HEART_HOUR_AGO = 621, + STR_RECORDS_20 = 622, + STR_RECORDS_NOTE = 623, + STR_RECORDS_DELETE = 624, + STR_NEW_INCOM = 625, + STR_NET_ERROR = 626, + STR_LANGUAGE_SELECTION_NOTE = 627, + STR_AUTO_OFF_BLUETOOTH_NOTE2 = 628, + STR_PHONE_MUSCI_NOTE = 629, + STR_TIME_FORMAT_SET = 630, + STR_DIAL_PLATE = 631, + STR_SLEEP_NOTIFY = 632, + STR_SLEEP_NOTE = 633, + STR_MAX_CARD = 634, + STR_NUM_LENGTH = 635, + STR_CALL_LIST = 636, + STR_DELETE_ALL = 637, + STR_FRE_CONTACT = 638, + STR_RECORD_MAX = 639, + STR_CLEAR_ALL_RECORDS = 640, + STR_DEEPSEEK = 641, + STR_BP_CHECK = 642, + STR_BP_CALIBRATE = 643, + STR_MEARURING = 644, + STR_MEASURING_KEEP_STILL = 645, + STR_RECALIBRATE = 646, + STR_CALIBRATION_DONE = 647, + STR_CALIBRATION_FAILED = 648, + STR_MEASUREMENT_DONE = 649, + STR_CALIBRATION_REMINDER = 650, + STR_USE_TRAD_SPHYGM = 651, + STR_CONFIRM = 652, + STR_CAL_RES_UPLOADED_30D = 653, + STR_RES_ANALYZING = 654, + STR_ANALYZING_DONT_EXIT = 655, + STR_FIRST_CAL_KEEP_STILL = 656, + STR_SECOND_CAL_KEEP_STILL = 657, + STR_ENTER_BP_READ = 658, + STR_SBP = 659, + STR_DBP = 660, + STR_NORMAL = 661, + STR_ELEVATED = 662, + STR_WARNING = 663, + STR_SBP_ELEVATED = 664, + STR_WARN_THRESH = 665, + STR_BP_WARN_CONSULT_DOC = 666, + STR_MEAS_FAILED = 667, + STR_CALIBRATING = 668, + STR_S = 669, + STR_PRESSURE = 670, + STR_WEAR_WATCH_DET = 671, + STR_RE_MEAS = 672, + STR_DATA_ANAL_WAIT = 673, + STR_EMOTION = 674, + STR_PLEASURE = 675, + STR_COMPLEX_NEG_EMO = 676, + STR_MEASURE = 677, + STR_FINGER_LEAD_PORT = 678, + STR_START_MEAS = 679, + STR_WEAR_TIGHT_FINGER_LEAD = 680, + STR_NO_FINGER_MOVE = 681, + STR_CONNECT_APP_4G = 682, + STR_FINGER_LEAD_TILL_VAL = 683, + STR_SINUS_HR = 684, + STR_APP_REPORT_NOT_CLIN = 685, + STR_FATIGUE_LEVEL = 686, + STR_BP_MODEL_2CAL = 687, + STR_RECAL_MONTHLY = 688, + STR_SAME_ARM_CALIB = 689, + STR_HYPERTENSIVE_PREPOST_CAL = 690, + STR_CALIB_POSTURE_GUIDE = 691, + STR_START_CAL = 692, + STR_CALIB_POSTURE_REQ = 693, + STR_ECG = 694, + STR_JIUTIAN = 695, + STR_LAST_CALIBRATION_TIME = 696, + STR_CALIBRATE = 697, + STR_CALIBRATION_SUGGESTION = 698, + STR_CALIBRATION_PATH = 699, + STR_START_AI = 700, + STR_MAX_ID = 701, +}; // UIResourceTextId + +enum FontLanguageId : uint8_t { + LANGUAGE_ID_AR, + LANGUAGE_ID_AZ, + LANGUAGE_ID_CS, + LANGUAGE_ID_DE, + LANGUAGE_ID_EL, + LANGUAGE_ID_EN, + LANGUAGE_ID_ES, + LANGUAGE_ID_FA, + LANGUAGE_ID_FI, + LANGUAGE_ID_FR, + LANGUAGE_ID_HE, + LANGUAGE_ID_HI, + LANGUAGE_ID_HR, + LANGUAGE_ID_ID, + LANGUAGE_ID_IT, + LANGUAGE_ID_JA, + LANGUAGE_ID_KO, + LANGUAGE_ID_MS, + LANGUAGE_ID_NL, + LANGUAGE_ID_PL, + LANGUAGE_ID_PT, + LANGUAGE_ID_RO, + LANGUAGE_ID_RU, + LANGUAGE_ID_SV, + LANGUAGE_ID_TH, + LANGUAGE_ID_TR, + LANGUAGE_ID_UK, + LANGUAGE_ID_UZ, + LANGUAGE_ID_VI, + LANGUAGE_ID_ZH, + LANGUAGE_ID_MAX +}; // UITextLanguageTextId +} +#endif /* UI_RESOURCE_STRING_H */ diff --git a/code/sdk/files/n9/fs/user/res/font/uk.lang b/code/sdk/files/n9/fs/user/res/font/uk.lang new file mode 100644 index 000000000..6d40546c6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/uk.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/uz.lang b/code/sdk/files/n9/fs/user/res/font/uz.lang new file mode 100644 index 000000000..f62890bfc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/uz.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/vi.lang b/code/sdk/files/n9/fs/user/res/font/vi.lang new file mode 100644 index 000000000..f46339156 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/vi.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font/zh.lang b/code/sdk/files/n9/fs/user/res/font/zh.lang new file mode 100644 index 000000000..1b28015ad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font/zh.lang differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ar.bin b/code/sdk/files/n9/fs/user/res/font_bin/ar.bin new file mode 100644 index 000000000..e55f7ee52 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ar.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/az.bin b/code/sdk/files/n9/fs/user/res/font_bin/az.bin new file mode 100644 index 000000000..30415fecc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/az.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/cs.bin b/code/sdk/files/n9/fs/user/res/font_bin/cs.bin new file mode 100644 index 000000000..541128861 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/cs.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/de.bin b/code/sdk/files/n9/fs/user/res/font_bin/de.bin new file mode 100644 index 000000000..4b8959202 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/de.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/el.bin b/code/sdk/files/n9/fs/user/res/font_bin/el.bin new file mode 100644 index 000000000..08feaac9f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/el.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/en.bin b/code/sdk/files/n9/fs/user/res/font_bin/en.bin new file mode 100644 index 000000000..fcbd98ed7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/en.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/es.bin b/code/sdk/files/n9/fs/user/res/font_bin/es.bin new file mode 100644 index 000000000..6f10342ab Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/es.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/fa.bin b/code/sdk/files/n9/fs/user/res/font_bin/fa.bin new file mode 100644 index 000000000..3c02cd88f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/fa.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/fi.bin b/code/sdk/files/n9/fs/user/res/font_bin/fi.bin new file mode 100644 index 000000000..736fdabfa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/fi.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/fr.bin b/code/sdk/files/n9/fs/user/res/font_bin/fr.bin new file mode 100644 index 000000000..0b2168c57 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/fr.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/he.bin b/code/sdk/files/n9/fs/user/res/font_bin/he.bin new file mode 100644 index 000000000..40cca4ead Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/he.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/hi.bin b/code/sdk/files/n9/fs/user/res/font_bin/hi.bin new file mode 100644 index 000000000..a886e3b4e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/hi.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/hr.bin b/code/sdk/files/n9/fs/user/res/font_bin/hr.bin new file mode 100644 index 000000000..6c2d2f054 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/hr.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/id.bin b/code/sdk/files/n9/fs/user/res/font_bin/id.bin new file mode 100644 index 000000000..f96a1bc83 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/id.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/it.bin b/code/sdk/files/n9/fs/user/res/font_bin/it.bin new file mode 100644 index 000000000..0c375d9f7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/it.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ja.bin b/code/sdk/files/n9/fs/user/res/font_bin/ja.bin new file mode 100644 index 000000000..7a8cea140 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ja.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ko.bin b/code/sdk/files/n9/fs/user/res/font_bin/ko.bin new file mode 100644 index 000000000..df2082733 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ko.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ms.bin b/code/sdk/files/n9/fs/user/res/font_bin/ms.bin new file mode 100644 index 000000000..7dd1cbf97 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ms.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/nl.bin b/code/sdk/files/n9/fs/user/res/font_bin/nl.bin new file mode 100644 index 000000000..506657c49 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/nl.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/pl.bin b/code/sdk/files/n9/fs/user/res/font_bin/pl.bin new file mode 100644 index 000000000..95c985e3e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/pl.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/pt.bin b/code/sdk/files/n9/fs/user/res/font_bin/pt.bin new file mode 100644 index 000000000..de5a0dad9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/pt.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ro.bin b/code/sdk/files/n9/fs/user/res/font_bin/ro.bin new file mode 100644 index 000000000..d3913dcd0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ro.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/ru.bin b/code/sdk/files/n9/fs/user/res/font_bin/ru.bin new file mode 100644 index 000000000..142bd062c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/ru.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/sv.bin b/code/sdk/files/n9/fs/user/res/font_bin/sv.bin new file mode 100644 index 000000000..8a1688d26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/sv.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/th.bin b/code/sdk/files/n9/fs/user/res/font_bin/th.bin new file mode 100644 index 000000000..886a84b17 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/th.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/tr.bin b/code/sdk/files/n9/fs/user/res/font_bin/tr.bin new file mode 100644 index 000000000..4a81554d0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/tr.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/uk.bin b/code/sdk/files/n9/fs/user/res/font_bin/uk.bin new file mode 100644 index 000000000..d785cb1b2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/uk.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/uz.bin b/code/sdk/files/n9/fs/user/res/font_bin/uz.bin new file mode 100644 index 000000000..c915fcdb6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/uz.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/vi.bin b/code/sdk/files/n9/fs/user/res/font_bin/vi.bin new file mode 100644 index 000000000..02d4d2a0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/vi.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_bin/zh.bin b/code/sdk/files/n9/fs/user/res/font_bin/zh.bin new file mode 100644 index 000000000..90daef6ef Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_bin/zh.bin differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf b/code/sdk/files/n9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf new file mode 100644 index 000000000..ffa363f11 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Audiowide_Regular.ttf b/code/sdk/files/n9/fs/user/res/font_library/Audiowide_Regular.ttf new file mode 100644 index 000000000..348817d57 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Audiowide_Regular.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/DejaVuSans.ttf b/code/sdk/files/n9/fs/user/res/font_library/DejaVuSans.ttf new file mode 100644 index 000000000..27cff476e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/DejaVuSans.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Gilroy_Bold.ttf b/code/sdk/files/n9/fs/user/res/font_library/Gilroy_Bold.ttf new file mode 100644 index 000000000..2704cd67d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Gilroy_Bold.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Handjet.ttf b/code/sdk/files/n9/fs/user/res/font_library/Handjet.ttf new file mode 100644 index 000000000..5a1489383 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Handjet.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf b/code/sdk/files/n9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf new file mode 100644 index 000000000..01e01c59a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Orbit-Regular.ttf b/code/sdk/files/n9/fs/user/res/font_library/Orbit-Regular.ttf new file mode 100644 index 000000000..db9562d1c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Orbit-Regular.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/Sheeping_Cats.ttf b/code/sdk/files/n9/fs/user/res/font_library/Sheeping_Cats.ttf new file mode 100644 index 000000000..31705c9fe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/Sheeping_Cats.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/font_library/hindi.ttf b/code/sdk/files/n9/fs/user/res/font_library/hindi.ttf new file mode 100644 index 000000000..14479c192 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/font_library/hindi.ttf differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/background.bin b/code/sdk/files/n9/fs/user/res/heart_chart/background.bin new file mode 100644 index 000000000..582ff3b1a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/background.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/buttomicon.bin b/code/sdk/files/n9/fs/user/res/heart_chart/buttomicon.bin new file mode 100644 index 000000000..45116af9c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/buttomicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon.bin new file mode 100644 index 000000000..873aecf3f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin new file mode 100644 index 000000000..2f8cd4f1e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin new file mode 100644 index 000000000..891a935cf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin new file mode 100644 index 000000000..2b2edb49a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin new file mode 100644 index 000000000..beae56c34 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin new file mode 100644 index 000000000..0388bcc01 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin new file mode 100644 index 000000000..a72943ad8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin new file mode 100644 index 000000000..6d9ec7843 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin new file mode 100644 index 000000000..5e744d9a8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin new file mode 100644 index 000000000..8bf49170b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin new file mode 100644 index 000000000..2b008f5b0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin new file mode 100644 index 000000000..20d974e6f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin new file mode 100644 index 000000000..135e07107 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin new file mode 100644 index 000000000..92d22bc62 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin new file mode 100644 index 000000000..3ee1144f0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin new file mode 100644 index 000000000..eb18d2583 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin new file mode 100644 index 000000000..92f19e01d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin new file mode 100644 index 000000000..efd3bb0a5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin new file mode 100644 index 000000000..883fa2a2e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin new file mode 100644 index 000000000..87f39bc20 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin new file mode 100644 index 000000000..7b91033dc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin new file mode 100644 index 000000000..2f8cd4f1e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/heart_chart/topicon.bin b/code/sdk/files/n9/fs/user/res/heart_chart/topicon.bin new file mode 100644 index 000000000..f5f5549b8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/heart_chart/topicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/line_cj.brk b/code/sdk/files/n9/fs/user/res/line_cj.brk new file mode 100644 index 000000000..53512178d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/line_cj.brk differ diff --git a/code/sdk/files/n9/fs/user/res/lowpower.bin b/code/sdk/files/n9/fs/user/res/lowpower.bin new file mode 100644 index 000000000..150d617be Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/lowpower.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/dial.bin b/code/sdk/files/n9/fs/user/res/makephone/dial.bin new file mode 100644 index 000000000..b576c05e1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/dial.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/headset_1.bin b/code/sdk/files/n9/fs/user/res/makephone/headset_1.bin new file mode 100644 index 000000000..02be3a112 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/headset_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/headset_2.bin b/code/sdk/files/n9/fs/user/res/makephone/headset_2.bin new file mode 100644 index 000000000..14eb369f3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/headset_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/headset_3.bin b/code/sdk/files/n9/fs/user/res/makephone/headset_3.bin new file mode 100644 index 000000000..362a3798f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/headset_3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/microphone.bin b/code/sdk/files/n9/fs/user/res/makephone/microphone.bin new file mode 100644 index 000000000..7c719cfca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/microphone.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/microphone_1.bin b/code/sdk/files/n9/fs/user/res/makephone/microphone_1.bin new file mode 100644 index 000000000..e1edbb918 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/microphone_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/person.bin b/code/sdk/files/n9/fs/user/res/makephone/person.bin new file mode 100644 index 000000000..699a01e26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/person.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/vector.bin b/code/sdk/files/n9/fs/user/res/makephone/vector.bin new file mode 100644 index 000000000..a08c7895a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/vector.bin differ diff --git a/code/sdk/files/n9/fs/user/res/makephone/voice.bin b/code/sdk/files/n9/fs/user/res/makephone/voice.bin new file mode 100644 index 000000000..59f2276a4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/makephone/voice.bin differ diff --git a/code/sdk/files/n9/fs/user/res/message/Icon.bin b/code/sdk/files/n9/fs/user/res/message/Icon.bin new file mode 100644 index 000000000..4c57c3f29 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/message/Icon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/message/Line.bin b/code/sdk/files/n9/fs/user/res/message/Line.bin new file mode 100644 index 000000000..96332ba8e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/message/Line.bin differ diff --git a/code/sdk/files/n9/fs/user/res/message/disturbicon.bin b/code/sdk/files/n9/fs/user/res/message/disturbicon.bin new file mode 100644 index 000000000..21226544d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/message/disturbicon.bin differ diff --git a/code/sdk/files/n9/fs/user/res/message/message.bin b/code/sdk/files/n9/fs/user/res/message/message.bin new file mode 100644 index 000000000..c3799e3f9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/message/message.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD1.bin b/code/sdk/files/n9/fs/user/res/record/RECORD1.bin new file mode 100644 index 000000000..d1322a55e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD2.bin b/code/sdk/files/n9/fs/user/res/record/RECORD2.bin new file mode 100644 index 000000000..387fa4073 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD3.bin b/code/sdk/files/n9/fs/user/res/record/RECORD3.bin new file mode 100644 index 000000000..f1c2f15d6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin new file mode 100644 index 000000000..57a72780b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_DELETE.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_DELETE.bin new file mode 100644 index 000000000..3734ac8ef Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_DELETE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_NEXT.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_NEXT.bin new file mode 100644 index 000000000..72567d16e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_NEXT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_PROVE.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_PROVE.bin new file mode 100644 index 000000000..893d42d9a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_PROVE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_VOLUME.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_VOLUME.bin new file mode 100644 index 000000000..7af937be9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PLAY_VOLUME.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/RECORD_PROGRESS_BG.bin b/code/sdk/files/n9/fs/user/res/record/RECORD_PROGRESS_BG.bin new file mode 100644 index 000000000..be552043b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/RECORD_PROGRESS_BG.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PAUSE.bin b/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PAUSE.bin new file mode 100644 index 000000000..93008102a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PAUSE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PLAY.bin b/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PLAY.bin new file mode 100644 index 000000000..65be736c3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/record/UNIVERSAL_PLAY.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/1.bin b/code/sdk/files/n9/fs/user/res/remind/bind/1.bin new file mode 100644 index 000000000..981c52067 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/10.bin b/code/sdk/files/n9/fs/user/res/remind/bind/10.bin new file mode 100644 index 000000000..77e2cd281 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/11.bin b/code/sdk/files/n9/fs/user/res/remind/bind/11.bin new file mode 100644 index 000000000..7c8867bbf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/12.bin b/code/sdk/files/n9/fs/user/res/remind/bind/12.bin new file mode 100644 index 000000000..4430cff98 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/13.bin b/code/sdk/files/n9/fs/user/res/remind/bind/13.bin new file mode 100644 index 000000000..8fe78fad3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/14.bin b/code/sdk/files/n9/fs/user/res/remind/bind/14.bin new file mode 100644 index 000000000..0d706becc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/15.bin b/code/sdk/files/n9/fs/user/res/remind/bind/15.bin new file mode 100644 index 000000000..8c88b2da1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/16.bin b/code/sdk/files/n9/fs/user/res/remind/bind/16.bin new file mode 100644 index 000000000..78fa23881 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/17.bin b/code/sdk/files/n9/fs/user/res/remind/bind/17.bin new file mode 100644 index 000000000..a84b31080 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/18.bin b/code/sdk/files/n9/fs/user/res/remind/bind/18.bin new file mode 100644 index 000000000..fbc7f4a1b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/19.bin b/code/sdk/files/n9/fs/user/res/remind/bind/19.bin new file mode 100644 index 000000000..7c837b1e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/2.bin b/code/sdk/files/n9/fs/user/res/remind/bind/2.bin new file mode 100644 index 000000000..405ba80aa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/20.bin b/code/sdk/files/n9/fs/user/res/remind/bind/20.bin new file mode 100644 index 000000000..5691693a7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/21.bin b/code/sdk/files/n9/fs/user/res/remind/bind/21.bin new file mode 100644 index 000000000..4940ef8df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/22.bin b/code/sdk/files/n9/fs/user/res/remind/bind/22.bin new file mode 100644 index 000000000..caf127bb1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/23.bin b/code/sdk/files/n9/fs/user/res/remind/bind/23.bin new file mode 100644 index 000000000..1670de17d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/24.bin b/code/sdk/files/n9/fs/user/res/remind/bind/24.bin new file mode 100644 index 000000000..1248aaffb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/25.bin b/code/sdk/files/n9/fs/user/res/remind/bind/25.bin new file mode 100644 index 000000000..7c3bf6cbb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/3.bin b/code/sdk/files/n9/fs/user/res/remind/bind/3.bin new file mode 100644 index 000000000..4d5b4fefe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/4.bin b/code/sdk/files/n9/fs/user/res/remind/bind/4.bin new file mode 100644 index 000000000..102776ad2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/5.bin b/code/sdk/files/n9/fs/user/res/remind/bind/5.bin new file mode 100644 index 000000000..b7387b6a9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/6.bin b/code/sdk/files/n9/fs/user/res/remind/bind/6.bin new file mode 100644 index 000000000..7468e3a90 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/7.bin b/code/sdk/files/n9/fs/user/res/remind/bind/7.bin new file mode 100644 index 000000000..34171da9e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/8.bin b/code/sdk/files/n9/fs/user/res/remind/bind/8.bin new file mode 100644 index 000000000..d39baf224 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/bind/9.bin b/code/sdk/files/n9/fs/user/res/remind/bind/9.bin new file mode 100644 index 000000000..01bb9edc6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/bind/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/1.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/1.bin new file mode 100644 index 000000000..9f1299c0c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/10.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/10.bin new file mode 100644 index 000000000..aba8a23f2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/11.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/11.bin new file mode 100644 index 000000000..92f55d3a9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/12.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/12.bin new file mode 100644 index 000000000..e4587ab2d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/13.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/13.bin new file mode 100644 index 000000000..32b37ce63 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/14.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/14.bin new file mode 100644 index 000000000..32b37ce63 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/15.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/15.bin new file mode 100644 index 000000000..9fbaf9541 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/16.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/16.bin new file mode 100644 index 000000000..249e1fcf0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/17.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/17.bin new file mode 100644 index 000000000..f7f1529e1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/18.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/18.bin new file mode 100644 index 000000000..0fa409149 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/19.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/19.bin new file mode 100644 index 000000000..c34db509d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/2.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/2.bin new file mode 100644 index 000000000..4cf0213ff Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/20.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/20.bin new file mode 100644 index 000000000..a1033ceca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/21.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/21.bin new file mode 100644 index 000000000..0e8dfeaa3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/22.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/22.bin new file mode 100644 index 000000000..98457b13c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/23.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/23.bin new file mode 100644 index 000000000..be9f6a22b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/24.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/24.bin new file mode 100644 index 000000000..522fa4bd3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/25.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/25.bin new file mode 100644 index 000000000..221652125 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/3.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/3.bin new file mode 100644 index 000000000..141c7a37e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/4.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/4.bin new file mode 100644 index 000000000..e7b15cf92 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/5.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/5.bin new file mode 100644 index 000000000..245679761 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/6.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/6.bin new file mode 100644 index 000000000..582c8bdee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/7.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/7.bin new file mode 100644 index 000000000..8774b852a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/8.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/8.bin new file mode 100644 index 000000000..8c16538f0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/remind/unbind/9.bin b/code/sdk/files/n9/fs/user/res/remind/unbind/9.bin new file mode 100644 index 000000000..2d39bfd09 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/remind/unbind/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin new file mode 100644 index 000000000..d875fde65 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CARDSET.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CARDSET.bin new file mode 100644 index 000000000..a524871fc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CARDSET.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin new file mode 100644 index 000000000..458e306d0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin new file mode 100644 index 000000000..d35045010 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin new file mode 100644 index 000000000..74f2f852a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISTURB.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISTURB.bin new file mode 100644 index 000000000..cf13a99a5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_DISTURB.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin new file mode 100644 index 000000000..ca1d2e419 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin new file mode 100644 index 000000000..98c8a3a99 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SAVEELE.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SAVEELE.bin new file mode 100644 index 000000000..8c93987f1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SAVEELE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin new file mode 100644 index 000000000..7331b61cf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin new file mode 100644 index 000000000..229cb6c1d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SYSTEM.bin b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SYSTEM.bin new file mode 100644 index 000000000..4942e1cbe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTINGS_SYSTEM.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTTING_REBOOT.bin b/code/sdk/files/n9/fs/user/res/settings/SETTTING_REBOOT.bin new file mode 100644 index 000000000..172ff3e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTTING_REBOOT.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SETTTING_SHUTDOWN.bin b/code/sdk/files/n9/fs/user/res/settings/SETTTING_SHUTDOWN.bin new file mode 100644 index 000000000..5f6b10436 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SETTTING_SHUTDOWN.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/SOS.bin b/code/sdk/files/n9/fs/user/res/settings/SOS.bin new file mode 100644 index 000000000..66f070e09 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/SOS.bin differ diff --git a/code/sdk/files/n9/fs/user/res/settings/shutdown.bin b/code/sdk/files/n9/fs/user/res/settings/shutdown.bin new file mode 100644 index 000000000..05e886595 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/settings/shutdown.bin differ diff --git a/code/sdk/files/n9/fs/user/res/solar-energy_1.bin b/code/sdk/files/n9/fs/user/res/solar-energy_1.bin new file mode 100644 index 000000000..9eefef036 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/solar-energy_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/1.bin b/code/sdk/files/n9/fs/user/res/step/1.bin new file mode 100644 index 000000000..4849d2d5b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/10.bin b/code/sdk/files/n9/fs/user/res/step/10.bin new file mode 100644 index 000000000..7d6e1344b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/11.bin b/code/sdk/files/n9/fs/user/res/step/11.bin new file mode 100644 index 000000000..3b80c9af3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/12.bin b/code/sdk/files/n9/fs/user/res/step/12.bin new file mode 100644 index 000000000..1092267db Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/13.bin b/code/sdk/files/n9/fs/user/res/step/13.bin new file mode 100644 index 000000000..a029f888d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/14.bin b/code/sdk/files/n9/fs/user/res/step/14.bin new file mode 100644 index 000000000..c2e60e343 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/15.bin b/code/sdk/files/n9/fs/user/res/step/15.bin new file mode 100644 index 000000000..c8d0939a8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/16.bin b/code/sdk/files/n9/fs/user/res/step/16.bin new file mode 100644 index 000000000..a0918e83c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/17.bin b/code/sdk/files/n9/fs/user/res/step/17.bin new file mode 100644 index 000000000..efd3d1569 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/18.bin b/code/sdk/files/n9/fs/user/res/step/18.bin new file mode 100644 index 000000000..2c24c9609 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/19.bin b/code/sdk/files/n9/fs/user/res/step/19.bin new file mode 100644 index 000000000..04ec02769 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/2.bin b/code/sdk/files/n9/fs/user/res/step/2.bin new file mode 100644 index 000000000..a8a459138 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/20.bin b/code/sdk/files/n9/fs/user/res/step/20.bin new file mode 100644 index 000000000..76638e12e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/3.bin b/code/sdk/files/n9/fs/user/res/step/3.bin new file mode 100644 index 000000000..b4569b6e2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/4.bin b/code/sdk/files/n9/fs/user/res/step/4.bin new file mode 100644 index 000000000..6327da829 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/5.bin b/code/sdk/files/n9/fs/user/res/step/5.bin new file mode 100644 index 000000000..c76501e57 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/6.bin b/code/sdk/files/n9/fs/user/res/step/6.bin new file mode 100644 index 000000000..7bd7e8e93 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/7.bin b/code/sdk/files/n9/fs/user/res/step/7.bin new file mode 100644 index 000000000..d4f2fcbd9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/8.bin b/code/sdk/files/n9/fs/user/res/step/8.bin new file mode 100644 index 000000000..e8921f0c4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/9.bin b/code/sdk/files/n9/fs/user/res/step/9.bin new file mode 100644 index 000000000..346024dab Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/step/step_b.bin b/code/sdk/files/n9/fs/user/res/step/step_b.bin new file mode 100644 index 000000000..976b16634 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/step/step_b.bin differ diff --git a/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_LINE.bin b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_LINE.bin new file mode 100644 index 000000000..28019b06d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_LINE.bin differ diff --git a/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_MARK.bin b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_MARK.bin new file mode 100644 index 000000000..482ef15ca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATCH_MARK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET1.bin b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET1.bin new file mode 100644 index 000000000..66a43d7fd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET2.bin b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET2.bin new file mode 100644 index 000000000..2730fd954 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/stopwatch/STOPWATH_RESET2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/system/KUMILOGO.bin b/code/sdk/files/n9/fs/user/res/system/KUMILOGO.bin new file mode 100644 index 000000000..ed1fdfa0c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/system/KUMILOGO.bin differ diff --git a/code/sdk/files/n9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin b/code/sdk/files/n9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin new file mode 100644 index 000000000..2078e102a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/1.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/1.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/10.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/10.bin new file mode 100644 index 000000000..2028e0a3d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/11.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/11.bin new file mode 100644 index 000000000..0a32f6c2b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/12.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/12.bin new file mode 100644 index 000000000..5fca47d35 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/13.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/13.bin new file mode 100644 index 000000000..7aceb85f2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/14.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/14.bin new file mode 100644 index 000000000..0a5d836b5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/15.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/15.bin new file mode 100644 index 000000000..bf62634ad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/16.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/16.bin new file mode 100644 index 000000000..6dd6eb357 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/17.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/17.bin new file mode 100644 index 000000000..67043d2c1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/18.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/18.bin new file mode 100644 index 000000000..33aff30e3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/19.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/19.bin new file mode 100644 index 000000000..ede899833 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/2.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/2.bin new file mode 100644 index 000000000..e07623ef2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/20.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/20.bin new file mode 100644 index 000000000..74857d3b3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/21.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/21.bin new file mode 100644 index 000000000..a9dc858c1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/22.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/22.bin new file mode 100644 index 000000000..7b2e28bbb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/23.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/23.bin new file mode 100644 index 000000000..99c94b43a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/24.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/24.bin new file mode 100644 index 000000000..bbb6fa60f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/25.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/25.bin new file mode 100644 index 000000000..3da1ca297 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/26.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/26.bin new file mode 100644 index 000000000..01671008a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/27.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/27.bin new file mode 100644 index 000000000..371174062 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/28.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/28.bin new file mode 100644 index 000000000..ec8397c1b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/29.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/29.bin new file mode 100644 index 000000000..47f921e50 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/3.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/3.bin new file mode 100644 index 000000000..3f6b3d01b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/30.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/30.bin new file mode 100644 index 000000000..63fb85b7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/31.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/31.bin new file mode 100644 index 000000000..9e85ed845 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/32.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/32.bin new file mode 100644 index 000000000..896b245a2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/33.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/33.bin new file mode 100644 index 000000000..5c2473cb9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/34.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/34.bin new file mode 100644 index 000000000..f84c3ebbb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/35.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/35.bin new file mode 100644 index 000000000..04825625f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/36.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/36.bin new file mode 100644 index 000000000..4edec961e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/37.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/37.bin new file mode 100644 index 000000000..1934db02d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/38.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/38.bin new file mode 100644 index 000000000..8c2995dc8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/39.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/39.bin new file mode 100644 index 000000000..054e17b9a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/4.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/4.bin new file mode 100644 index 000000000..0feadfafb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/40.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/40.bin new file mode 100644 index 000000000..6f540572a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/41.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/41.bin new file mode 100644 index 000000000..605637461 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/41.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/42.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/42.bin new file mode 100644 index 000000000..94c8c23d7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/42.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/43.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/43.bin new file mode 100644 index 000000000..774d0e888 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/43.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/44.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/44.bin new file mode 100644 index 000000000..6da059441 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/44.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/45.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/45.bin new file mode 100644 index 000000000..4239019cd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/45.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/46.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/46.bin new file mode 100644 index 000000000..c30beb6f4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/46.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/47.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/47.bin new file mode 100644 index 000000000..46ed2ba65 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/47.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/48.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/48.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/48.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/49.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/49.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/49.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/5.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/5.bin new file mode 100644 index 000000000..2199fbd36 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/50.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/50.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/50.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/6.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/6.bin new file mode 100644 index 000000000..fa94cd651 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/7.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/7.bin new file mode 100644 index 000000000..d2cfa7d64 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/8.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/8.bin new file mode 100644 index 000000000..ea9752d9c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/cream/9.bin b/code/sdk/files/n9/fs/user/res/takephotos/cream/9.bin new file mode 100644 index 000000000..8c944149c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/cream/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/1.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/1.bin new file mode 100644 index 000000000..9c23da2a3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/10.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/10.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/11.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/11.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/12.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/12.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/13.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/13.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/14.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/14.bin new file mode 100644 index 000000000..56bd4aba0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/15.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/15.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/16.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/16.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/17.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/17.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/18.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/18.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/19.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/19.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/2.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/2.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/20.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/20.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/21.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/21.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/22.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/22.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/23.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/23.bin new file mode 100644 index 000000000..ba287dd7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/24.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/24.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/25.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/25.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/26.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/26.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/27.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/27.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/28.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/28.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/3.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/3.bin new file mode 100644 index 000000000..89c2a52ec Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/4.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/4.bin new file mode 100644 index 000000000..8631985d8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/5.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/5.bin new file mode 100644 index 000000000..7864c75e9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/6.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/6.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/7.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/7.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/8.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/8.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/takephotos/smile/9.bin b/code/sdk/files/n9/fs/user/res/takephotos/smile/9.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/takephotos/smile/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/arclist.bin b/code/sdk/files/n9/fs/user/res/themestyle/arclist.bin new file mode 100644 index 000000000..ec1721e5b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/arclist.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage1.bin b/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage1.bin new file mode 100644 index 000000000..e2cd6ba4b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage2.bin b/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage2.bin new file mode 100644 index 000000000..b0322575f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/circlelist/circleListImage2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/dialplate.bin b/code/sdk/files/n9/fs/user/res/themestyle/dialplate.bin new file mode 100644 index 000000000..30bfd03cd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/dialplate.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/grid.bin b/code/sdk/files/n9/fs/user/res/themestyle/grid.bin new file mode 100644 index 000000000..4aaedb4b6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/grid.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/hexagons.bin b/code/sdk/files/n9/fs/user/res/themestyle/hexagons.bin new file mode 100644 index 000000000..ef677d9da Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/hexagons.bin differ diff --git a/code/sdk/files/n9/fs/user/res/themestyle/list.bin b/code/sdk/files/n9/fs/user/res/themestyle/list.bin new file mode 100644 index 000000000..6f9c4f5b9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/themestyle/list.bin differ diff --git a/code/sdk/files/n9/fs/user/res/users/AddCard.bin b/code/sdk/files/n9/fs/user/res/users/AddCard.bin new file mode 100644 index 000000000..3d78503ae Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/users/AddCard.bin differ diff --git a/code/sdk/files/n9/fs/user/res/users/Enter.bin b/code/sdk/files/n9/fs/user/res/users/Enter.bin new file mode 100644 index 000000000..38c128d21 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/users/Enter.bin differ diff --git a/code/sdk/files/n9/fs/user/res/users/OK.bin b/code/sdk/files/n9/fs/user/res/users/OK.bin new file mode 100644 index 000000000..e6c2d7a64 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/users/OK.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_1.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_1.bin new file mode 100644 index 000000000..590dafd4a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_10.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_10.bin new file mode 100644 index 000000000..caf4f6ed8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_11.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_11.bin new file mode 100644 index 000000000..52c2f1e19 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_12.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_12.bin new file mode 100644 index 000000000..9da665830 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_13.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_13.bin new file mode 100644 index 000000000..f87bbfb97 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_14.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_14.bin new file mode 100644 index 000000000..e550cfded Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_15.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_15.bin new file mode 100644 index 000000000..1ed73363d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_16.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_16.bin new file mode 100644 index 000000000..c48e1157a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_17.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_17.bin new file mode 100644 index 000000000..63da629ac Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_18.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_18.bin new file mode 100644 index 000000000..c3ae52a03 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_19.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_19.bin new file mode 100644 index 000000000..be9b26331 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_2.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_2.bin new file mode 100644 index 000000000..55f8c90ca Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_20.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_20.bin new file mode 100644 index 000000000..0c6c86155 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_21.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_21.bin new file mode 100644 index 000000000..a0fbed932 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_22.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_22.bin new file mode 100644 index 000000000..435194692 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_23.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_23.bin new file mode 100644 index 000000000..c88abee73 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_24.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_24.bin new file mode 100644 index 000000000..cd2e0e521 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_25.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_25.bin new file mode 100644 index 000000000..02ffc1fbf Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_25.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_26.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_26.bin new file mode 100644 index 000000000..e16626869 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_26.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_27.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_27.bin new file mode 100644 index 000000000..bd53c659a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_27.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_28.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_28.bin new file mode 100644 index 000000000..8f90b3452 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_28.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_29.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_29.bin new file mode 100644 index 000000000..6297e55be Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_29.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_3.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_3.bin new file mode 100644 index 000000000..ac4a767c6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_30.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_30.bin new file mode 100644 index 000000000..8a7b47da4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_30.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_31.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_31.bin new file mode 100644 index 000000000..13c51c6e1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_31.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_32.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_32.bin new file mode 100644 index 000000000..d42a790a8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_32.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_33.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_33.bin new file mode 100644 index 000000000..ff4f6e819 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_33.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_34.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_34.bin new file mode 100644 index 000000000..5643a2a9c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_34.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_35.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_35.bin new file mode 100644 index 000000000..36f6c37e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_35.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_36.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_36.bin new file mode 100644 index 000000000..32ef18309 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_36.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_37.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_37.bin new file mode 100644 index 000000000..c3920150d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_37.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_38.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_38.bin new file mode 100644 index 000000000..db5a8ece6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_38.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_39.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_39.bin new file mode 100644 index 000000000..e7771e428 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_39.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_4.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_4.bin new file mode 100644 index 000000000..309316c2b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_40.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_40.bin new file mode 100644 index 000000000..5391fd9e7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_40.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_41.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_41.bin new file mode 100644 index 000000000..35ce61c8a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_41.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_42.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_42.bin new file mode 100644 index 000000000..2393aea2d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_42.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_43.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_43.bin new file mode 100644 index 000000000..de7484cee Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_43.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_44.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_44.bin new file mode 100644 index 000000000..52a5f4d20 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_44.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_45.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_45.bin new file mode 100644 index 000000000..bdb60b3b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_45.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_46.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_46.bin new file mode 100644 index 000000000..9155ac22b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_46.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_47.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_47.bin new file mode 100644 index 000000000..1822cbc2d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_47.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_48.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_48.bin new file mode 100644 index 000000000..c0bb0e4dd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_48.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_49.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_49.bin new file mode 100644 index 000000000..09867eafe Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_49.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_5.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_5.bin new file mode 100644 index 000000000..d666ef32a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_50.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_50.bin new file mode 100644 index 000000000..ec3502c1f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_50.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_51.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_51.bin new file mode 100644 index 000000000..37a69888b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_51.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_52.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_52.bin new file mode 100644 index 000000000..ad3e97889 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_52.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_53.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_53.bin new file mode 100644 index 000000000..9b44e96cb Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_53.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_54.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_54.bin new file mode 100644 index 000000000..1dd83c0b5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_54.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_55.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_55.bin new file mode 100644 index 000000000..5d6fcf6ad Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_55.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_56.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_56.bin new file mode 100644 index 000000000..d3a46b20e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_56.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_57.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_57.bin new file mode 100644 index 000000000..3378a3980 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_57.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_58.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_58.bin new file mode 100644 index 000000000..bc2240e2e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_58.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_59.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_59.bin new file mode 100644 index 000000000..f09e7052f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_59.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_6.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_6.bin new file mode 100644 index 000000000..8bfe866d1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_60.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_60.bin new file mode 100644 index 000000000..f3d0d1e7d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_60.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_61.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_61.bin new file mode 100644 index 000000000..84415282d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_61.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_62.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_62.bin new file mode 100644 index 000000000..6b9a48d56 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_62.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_63.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_63.bin new file mode 100644 index 000000000..445d82d69 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_63.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_64.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_64.bin new file mode 100644 index 000000000..927fd6601 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_64.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_65.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_65.bin new file mode 100644 index 000000000..768c872ed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_65.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_66.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_66.bin new file mode 100644 index 000000000..fbac77146 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_66.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_67.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_67.bin new file mode 100644 index 000000000..4b2253e9c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_67.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_68.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_68.bin new file mode 100644 index 000000000..0766767f7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_68.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_69.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_69.bin new file mode 100644 index 000000000..e86eb4748 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_69.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_7.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_7.bin new file mode 100644 index 000000000..e68839dc4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_70.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_70.bin new file mode 100644 index 000000000..028a47ee8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_70.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_71.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_71.bin new file mode 100644 index 000000000..cf8ec67b8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_71.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_72.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_72.bin new file mode 100644 index 000000000..353cd1b0d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_72.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_73.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_73.bin new file mode 100644 index 000000000..da16df0d1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_73.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_74.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_74.bin new file mode 100644 index 000000000..fdb9e1c68 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_74.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_8.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_8.bin new file mode 100644 index 000000000..0da485852 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_9.bin b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_9.bin new file mode 100644 index 000000000..d8ab4a03c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/PullUp/PullUp_9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/WEATHER_BACKGROUND.bin b/code/sdk/files/n9/fs/user/res/weather/WEATHER_BACKGROUND.bin new file mode 100644 index 000000000..143df271c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/WEATHER_BACKGROUND.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/1.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/1.bin new file mode 100644 index 000000000..26e05031b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/10.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/10.bin new file mode 100644 index 000000000..585620079 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/11.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/11.bin new file mode 100644 index 000000000..da418e602 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/12.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/12.bin new file mode 100644 index 000000000..bc9901825 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/13.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/13.bin new file mode 100644 index 000000000..c65159fd3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/14.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/14.bin new file mode 100644 index 000000000..44fa2f8d0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/15.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/15.bin new file mode 100644 index 000000000..f17bd4313 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/16.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/16.bin new file mode 100644 index 000000000..da1d9bc6d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/17.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/17.bin new file mode 100644 index 000000000..cfd14c3df Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/18.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/18.bin new file mode 100644 index 000000000..2d940d62e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/19.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/19.bin new file mode 100644 index 000000000..ecb91b586 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/2.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/2.bin new file mode 100644 index 000000000..98377646f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/20.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/20.bin new file mode 100644 index 000000000..5ee7470e1 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/3.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/3.bin new file mode 100644 index 000000000..666e09c0e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/4.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/4.bin new file mode 100644 index 000000000..d5f59b85f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/5.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/5.bin new file mode 100644 index 000000000..6c28cf8a9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/6.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/6.bin new file mode 100644 index 000000000..9badd78d3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/7.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/7.bin new file mode 100644 index 000000000..fde04ff6d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/8.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/8.bin new file mode 100644 index 000000000..1d5c19ae0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/9.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/9.bin new file mode 100644 index 000000000..e56abecc0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/Humidity/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/1.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/1.bin new file mode 100644 index 000000000..f449dada8 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/10.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/10.bin new file mode 100644 index 000000000..159eacfcd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/11.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/11.bin new file mode 100644 index 000000000..358cdfc68 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/12.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/12.bin new file mode 100644 index 000000000..15081606c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/13.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/13.bin new file mode 100644 index 000000000..e79f9ddd4 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/14.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/14.bin new file mode 100644 index 000000000..a619bf730 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/15.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/15.bin new file mode 100644 index 000000000..c586f0677 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/16.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/16.bin new file mode 100644 index 000000000..2e0d7c939 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/17.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/17.bin new file mode 100644 index 000000000..1b2d8a2f5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/18.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/18.bin new file mode 100644 index 000000000..402347baa Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/19.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/19.bin new file mode 100644 index 000000000..65c145f0a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/2.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/2.bin new file mode 100644 index 000000000..d969f1490 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/20.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/20.bin new file mode 100644 index 000000000..29f1121f9 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/21.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/21.bin new file mode 100644 index 000000000..729a77da3 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/22.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/22.bin new file mode 100644 index 000000000..de173e30c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/23.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/23.bin new file mode 100644 index 000000000..c87459b04 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/24.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/24.bin new file mode 100644 index 000000000..b6ede91f2 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/3.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/3.bin new file mode 100644 index 000000000..697933618 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/4.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/4.bin new file mode 100644 index 000000000..b1f6cf436 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/5.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/5.bin new file mode 100644 index 000000000..d81e513d0 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/6.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/6.bin new file mode 100644 index 000000000..a5c68753c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/7.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/7.bin new file mode 100644 index 000000000..567cced3d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/8.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/8.bin new file mode 100644 index 000000000..ee82fda24 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/9.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/9.bin new file mode 100644 index 000000000..70187e6fd Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/UV/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin new file mode 100644 index 000000000..105641d59 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin new file mode 100644 index 000000000..be3a15ed6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin new file mode 100644 index 000000000..04cd932de Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin new file mode 100644 index 000000000..850a97437 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin new file mode 100644 index 000000000..c57ce8168 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin new file mode 100644 index 000000000..93c6d78a6 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin new file mode 100644 index 000000000..aabb74339 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin new file mode 100644 index 000000000..7b76584b7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin new file mode 100644 index 000000000..9eed55491 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin new file mode 100644 index 000000000..7fc964a7e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin new file mode 100644 index 000000000..0ab7eba2f Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin new file mode 100644 index 000000000..604f06bd5 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin new file mode 100644 index 000000000..ff8502ecc Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin new file mode 100644 index 000000000..360551b46 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin new file mode 100644 index 000000000..76c372299 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin new file mode 100644 index 000000000..1c9a0db18 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin new file mode 100644 index 000000000..a1cec350c Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin new file mode 100644 index 000000000..de995cc70 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin new file mode 100644 index 000000000..db0720190 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin new file mode 100644 index 000000000..33a193a3b Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin new file mode 100644 index 000000000..f29776e7a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin new file mode 100644 index 000000000..1964cf12a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin new file mode 100644 index 000000000..91497f75e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin new file mode 100644 index 000000000..5ad490723 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin new file mode 100644 index 000000000..96d16533d Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin new file mode 100644 index 000000000..d0a81f84a Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_duststorm.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_duststorm.bin new file mode 100644 index 000000000..c6710e714 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_duststorm.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_foggy.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_foggy.bin new file mode 100644 index 000000000..d38ac2e77 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_foggy.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_haze.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_haze.bin new file mode 100644 index 000000000..6f795a16e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_haze.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_overcast.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_overcast.bin new file mode 100644 index 000000000..272962347 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_overcast.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_rain.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_rain.bin new file mode 100644 index 000000000..b3874bd26 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_rain.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_snow.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_snow.bin new file mode 100644 index 000000000..f92e6feed Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_snow.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny.bin new file mode 100644 index 000000000..548273d1e Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin new file mode 100644 index 000000000..b3eae3b41 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_thundershower.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_thundershower.bin new file mode 100644 index 000000000..148c18b45 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_thundershower.bin differ diff --git a/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_unknown.bin b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_unknown.bin new file mode 100644 index 000000000..50b0ff892 Binary files /dev/null and b/code/sdk/files/n9/fs/user/res/weather/weather65x65/weather_unknown.bin differ diff --git a/code/sdk/files/n9/fs/user/system/KUMI_LOGO.bin b/code/sdk/files/n9/fs/user/system/KUMI_LOGO.bin new file mode 100644 index 000000000..43fa9aee7 Binary files /dev/null and b/code/sdk/files/n9/fs/user/system/KUMI_LOGO.bin differ diff --git a/code/sdk/files/n9/fs/user/system/N9_TEST_LOGO.bin b/code/sdk/files/n9/fs/user/system/N9_TEST_LOGO.bin new file mode 100644 index 000000000..073642c91 Binary files /dev/null and b/code/sdk/files/n9/fs/user/system/N9_TEST_LOGO.bin differ diff --git a/code/sdk/files/n9/fs/user/system/OTAUpdata.bin b/code/sdk/files/n9/fs/user/system/OTAUpdata.bin new file mode 100644 index 000000000..f7689f22c Binary files /dev/null and b/code/sdk/files/n9/fs/user/system/OTAUpdata.bin differ diff --git a/code/sdk/files/n9/fs/user/system/OTAUpdataRecover.bin b/code/sdk/files/n9/fs/user/system/OTAUpdataRecover.bin new file mode 100644 index 000000000..e89ad7813 Binary files /dev/null and b/code/sdk/files/n9/fs/user/system/OTAUpdataRecover.bin differ diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/Cat1pyVersion.txt b/code/sdk/files/n9/fs/user/system/cat1ota/Cat1pyVersion.txt new file mode 100644 index 000000000..19c7bdba7 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/Cat1pyVersion.txt @@ -0,0 +1 @@ +16 \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/EventMesh.py b/code/sdk/files/n9/fs/user/system/cat1ota/EventMesh.py new file mode 100644 index 000000000..7951835b2 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/EventMesh.py @@ -0,0 +1,86 @@ +import _thread +import usys +import ql_fs +CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能 +CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能 +class EventStore(object): + def __init__(self): + self.map = dict() + self.log = None + self.__filters = [] + + def add_filter(self, flt): + self.__filters.append(flt) + + def append(self, event, cb): + self.map[event] = cb + + def fire_async(self, event, msg,thread_size): + if event in self.map: + #print("fire_async:thread_size:{}".format(thread_size)) + if thread_size != None: + _thread.stack_size(thread_size) + #print("fire_async:thread_size:{}".format(thread_size)) + _thread.start_new_thread(self.map[event], (event, msg)) + if thread_size != None: + _thread.stack_size(8*1024) + if self.log: + self.log.info("ASYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, None)) + + def fire_sync(self, event, msg): + res = None + try: + if event in self.map: + res = self.map[event](event, msg) + except Exception as e: + usys.print_exception(e) + if self.log: + self.log.info("ERROR executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + if event not in self.__filters: + if self.log: + self.log.info("SYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + return res + + def subscribe(self,event, cb): + """ + subscribe event and cb + """ + return self.append(event, cb) + + + def publish(self,event, msg=None): + """ + publish event and msg + """ + return self.publish_sync(event, msg) + + + def publish_async(self,event, msg=None,thread_size = None): + """ + 异步发送 + """ + return self.fire_async(event, msg,thread_size) + + + def publish_sync(self,event, msg=None): + """ + 同步发送 + """ + return self.fire_sync(event, msg) + + + def set_log(self,log_adapter): + self,log = log_adapter + + + def add_filter(self,flt): + self.add_filter(flt) + +eventMesh = EventStore() + + + + + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/cat1Service.py b/code/sdk/files/n9/fs/user/system/cat1ota/cat1Service.py new file mode 100644 index 000000000..a69f71641 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/cat1Service.py @@ -0,0 +1,1121 @@ +# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# net.getNetMode() +# (0, '460', '11', 7) + +# net.getSignal(1) +# ([99, 99, 255, 255], [-84, -117, -15, 255, -3]) + +# net.nitzTime() +# ('24/02/26 11:17:42 8 0', 1708946262, 0) + + +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import uping +import example +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import fota +import request +import ql_fs +import pm +import sms +import ujson + +from usr.EventMesh import eventMesh + +from usr.httpota import httpota +from usr.telecom_dmp import telecomDmpCb +from usr.china_mobile_dmp import chinamobileCb + +from usr.china_mobile_ai_regulation import aiRegulation +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +def msg_cb(args): + index = args[1] + storage = args[2] + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if index != -1: + eventMesh.publish("send_singal_data_toBle",index) + + if index >= sms_max-1:#删除短信 + eventMesh.publish("delete_sms_event")#删除短信 + +sms.setCallback(msg_cb)#sms注册回调 + +CAT1_SERVICE_HEAD = 'FE' #固定head + +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V21" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + + + + + + +#设置通话音量 +voiceCall.setVolume(10) +clog.info("voice call volume {}".format(voiceCall.getVolume())) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +# pm.autosleep(1) +pm.wakelock_lock(lpm_fd) +clog.info("create_wakelock {}".format(pm.get_wakelock_num())) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + clog.info("{}".format(config_data)) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) + +# GPIO21 - 引脚 86 KP_MKOUT1 唤醒主控 +# GPIO22 - 引脚 87 KP_MKIN 被主控唤醒 + +# GPIOn - GPIO号,int类型,点此查看GPIO引脚编号与物理引脚的映射关系。 + +# direction - 输入输出模式,int类型,IN - 输入模式,OUT - 输出模式。 + +# pullMode - 上下拉模式,int类型,说明如下: +# PULL_DISABLE - 浮空模式 +# PULL_PU - 上拉模式 +# PULL_PD - 下拉模式 + +# level - 引脚电平,int类型,0 - 设置引脚为低电平, 1- 设置引脚为高电平。 +# recvDataPin = Pin(Pin.GPIO22, Pin.IN, Pin.PULL_PU, 0) +def ExtIntfun(args): + # clog.info('### interrupt {} ###'.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿 + if args[1] == 0: + clog.info("disable autosleep") + # pm.autosleep(0) + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + clog.info("enable autosleep") + pm.wakelock_unlock(lpm_fd) + # pm.autosleep(1) + # clog.info("recvDataPin={}".format(recvDataPin.read())) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + + +# 创建gpio对象 +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +# 设置输入输出模式 +gpioWakeBT.set_dir(Pin.OUT) + +# 设置引脚电平 +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' #获取 Cat1 版本号 +UDP_CMD_DIAL_NUMB = '1' #拨打电话 +UDP_CMD_HUNGUP = '2' #挂断电话 +UDP_CMD_ANSWER = '3' #接听电话 +UDP_CMD_CAT1_OTA_UPDATE = '4' #触发Cat1 OTA升级,mcu提供url +UDP_CMD_SEND_SMS = '5' #发送SMS短信,mcu提供电话号及短信内容 +UDP_CMD_GET_TIME = '6' #获取Cat1 时间 ,YYYYMMDD HHmmss zone +UDP_CMD_GET_RECV_NETWORKSTAT = '7' #获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 // 内容同UDP_CMD_GET_NETWORKSTAT,CAT主动发给MCU +UDP_MSG_SMS = '8' # CAT1接收到的SMS信息给MCU,包含电话号及短信内容 +UDP_CMD_ATCMD = '9' # 执行AT指令 +UDP_MSG_CALL_CONNECTED = 'A' # CAT1 电话接听消息 +UDP_MSG_CALL_DISCONNECTED = 'B' # CAT1 电话挂断消息 +UDP_MSG_COMMING_CALL = 'C' # CAT1 来电消息,包含电话号 +UDP_MSG_REPLY = 'F' # 返回值 +UDP_MSG_OTA = 'D' # 返回值 + +class Cat1Service: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + + def __init__(self, uart=UART.UART4, mode=AP): + + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + # self.__value = None + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + clog.info('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + clog.error('slip netif construct fail') + return None + clog.info('slip network card create success') + # self.__queue = Queue(1) + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.china_mobile_ai_init = 0 + self.volte_switch = 1 #默认是开启VOLTE通话功能 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)# + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) #获取所有的短信内容 + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + + + self.telecom_dmp_switch = 0 + + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + # + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + # 发数据线程 + return None + + def __socket_init(self): + # 创建一个socket实例 + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + # 绑定IP + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + + # cmd = "" + # cmd_tmp= int(cmd_data)#将十进制数转换成int 再转换成十六进制 + # cell_data = hex(cmd_tmp) + # decimal_number = int(cell_data, 16) + # cmd = "%02x"%(decimal_number) # 使用两位表示,不足前面补0 + clog.info(cmd) # 输出: 07 + clog.info("btmcu_cmd_handler cmd {0} , args {1}".format(cmd,parm)) + if cmd == "00": + clog.info(cmd) + # UDP_CMD_GET_CAT1VER + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + # UDP_CMD_DIAL_NUMB + if eventMesh.publish("get_volte_switch") == 1: #只有BLE开了VOLTE才允许打电话 + ret = voiceCall.callStart(str(parm)) + # if ret != 0: + # ret = voiceCall.callStart(str(parm)) + clog.info("ret={} {} {}".format(ret,cmd,parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + print("get_volte_switch NO") + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + clog.info(cmd) + # UDP_CMD_HUNGUP + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + clog.info(cmd) + # UDP_CMD_ANSWER + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "04": + clog.info(cmd) + elif cmd == "05": + clog.info(cmd) + # UDP_CMD_SEND_SMS + elif cmd == "06": + clog.info(cmd) + # UDP_CMD_GET_TIME + time=utime.localtime() + zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # 返回当前时间戳,参数为元组 + # timestamp = utime.mktime(time) + # clog.info(timestamp) + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + clog.info("cmd ==== 07!") + # UDP_CMD_GET_RECV_NETWORKSTAT + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + # ([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data_lac, data_cid, data_rat, data_reject_cause, data_psc]) + operator = net.operatorName() + signal = net.csqQueryPoll() + clog.info("imei:{0},sim:{1},oper:{2},signal:{3},net:{4}".format(imei,simstat,operator,signal,netstat)) + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + clog.info("{},{}".format(cmd,parm)) + # UDP_CMD_ATCMD + # net.setModemFun(0) + # net.setModemFun(1) + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + clog.info("reply:{},ret:{}".format(resp.decode(),ret)) + self.reply_cmd('09',"{}".format(resp.decode())) + else: + clog.info("cmd error ret:{}".format(ret)) + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": #获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能 + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 : + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + clog.info("set_dmp_change_mode on:{}".format(on)) + eventMesh.publish("set_dmp_change_mode",on) + + elif cmd == "16": + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用 + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": #DTMF功能 + voiceCall.startDtmf(str(parm),100) #100ms 持续时间 100-1000 + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "1B": + print("fota {}".format(str(parm).split("and")[0])) + print("fota {}".format(str(parm).split("and")[-1])) + # httpota = httpota() + httpota.run( str(parm).split("and")[0], str(parm).split("and")[-1]) + # eventMesh.publish("set_volte_switch",int(parm)) + # UDP_MSG_OTA + elif cmd == "1C":# + self.read_dev_ai_id() + elif cmd == "AC":# + if self.ack_sem==1: + self.ack_sem=0 + + + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): #设置VOLTE开关 + self.volte_switch = int(msg) + + + def get_volte_switch(self,event,msg): #获取VOLTE开关 + + return self.volte_switch + + + def china_mobile_recv_cmd(self,cmd,parm): #移动入库相关指令 + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "16": #获取BLE mac地址 + eventMesh.publish("set_dev_mac",str(parm)) + clog.info("parm:{}\r\n".format(parm)) + + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + clog.info("remove_all_sms_cb\r\n") + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + clog.info("{}\r\n".format(sms_data)) + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) #删除所有的sms信息 + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + clog.info("recv:{}".format(int(msg))) + message=self.sms_get_message_info(int(msg)) + if message == -1: #说明没有这条短信 + return + message_pdu = sms.decodePdu(message[5],20) + + if message_pdu != -1: #解码出来的内容 + + message_ref = message[0] #编码 + message_total_num = message[1] #总共条数 + message_seq = message[2] #当前第几条 + data = message[5] #内容 + data_len = len(data) #内容长度 + # ref :短信参考标识,同一个标识表明为同一条短信 + # total_num :此条长短信总条数 大于1属于长短信 + # seq :此条短信在长短信中的序号 + # print("message:{} {}\r\n".format(message,message_pdu)) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + """ + :param index :短信索引值 + :tyoe index :整形 + + :return :元组类型 + 元组内容: + (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len) + + :message_ref :短信参考标识,同一个标识表明为同一条短信 + :message_total_num :此条长短信总条数 + :message_seq :此条短信在长短信中的序号 + :sub_message_data :词条短信的内容 + :pdu_tye :PDU类型,bit 6标记是否包含用户报文头,长短信需要 + :sub_message_len :此条短信内容长度 + + """ + + message0=sms.searchPduMsg(index) + #print("sms_get_message_info:message0:{}".format(message0)) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + # 电话号码高低位需要转换 + sca = self.sms_deal_phone_number(sca) + + # if sca_num % 2 == 1: + # print("Get SCA phone {}".format(sca[:-1])) + # else: + # print("Get SCA phone {}".format(sca)) + + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + # 电话号码高低位需要转换 + oa = self.sms_deal_phone_number(oa) + + # if oa_num % 2 == 1: + # print("Get OA phone {}".format(oa[:-1])) + # else: + # print("get OA phone {}".format(oa)) + + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + + # 或短信用户数据 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + #长短信 + if ((pdu_tye & 0x40 ) >> 6) == 1: + #长短信,处理长短信用户报文头 + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + # 短短信 + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums()#短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2]#最大存储短信数量 + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + clog.info(sms_data) + if sms_data == -1: + return + sms_max = sms_data[0][2]#最大存储短信数量 + clog.info(sms_max) + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0]#编码 + num = message[1]#总共条数 + curren_num = message[2]#当前第几条 + data_len = message[4] + sms_data.append(code)#编码 编码相同是同一条短信的内容 + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + clog.info("text:{} {} {}\r\n".format(text[0],text[1],text[2])) + + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + # 来电提醒 + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话接听消息 + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话拒接消息 + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + clog.info('Network connection successful.') + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + clog.info('Network connection failed, stage={}, state={}'.format(stage, state)) + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + + self.__waiting_netstat = 0 + return -1 + + # 查询网卡状态 + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + clog.info('reply_cmd 1') + self.clear_remain() + message = str(_timesync) + clog.info('reply_cmd 2') + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + # if self.__queue.empty() == False: + # self.__queue.get() + self.__err = 0 + # self.__value = None + #添加路由信息 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + + return slip.router_add(self.ip, self.mask) + + # 获取slip的网络配置 + def ipconfig(self): + return slip.ipconfig() + + # 设置dns服务器 + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + # 设置默认网卡 + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + clog.info("skip reset_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.4.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + + def set_network_config(self): + + + if (self.__net_connected == 1) : + clog.info("skip set_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.1.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭 + return + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改 + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + telecomDmpCb.telecom_dmp_power_on_init() + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") == 2: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + #移动入库的初始化 + chinamobileCb.china_mobile_init() + if eventMesh.publish("get_dmp_change_mode") == 3: + if self.china_mobile_ai_init == 1: + return + self.china_mobile_ai_init = 1 + eventMesh.publish("set_network_state",1) + aiRegulation.AIRegulation_init() + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + # 释放slip网卡 + def stop(self): + slip.destroy() + return 0 + + def read_dev_ai_id(self): + + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") # + if IFEXIST == True: #文件存在 + fileSize = ql_fs.path_getsize('usr/cm_ai_regulation.json') + if fileSize == 0: + + print("设备信息配置文件不存在\r\n") + else: + try: + with open("/usr/cm_ai_regulation.json","r",encoding='utf-8') as fd: + try: + config_data = ujson.load(fd) #转换成json格式 + if len(config_data) != 0: + if "deviceId" in config_data:# + deviceId = str(config_data["deviceId"]) #设备ID + self.reply_cmd('1C',"{}".format(deviceId)) + except Exception as error: + print("配置文件的内容不是json格式 保存数据的时候格式不对\r\n") + except Exception as error: + print("打开配置文件失败\r\n") + + + + + # 封装tlv数据包 + def __pack_tlv_format(self, head, content): + # self.head = head + # self.content = content + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + clog.error('illegal pack tlv content') + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + # 解码tlv数据包 + def __unpack_tlv_format(self, msg): + clog.info('__unpack_tlv_format {}\r\n'.format(msg)) + self.msg = str(msg)[2:]#这是去除head FE + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + clog.error('__unpack_tlv_format err') + return -1 + clog.info('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value)) + unpack = (tag,length,value) + return unpack + # socket通信(UDP)模块 + def __Socket_UDP(self, head, content): + # 0 则 __Socket_UDP_write + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + clog.info("send====") + data=self.send_data_q.get() + self.ack_sem=1 + # # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + + clog.info("Socket_SEND_Thread data:{} {}".format(data[0],data[1])) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + clog.info("Socket_SEND_Thread while data:{} {}".format(data[0],data[1])) + + if data: + clog.info("data ok!!") + else: + clog.error("data error!!") + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + ##self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + clog.info("__Socket_UDP send msg {}".format(msg)) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + clog.info("__Socket_UDP send 2") + self.__wait_resp = 1 + # data = self.__queue.get() + self.__wait_resp = 0 + # return data + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + # 1 则 __Socket_UDP_noreply_write + self.send_data_q.put([head,content]) + + def __Socket_UDP_noreply_write(self, head, content): + # self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + + clog.info("__Socket_UDP_noreply send msg {}".format(msg)) + self.__err = 0 + data_size = self.__sock.sendto(msg,server_addr) + clog.info("self.__sock data_size {}".format(data_size)) + self.__wait_resp = 0 + return 0 + + # socket通信(UDP)模块 + def __Socket_Thread(self): + while True: + try: + clog.info("recv====") + data=self.__sock.recv(1024) + clog.info("data:{}".format(data)) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + clog.info('mode: {0}, recv {1} bytes, Data: {2}'.format (value[0],len(data), value[2])) + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + # self.__value = value + # self.__queue.put('1') + self.btmcu_cmd_handler(value[0],value[2]) + clog.info("End else Thread") + else: + clog.error("data error!!") + except Exception as recverr: + clog.error("recverr:{}\r\n".format(recverr)) + if "110" in str(recverr): + self.__err = 1 + # if self.__wait_resp == 1: + # self.__queue.put('0') + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() + + + + clog.info("End Socket Thread") + + + + +# UDP_CMD_GET_CAT1VER = '0', // 获取 Cat1 版本号 +# UDP_CMD_DIAL_NUMB = '1', // 拨打电话 +# UDP_CMD_HUNGUP = '2', // 挂断电话 +# UDP_CMD_ANSWER = '3', // 接听电话 +# UDP_CMD_CAT1_OTA_UPDATE = '4', // 触发Cat1 OTA升级,mcu提供url +# UDP_CMD_SEND_SMS = '5', // 发送SMS短信,mcu提供电话号及短信内容 +# UDP_CMD_GET_TIME = '6', // 获取Cat1 时间 ,YYYYMMDD HHmmss zone +# UDP_CMD_GET_NETWORKSTAT = '7', //获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 +# 下文进行系统配置 +clog.info("Cat1Service start") + +cat1service = Cat1Service() + +#send_data_q = Queue(100) + +#voice call callback function +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + clog.info('voicecall auto end:') + voiceCall.callEnd() + else: + # gpioWakeBT.write(1) + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall connected, PhoneNO: \n'.format(args[6])) + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + clog.info('voicecall disconnect') + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall disconnected, PhoneNO: \n'.format(args[6])) + cat1service.notifyDisconnectCall(args[6]) + elif args[0] == 13: + clog.info('voicecall is waiting, PhoneNO: \n'.format(args[6])) + elif args[0] == 14: + clog.info('voicecall dialing, PhoneNO: \n'.format(args[6])) + elif args[0] == 15: + clog.info('voicecall alerting, PhoneNO: \n'.format(args[6])) + elif args[0] == 16: + clog.info('voicecall holding, PhoneNO: \n'.format(args[6])) + else: + clog.info('voice_callback , args[0]: \n'.format(args[6])) + +#电话消息反馈 +voiceCall.setCallback(voice_callback) + + +def checknet_cb(arg): + clog.info("start checktime!!") + # if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次 + # if eventMesh.publish("get_dmp_change_mode") == 1: + # telecomDmpCb.telecom_dmp_power_on_count() + + _thread.start_new_thread(cat1service.wait_network_ready, ()) + # time=utime.localtime() + # zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # cat1service.timesync("{0},{1}".format(time,zone)) +# _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +# checknet_cb(()) +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + +# def checkpin_cb(arg): +# clog.info("recvDataPin={}".format(recvDataPin.read())) + +# timerCheckRevPin = osTimer() +# timerCheckRevPin.start(1000,1,checkpin_cb) + + + + + + +# while True: +# utime.sleep(5) + + +# uping.ping("172.16.1.5") + # 获取网卡当前工作状态 + +# gpioWakeBT.write(1) +# utime.sleep(1) + +# timesync = net.nitzTime() +# cat1service.timesync(timesync) + + +#url = "http://zzhc.vnet.cn:9998/" + + diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/checkota.py b/code/sdk/files/n9/fs/user/system/cat1ota/checkota.py new file mode 100644 index 000000000..e5ef1f1ae --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/checkota.py @@ -0,0 +1,150 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 + +import fota +import utime +import log +import uos + +PROJECT_VERSION="PY_OTA_V14" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pyota" +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("Fota") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pyota"): + return "PY_OTA_V13" + + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + try: + ql_fs.touch(CONFIG_JSON,data) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def set_version_to_json_config(app_type,keyvalue): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + + ql_fs.touch(CONFIG_JSON, config_data) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + print("{}".format(config_data)) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def get_version_from_json_config(app_type): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + except Exception as e: + print("get_version_from_json_config出错 {}".format(e)) + return "" + +def result(args): + print('download status:',args[0],'download process:',args[1]) + +def check_fota(): + modem_ver = modem.getDevFwVersion() + imei = modem.getDevImei() + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(modem_ver,imei) + response = request.get(url) + print(url) + data = response.json() + if(data['UptoDate'] == False): + print("Need update python application") + fota_obj = fota() # 创建Fota对象 + print("httpDownload...") + srcurl = data['url'] + #差分升级方式 + # res = fota_obj.httpDownload(url1="http://www.example.com/fota.bin",callback=result) + # mini fota方式 + print("{},{}".format("{}/dfota_1.bin".format(srcurl),"{}/dfota_2.bin".format(srcurl))) + res = fota_obj.httpDownload(url1="{}/dfota_1.bin".format(srcurl),url2="{}/dfota_2.bin".format(srcurl),callback=result) + #差分升级FTP方式 + #res = fota_obj.httpDownload(url1="ftp://user:password@ip:port/fota.bin",callback=result) #其中user,password,ip,port需要填写具体使用的FTP服务器信息 + if res != 0: + print("httpDownload error") + return + print("wait httpDownload update...") + else: + print("No need update python application") + +def do_app_update_internal(app_type): + fota = app_fota.new() + imei = modem.getDevImei() + pythonversion=get_version_from_json_config(app_type) + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(pythonversion,imei) + try: + response = request.get(url) + print(url) + data = response.json() + if data['UptoDate'] == False: + print("Need update python application {}".format(data["appcount"])) + for app_update in data["apps"]: + srcurl = app_update['url'] + print("run start...") + targetpyname = app_update['OtaPackageName'] + version = app_update['OtaPackageVersion'] + tmpfile_path = "/usr/.updater/{}".format(targetpyname) + targetfile_path = "/usr/{}".format(targetpyname) + print("download {0} to {1}".format(srcurl,targetfile_path)) + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + ret = fota.download(srcurl,targetpyname) + if ret == 0 : + try: + ql_fs.file_copy(targetfile_path, tmpfile_path) + set_version_to_json_config(app_type,version) + print("ota success") + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + except Exception as e: + print("ota failed!") + else: + print("ota failed") + # 升级后重启 + Power.powerRestart() + else: + print("No need update python application") + except Exception as e: + print("nonetwork:{}".format(e)) + +if __name__ == '__main__': + print("check ota start!!!!!!!!!!") + set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + stage, state = checkNet.waitNetworkReady(1) + if stage == 3 and state == 1: + print('Network connection successful.') + do_app_update_internal("pyota") + # check_fota() + else: + print('Network connection failed, stage={}, state={}'.format(stage, state)) + +# res = uos.statvfs("/usr") +# res = list(res) +# print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024))) \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_ai_regulation.py b/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_ai_regulation.py new file mode 100644 index 000000000..9cd4bf9a8 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_ai_regulation.py @@ -0,0 +1,416 @@ +#AI 纳管对接文件 +import modem +import request +import utime +import osTimer +import ql_fs +from machine import RTC +from misc import Power +import uos +import ujson +import urandom +from usr.EventMesh import eventMesh +HEARBEAT_REPORT_TIMER_CONFIG = 60*60*12#60*60*12 #心跳上报时间间隔12小时可更改做测试 +REALY_TIME_COUNT = 60*60# #开启1小时实时定时器 +HEART_REPORT_ERROR_TIMER = 60 #心率上报错误定时器检测 按照1分钟检查 +PRODUCTID = "1927646275585744898" #产品ID +PRODUCTKEY = "iijgiGiTolCblSFE" #产品KEY 平台创建产品是生成的 +HEART_REPORT_ERR_MAX_NUM = 30 #连续上报错误次数最大值 30 网络异常或者哪里报错了 重启设备 可根据实际的用户的需求更改次数 +REPORT_MODE = 1 #上报方式 1 24小时内一定上报一次 2 12小时后上报一次 +class AIRegulation: + #定义全局变量 + def __init__(self): + self.timerStart = osTimer() + self.timerStartReportHr = osTimer() + self.productId = PRODUCTID + self.productKey = PRODUCTKEY + self.deviceId = "" #设备ID + self.deviceSecret = "" #设备私钥 + self.config_data = {} + self.getDevInforErrCount = 0 #获取设备信息错误次数累计 + self.report_state = 0 #超过24小时清0 + self.TimeSec = 0 #上报的时间戳 + self.startTimerState = 0 + self.software_version = "" + self.imei_new = "" + self.init_flag = 0 + self.net_work_state = 0 + self.dev_mac = "" + eventMesh.subscribe("get_dev_version",self.get_dev_version) + eventMesh.subscribe("set_dev_version",self.set_dev_version) + eventMesh.subscribe("get_dev_mac",self.get_dev_mac) + eventMesh.subscribe("set_dev_mac",self.set_dev_mac) + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + self.report_err_count = 0 #上报错误次数 30次 + + def set_network_state(self,event,msg): + self.net_work_state=int(msg) + + def get_network_state(self,event,msg): + return self.net_work_state + + def set_dev_version(self,event,msg): + self.software_version=str(msg) + + def get_dev_version(self,event,msg): + return self.software_version + def get_dev_mac(self,event,msg): + return self.dev_mac + def set_dev_mac(self,event,msg): + self.dev_mac = str(msg) + #要或者设备的mac 和设备的固件版本号 + + #读取存储设备的设备参数 包含设备imei 设备ID和设备私钥 同一个设备设备ID和设备私钥不变 + def read_dev_storage_param(self): + + IMEI = modem.getDevImei() #获取IMEI号 + result_ok = 0 #返回结果状态 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") # + if IFEXIST == True: #文件存在 + fileSize = ql_fs.path_getsize('usr/cm_ai_regulation.json') + if fileSize == 0: + result_ok = 0 + print("设备信息配置文件不存在\r\n") + return result_ok + else: + try: + with open("/usr/cm_ai_regulation.json","r",encoding='utf-8') as fd: + try: + self.config_data = ujson.load(fd) #转换成json格式 + if len(self.config_data) != 0: + if "deviceId" in self.config_data:# + self.deviceId = str(self.config_data["deviceId"]) #设备ID + + #存在 + if "deviceSecret" in self.config_data: + self.deviceSecret = str(self.config_data["deviceSecret"]) + #存在 + if "TimeSec" in self.config_data: + self.TimeSec = self.config_data["TimeSec"] + if "IMEI" in self.config_data: + self.imei_new = self.config_data["IMEI"] + if str(self.imei_new) != str(IMEI): #设备IMEI不一样也要重新获取 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + result_ok = 0 + return result_ok + + if len(str(self.deviceId)) != 0 or len(str(self.deviceSecret)) != 0: + result_ok = 1 + else: #m没有存储数据 需要从平台上获取设备信息 + result_ok = 0 + except Exception as error: + print("配置文件的内容不是json格式 保存数据的时候格式不对\r\n") + result_ok = 0 + except Exception as error: + print("打开配置文件失败\r\n") + result_ok = 0 + else: + print("配置文件不存在!!!!\r\n") + result_ok = 0 + + print("cm_ai_regulation result_ok: {} self.config_data:{}\r\n".format(result_ok,self.config_data)) + return result_ok + #写文件信息 + def write_config_msg_file(self,msg): + + print("cm_ai_regulation msg:{}\r\n".format(msg)) + with open("/usr/cm_ai_regulation.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + def get_dev_info(self): #是否需要获取设备信息 + request_result = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + request_result = 0 + return request_result + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/secret/info" + #获取设备ID和设备私钥 + get_dev_storage = self.read_dev_storage_param() #返回1说明已经获取过设备信息 不需要再重新获取了只有 + if get_dev_storage == 0: #还没有获取设备信息需要获取一遍 + #获取设备设备信息地址 + IMEI = modem.getDevImei() #获取IMEI号 + + headers_T ={"Content-Type":"application/json"} + config_data ={ + "deviceNoType":"IMEI", + "deviceNo":str(IMEI), + "productKey":str(self.productKey), + "productId":str(self.productId), + } + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + + result_json = "" + response = 0 + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: + if "data" in result_json: + data_json = result_json["data"] + if "deviceId" in data_json: + self.deviceId = data_json["deviceId"] + if "deviceSecret" in data_json: + self.deviceSecret = data_json["deviceSecret"] + + if len(self.deviceId) != 0 or len(self.deviceSecret) != 0: #获取设备信息成功 保存数据 用做心跳上报 + request_result = 1 + self.config_data["deviceId"] = str(self.deviceId) + self.config_data["deviceSecret"] = str(self.deviceSecret) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "deviceNo":"xxx", + # "productId":"xxx", + # "deviceSecret":"xxx" + # } + # } + else: + request_result = 0 + print("后台返回数据json字段里面没有data字段\r\n") + else: + request_result = 0 + print("后台返回数据失败 可能是设备没有加入产品或者产品私钥或者产品ID对不上\r\n") + except Exception as e: #不是json格式 + print("not json data:{}".format(e)) + request_result = 0 + else: + print("未响应 或者网络异常连接不上后台\r\n") + request_result = 0 + except Exception as e: + print("response error:{}".format(e)) + request_result = 0 + else: + request_result = 1 + return request_result + + #上报心跳数据 + def report_hr_data(self): #设备ID 设备私钥不为空才可以上报 + result_s = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + result_s = 0 + return result_s + if len(str(self.deviceId)) != 0 and len(str(self.deviceSecret)) != 0: + + ######################################################### + # { + # "deviceId":"1927659130106658817", + # "deviceSecret":"xmvlRHbEaKPtCqHt", + # "productId":"1927646275585744898", + # "productKey":"iijgiGiTolCblSFE", + # "params": { + # "innerIp": [ + # "127.0.0.1" + # ], + # "netSpeed": "0Mbps", + # "netType": "4G", + # "platform": "RTOS", + # "sdkVersion": "ai_http_1.0", + # "firmwareVersion": "0.0.5.2", + # "imei": "860132060564184", + # "cmei": "", + # "mac": "" + # } + # } + IMEI = modem.getDevImei() #获取IMEI号 + tmp_mac = "" + if len(self.dev_mac) != 0: + tmp_mac = self.dev_mac.replace(':', '-') #将传过来的字符里面的:转换成- + #数据格式内容 + data_json = { + "deviceId":str(self.deviceId), #设备ID + "deviceSecret":str(self.deviceSecret), #设备私钥 + "productId":str(self.productId), #产品ID + "productKey":str(self.productKey), #产品私钥 + "params": { + "innerIp": [ + "127.0.0.1" + ], + "netSpeed": "0Mbps", + "netType": "4G", + "platform": "RTOS", + "sdkVersion": "ai_http_1.0", + "firmwareVersion":str(self.software_version), #设备固件版本号 + "imei": str(IMEI), #设备IMEI号 + "cmei": "", + "mac": str(tmp_mac) #设备MAC地址 + } + } + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/report" #post请求上报数据心跳地址 + #获取设备ID和设备私钥 + try: + headers_T ={"Content-Type":"application/json"} #应用是json格式 + response = request.post(url, data=ujson.dumps(data_json),headers =headers_T) #post请求数据 + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) #将字符串转换成json格式 + print("response.json:{}".format(result_json)) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: #上报成功返回 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) #获取当前时间戳 用于下次时间判断上报心跳数据 + print("date_tmp :{} time_tmp:{}\r\n".format(date_tmp,time_tmp)) + self.report_state = 1 #表示上报成功 置标志1 12小时之内不清0 12小时之后再次上报清零 + self.TimeSec = str(time_tmp) + self.config_data["TimeSec"] = str(time_tmp) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "protocolTypeTime":"xxx" + # } + # } + result_s = 1 + else: + result_s = 0 + except Exception as e: #不是json格式 + print("response:{}".format(e)) + result_s = 0 + else: + result_s = 0 + except Exception as e: + print("response:{}".format(e)) + result_s = 0 + if REPORT_MODE == 1: #上报方式1 + if result_s == 1: #当前上报数据成功 开启下一个上报心跳数据定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #两个时间戳相减大于24小时啧清0 + timerStart_init = HEARBEAT_REPORT_TIMER_CONFIG*1000+random_integer*1000*60 + print("timerStart_init {} random_integer:{}\r\n".format(timerStart_init,random_integer)) + self.timerStartReportHr.start(timerStart_init,0,self.timerStartReportHrCbOne)#重新开始 单次定时器 + else: #上报方式2 + if self.startTimerState == 0: + self.startTimerState = 1 + self.open_report_start_timer() + else: + result_s = 2 + self.AIRegulation_init() #重新初始化 + return result_s + return result_s + def timerStartReportHrCbOne(self,*argc): + reportStatus = self.report_hr_data() #上报心跳数据接口函数 + print("timerStartReportHrCbOne {}\r\n".format(reportStatus)) + if reportStatus == 0: #当前上报失败 开启1分钟的定时器检测 + self.timerStart.stop() + self.report_err_count = 0 + self.timerStart.start(HEART_REPORT_ERROR_TIMER*1000,1,self.oneMinTimerStartCb)#重新开始 + else: + self.timerStart.stop() + + def oneMinTimerStartCb(self,*argc): + reportStatus = self.report_hr_data() + print("oneMinTimerStartCb {}\r\n".format(reportStatus)) + if reportStatus != 0: # + self.timerStart.stop() + else: + self.report_err_count+=1 + if self.report_err_count >= HEART_REPORT_ERR_MAX_NUM: + self.report_err_count = 0 + self.timerStart.stop() + Power.powerRestart() #重启设备 可能网络异常或者哪里出错了 + + def timerStartReportHrCb(self,*argc): #上报心跳定时器回调 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #-15 - +15上报时间随机值分钟单位 *60*1000 + data = RTC().datetime() + year = data[0] + month = data[1] + day = data[2] + + if self.report_state == 1: #上报过一次 就等下一个12小时再上报一次 + #当前时间大于上次记录时间加上12小时就上报一次 + next_alarm_time = utime.localtime(int(self.TimeSec)) + old_month = next_alarm_time[1] + old_day = next_alarm_time[2] + old_year = next_alarm_time[0] + # if 1: + # if old_year != year or old_month != month or old_day != day: + # self.report_state = 0 + # self.report_hr_data() + + # else: + if (time_tmp >= self.TimeSec + HEARBEAT_REPORT_TIMER_CONFIG*1000 + random_integer*60*1000) or (old_year != year or old_month != month or old_day != day): #or old_year != year or old_month != month or old_day != day: #上次上报时间戳+12小时时间戳 大于当前时间戳 上报一次 或者年 月 日不一致也上报一次 + self.report_state = 0 + self.report_hr_data() + else: #确保12小时之内上报一次 每一个小时上 + self.report_hr_data()#上报一次心跳数据 + + def open_report_start_timer(self): #1小时的定时器 + self.timerStartReportHr.start(REALY_TIME_COUNT*1000,1,self.timerStartReportHrCb)#1小时定时 + + def timerStartCb(self,*argc):#获取设备信息定时器回调 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:# + self.getDevInforErrCount+=1 + if self.getDevInforErrCount >= 20: + self.getDevInforErrCount = 0 + self.timerStart.stop() + else: + self.getDevInforErrCount = 0 + self.timerStart.stop() + self.report_hr_data()#上报一次心跳数据 + + def AIRegulation_init(self):#AI 纳管 初始化 获取完设备数据后立马上报心跳数据 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") + if IFEXIST == True: + uos.remove("/usr/cm_ai_regulation.json") + self.init_flag = 1 + self.report_state = 0 + self.getDevInforErrCount = 0 + self.report_err_count = 0 + self.timerStartReportHr.stop() + + self.startTimerState = 0 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:#开机获取失败了再等30s重新获取 获取二十次都失败就等下次重启设备获取 + self.timerStart.stop() + self.timerStart.start(30*1000,1,self.timerStartCb)#重新开始 开机10分钟内没有获取到设备信息就不获取了需要手动重启设备 + else: #设备开机获取设备信息成功 立马上报一次心跳数据 + self.report_hr_data()#上报一次心跳数据 + +aiRegulation = AIRegulation() + diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_dmp.py b/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_dmp.py new file mode 100644 index 000000000..8128328bd --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/china_mobile_dmp.py @@ -0,0 +1,842 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from ucryptolib import aes +import hashlib +from usr.EventMesh import eventMesh +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") +import modem +import base64 +import request +import ujson +import sim + +BLOCK_SIZE = 16 +NEED_SAVE_CONFIG_FILE = 0 #是否需要保存上报次数 异常重试次数 时间戳到配置文件 0不保存 1保存 +#中国移动入库 +class chinamobile: + def __init__(self): + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + self.config_data = {} + + self.__net_connected = 0 + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mac_data ="" + self.address = "a.fxltsbl.com" + + self.new_address = "a.fxltsbl.com" + + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + self.init_flag = 0#初始化状态指初始化一次 + self.retryTimer = osTimer()#异常重试定时器 + self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发 + self.heartreportTimer = osTimer()#心跳上报定时器 + + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息 + eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息 + + eventMesh.subscribe("set_dmp_cm_address",self.set_dmp_cm_address)#订阅消息 + eventMesh.subscribe("get_dmp_cm_address",self.get_dmp_cm_address)#订阅消息 + + pass + + def set_dmp_cm_address(self,event,msg):#设置网络是否正常 + self.address = str(msg) + self.new_address = str(msg) + + def get_dmp_cm_address(self,event,msg):#获取网络是否正常 + return self.address + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def set_dev_mac(self,event,msg):#设置BLE MAC地址 + self.mac_data = str(msg) + + def get_dev_mac(self,event,msg):#获取BLE MAC地址 + return self.mac_data + + def sha256_encode(self,key,data):#对数据进行AES256加密 + h = hashlib.sha256() + h.update(key) + crypto_key = h.digest() + #IV是偏移量 默认16个十六进制00 + IV = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + crypto = aes(crypto_key, 2, IV) + + #进行PKCS7Padding填充。 + block_num = len(data) // BLOCK_SIZE+1 + k = len(data) % BLOCK_SIZE + j = len(data) // BLOCK_SIZE + padding = BLOCK_SIZE - k + i = 0 + szDataIn = bytearray(data) + # print(szDataIn) + szDataIn = szDataIn+bytearray(block_num * BLOCK_SIZE -len(data)) + # print(szDataIn) + + for i in range(padding): + szDataIn[j * BLOCK_SIZE + k + i] = padding + # print("szDataIn:{} {} {}\r\n".format(szDataIn,j * BLOCK_SIZE + k + i,padding)) + + indata = bytes(szDataIn) + enc = crypto.encrypt(indata) + #最后将加密AES256的数据转换成base64的编码格式 + msg_tmp = base64.b64encode(enc) + data_encode = msg_tmp.decode('ascii')#转换成字符串 + return data_encode + + #写文件信息 + def write_config_msg_file(self,msg): + + print("write_config_msg_file msg:{}\r\n".format(msg)) + with open("/usr/china_mobie_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + #读文件信息 + def read_config_msg_file(self): + IFEXIST = ql_fs.path_exists("/usr/china_mobie_config.json") #不存在 + if IFEXIST == True: + with open("/usr/china_mobie_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("read_config_msg_file self.config_data:{}\r\n".format(self.config_data)) + + def china_mobile_first_get_config(self,url): + ##############第一步#######获取采集规则配置####### + # brand = "KUMI"#品牌 + # model = "Watch Soar"#型号 + # NWO N9 + brand = "NWO"#品牌 + model = "NWO N9"#型号 + + + appKey = "M100001131"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = "autoRegist"#自注册填autoRegist 心跳配置传输 keepAlive + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + + + #配置拉取数据格式 + config_data = {"endpoint":"{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,preField1,preField2,preField3),"configType":"{}".format(configType)} + + #配置拉取数据上报地址 + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + headers_T ={"Content-Type":"application/json"} + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + request_result = 0 + result_json = "" + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + request_result = 1 + if response.status_code == 200:#服务器响应成功并返回数据 + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + + if request_result == 0: #请求出错了 + return "" + + + return result_json + + + def first_get_config_json(self):#开机上电获取配置信息 + getresult = 0 + print("first_get_config_json false",self.__net_connected) + network_state = eventMesh.publish("get_network_state") + if network_state != 1:#网络不正常 + print("网络不正常") + return getresult + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + result_json = self.china_mobile_first_get_config(url) + + if result_json == "": + print("result_json == NULL") + return 0 + # { + # "reportTime":1440, + # "reportNum":8, + # "heartBeatTime":1440, + # "retryInterval":10, + # "retryNum":1 + # }#默认采集规则配置 + #默认参数 + + retryInterval = self.retryInterval + heartBeatTime = self.heartBeatTime + reportTime = self.reportTime + reportNum = self.reportNum + retryNum = self.retryNum + new_address = self.address + print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,new_address)) + if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档 + rspCode = result_json["rspCode"] + rspCode_zh = result_json["rspMsg"] + if rspCode == "0000" or rspCode_zh == "成功": + getresult = 1 + if "result" in result_json: + msg_data = result_json["result"] #采集规则配置信息 + if "ruleConfig" in msg_data:#不存在就是空 + msg_data = msg_data["ruleConfig"] + msg_data = ujson.loads(msg_data)#转换成json格式 + if "reportTime" in msg_data: + self.reportTime = int(msg_data["reportTime"]) + if "heartBeatTime" in msg_data: + self.heartBeatTime = int(msg_data["heartBeatTime"]) + if "reportNum" in msg_data: + self.reportNum = int(msg_data["reportNum"]) + if "retryInterval" in msg_data: + self.retryInterval = int(msg_data["retryInterval"]) + if "retryNum" in msg_data: + self.retryNum = int(msg_data["retryNum"]) + if "address" in msg_data: + self.address = str(msg_data["address"]) + print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum,self.address)) + + print("true") + else: + print("false") + + if getresult == 1:#请求配置文件成功 + if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or\ + (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != new_address): + #重新走注册流程 清空报错次数 记录当前时间戳 + print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致 + self.config_data["reportTime"] = self.reportTime + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportNum"] = self.reportNum + self.config_data["retryNum"] = self.retryNum + self.config_data["retryInterval"] = self.retryInterval + # self.config_data["address"] = str(self.address) + if new_address != self.address : #服务器下发和本地不一致需要用服务器下发的最新的IP 并把这个IP发送到BLE保存 + eventMesh.publish("send_dmp_cm_address_toBLE",str(self.address)) + + self.write_config_msg_file(self.config_data) #保存新的配置文件 + return 2 + return getresult #1 获取成功 0 获取失败 + + + def china_mobile_autoregist_infor(self,url,configType_data): + #########################第二步############自注册上报################### + #设备自注册上报 + dev_autoregist_result = 0 #默认是1成功 0是失败 + network_state = eventMesh.publish("get_network_state") + if network_state != 1:#网络不正常 + return dev_autoregist_result + #密钥 + key = "03816c12b6d24182981325e57670e478" + + brand = "{}".format("NWO")#品牌 + + # model = "Watch Soar"#型号 + model = "NWO N9"#型号 + + # -*- coding: UTF-8 -*- +#示例 + + + appKey = "M100001188"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = configType_data#自注册填autoRegist 心跳配置传输 keepAlive 暂时不用 + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + + batteryCapacityCurr="***" + + + #不需要加密 #||分隔符不能超过11个 否则平台会解析出错 + config_data = "{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,configType,preField1,preField2) + + #需要加密的数据明文 + mac_data="***"#eventMesh.publish("get_dev_mac") + + if (len(mac_data) == 0):#获取失败了 + mac_data = "***" + + imsi = sim.getImsi() + print("Get IMSI : {}".format(imsi)) + + MAC = mac_data + # base64_MAC = sha256_encode(key,MAC) + RAM = "***" + # base64_RAM = sha256_encode(key,RAM) + ROM = "***" + # base64_ROM = sha256_encode(key,ROM) + CPU = "***" + # base64_CPU = sha256_encode(key,CPU) + GPU = "***" + + imsi2="***" + + sysVersion = "***" + + board = "***" + + # base64_sysVersion = sha256_encode(key,sysVersion) + if (len(self.software_version) == 0):#获取失败了 + # self.software_version = "Watch Soar V1.0" + self.software_version = "NWO N9 V1.0" + + softwareVer = "NWO N9 V1.0" + # base64_softwareVer = sha256_encode(key,softwareVer) + # softwareName ="FD230" + softwareName ="***" + + sn="***" + + batteryCapacity="***" + + phoneNumber="***" + # base64_softwareName = sha256_encode(key,softwareName) + volte="***" #0:开;1:关;-1:不支持 + # base64_volte = sha256_encode(key,volte) + netType="***" + # base64_netType = sha256_encode(key,netType) + + resolution="466*466" + # base64_resolution = sha256_encode(key,resolution) + + screenSize = "1.43" + # base64_screenSize = sha256_encode(key,screenSize) + wearingStatus ="未佩戴" + # base64_wearingStatus = sha256_encode(key,wearingStatus) + + networkStatus ="***"#1:连接;0:未连接;-1:不支持 + + routerMac = "***" + + wifiMac = "***" + # base64_networkStatus = sha256_encode(key,networkStatus) + encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus,routerMac,wifiMac,imsi,GPU,imsi2,board,sn,batteryCapacity,phoneNumber,batteryCapacityCurr] + print(len(encyr_data)) + encyr_new_data=[] + for i in range(len(encyr_data)): + tmp_data = self.sha256_encode(key,encyr_data[i]) + encyr_new_data.append(tmp_data) + + # deviceInfo_tmp = { + # "bluetoothMac":"{}".format(base64_MAC),#mac地址可填可不填 + # "ram":"{}".format(base64_RAM),#ram信息 + # "rom":"{}".format(base64_ROM),#rom信息 + # "cpu":"{}".format(base64_CPU),#cpu信息 + # "sysVersion":"{}".format(base64_sysVersion),#操作系统版本号 + # "softwareVer":"{}".format(base64_softwareVer),#固件版本号 + # "softwareName":"{}".format(base64_softwareName),#固件名称 + # "volte":"{}".format(base64_volte),#volte开关 默认是开 + # "netType":"{}".format(base64_netType),#当前网络类型4G + # "resolution":"{}".format(base64_resolution),#屏幕分辨率466*466 + # "screenSize":"{}".format(base64_screenSize),#屏幕尺寸默认1.43 + # "wearingStatus":"{}".format(base64_wearingStatus),#佩戴状态不支持 + # "networkStatus":"{}".format(base64_networkStatus)#网络状态 + + # } + if configType_data=="keepAlive": + print("keepAlive :") + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]), #wifi mac + "imsi":"{}".format(encyr_new_data[15]), #imsi + "gpu":"{}".format(encyr_new_data[16]), #GPU + "imsi2":"{}".format(encyr_new_data[17]), #imsi2 + "board":"{}".format(encyr_new_data[18]), #board + "sn":"{}".format(encyr_new_data[19]), #board + "batteryCapacity":"{}".format(encyr_new_data[20]), #board + "phoneNumber":"{}".format(encyr_new_data[21]), #board + "batteryCapacityCurr":"{}".format(encyr_new_data[22]), #board + } + else : + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]), #wifi mac + "imsi":"{}".format(encyr_new_data[15]), #imsi + "gpu":"{}".format(encyr_new_data[16]), #GPU + "imsi2":"{}".format(encyr_new_data[17]), #imsi2 + "board":"{}".format(encyr_new_data[18]), #board + "sn":"{}".format(encyr_new_data[19]), #board + "batteryCapacity":"{}".format(encyr_new_data[20]), #board + "phoneNumber":"{}".format(encyr_new_data[21]), #board + + } + json_data = ujson.dumps(deviceInfo_tmp)#需要转义的字符串 + + + + + send_autoregist = { + "endpoint":config_data, + "deviceInfo":"{}".format(json_data) + } + + test_data = ujson.dumps(send_autoregist)#需要转义的字符串 + print("test_data:{}".format(test_data)) + headers_T ={"Content-Type":"application/json"} + request_result = 0 + print("shangbao address:{}\r\n".format(url)) + try: + response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T) + request_result = 1 + result_json = "" + print("response success:response.status_code{}\r\n".format(response.status_code)) + if response.status_code == 200: + dev_autoregist_result = 1 + content = response.content + c = next(content) + result_json = ujson.loads(c)#解析成json格式 + else: + dev_autoregist_result = 0 + + + if "rspCode" in result_json: + rspCode = result_json["rspCode"] + rspMsg = result_json["rspMsg"] + print("response success:rspCode{} {}\r\n".format(rspMsg,rspCode)) + if rspCode == "0000" or rspMsg == "成功": + dev_autoregist_result = 1 + else: + dev_autoregist_result = 0 + else: + dev_autoregist_result = 0 + print("response success:\r\n") + return dev_autoregist_result + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + if request_result == 0:#请求出错了 + dev_autoregist_result = 0 + return dev_autoregist_result + + + def read_config_file(self):#获取配置文件,一开机是没有配置文件的 + + self.read_config_msg_file()#读文件信息 + if self.config_data != {}: + if "retryInterval" in self.config_data: + self.retryInterval = int(self.config_data["retryInterval"]) + if "retryNum" in self.config_data: + self.retryNum = int(self.config_data["retryNum"]) + if "heartBeatTime" in self.config_data: + self.heartBeatTime = int(self.config_data["heartBeatTime"]) + if "reportTime" in self.config_data: + self.reportTime = int(self.config_data["reportTime"]) + if "reportNum" in self.config_data: + self.reportNum = int(self.config_data["reportNum"]) + if "address" in self.config_data: + self.address = str(self.config_data["address"]) + + #终端本地需要保存本地的数据 + # self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + # self.report_Num_old = 0#保存本地 + # self.retryNum_old = 3#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + if "reportTime_Sec" in self.config_data: + self.reportTime_Sec = int(self.config_data["reportTime_Sec"]) + if "report_Num_old" in self.config_data: + self.report_Num_old = int(self.config_data["report_Num_old"]) + if "retryNum_old" in self.config_data: + self.retryNum_old = int(self.config_data["retryNum_old"]) + + print("read_config_file self.config_data:{} ".format(self.config_data)) + def retryTimerCb(self,*argc):#异常重试机制定时器回调 + #保存本地 + self.retryNum_old+=1 #1 self.reportNum = 1 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["retryNum_old"] = self.retryNum_old + self.write_config_msg_file(self.config_data) + print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old)) + self.search_report_num_step() + pass + def reportTimerIntervalError(self): + self.retryNum_old = 0#保存 + self.report_Num_old = 0#保存 定时清空数据 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.search_report_num_step()#重新查询 + pass + def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤 + print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{} self.reportTime:{}\r\n".format(self.retryNum_old,self.retryNum,self.reportTime)) + + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#self.retryNum_old > 10#结束HTPP下一个最大频率周期时间间隔流程 + print("error_retryNum_step:self.retryNum_old >= self.retryNum\r\n") + self.reportTimerIntervalError() + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalError)#重新开始 需要清空数据 + else: + get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端 + if get_result == 0:#获取失败或者没有网络 走异常重试机制 + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step:self.retryTimer.start :{} {} {}\r\n".format(self.retryInterval,self.report_Num_old,self.reportNum)) + self.checkMaxReportNum()#检查上报最大次数 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + pass + else:# + + #第一步触发自注册 + if get_result == 2:#请求的配置文件和本地不一致重启 + self.retryNum_old = 0#保存本地 配置文件不同重启模组 清空异常重试的报错次数 + # self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + # if NEED_SAVE_CONFIG_FILE == 1: + # self.config_data["report_Num_old"] = self.report_Num_old + # self.config_data["retryNum_old"] = self.retryNum_old + # self.write_config_msg_file(self.config_data) + + self.china_mobile_init_param()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件 + self.search_report_num_step() + return + + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step self.report_Num_old:{}\r\n".format(self.report_Num_old)) + if self.checkMaxReportNum() == 1:#检查上报最大次数 + self.search_report_num_step()#重新查询 + return + report_result = self.onself_regist_report_cb()#注册 + + #第二步触发心跳上报次数 + if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳 + self.heartreportTimer.stop() + self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb) + + def heartreportTimerCb(self,*argc): + self.heart_report_cb() + + def retpoertTimerClear(self): + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.retpoertTimerC.stop()#关闭定时器 + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + pass + def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + # + date_tmp = utime.localtime() + currentTime = utime.mktime(date_tmp)#获取时间戳 + reportTime = self.reportTime_Sec + print("check_current_time:time_tmp - self.reportTime_Sec:{} currentTime:{} self.reportTime*60:{}".format(reportTime, currentTime,self.reportTime*60)) + if currentTime >= reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据 + #在规定时间内上报次数大于8次就要等下一个10分钟 或者1440分了开个定时器 + print("currentTime >= reportTime:\r\n") + self.retpoertTimerClear() + else:#否则次数置零,记录一下(当前时间+reportTime)时间 + time_count = (reportTime - currentTime) #self.reportTime_Sec永远比time_tmp大 + print("time_count:{}".format(time_count)) + print("currentTime < reportTime:\r\n") + self.retpoertTimerC.start(time_count*1000,0,self.retpoertTimerCB) + + + # 第一次请求的时候,记录一下(当前时间+reportTime)时间与次数,如果次数小于最大次数,直接返回true。 + # 如果次数大于最大次数,则判断一下当前时间是否超过上次设置的时间,如果超过了,则表示超过最大次数;否则次数置零,记录一下(当前时间+reportTime)时间。 + def retpoertTimerCB(self,*argc):#按照剩余的时间做定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + + + def search_report_num_step(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + def search_report_num_step_init(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.reportTime_Sec == 0: + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + + def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器 要清空数据 + print("reportTimerIntervalCb\r\n") + self.search_report_num_step()#重新查询 + + def onself_regist_report_cb(self):#自注册上报信息 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("onself_regist_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + self.report_Num_old+=1 ##保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + #设备自注册上报信息 + print("onself_regist_report_cb:self.china_mobile_autoregist_infor") + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址 + confing_type = "autoRegist"#上报传输配置 + result = self.china_mobile_autoregist_infor(url,confing_type) + + + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum()#检查上报最大次数 + if self.checkMaxRetryNum() == 1: + print("retryTimerCb timer22")#异常重试过多重新间隔reportTime注册流程 关闭所有的定时器 + self.search_report_num_step()#重新查询 + return 0 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return 0 + else: + if self.checkMaxReportNum() == 1: + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) + return 0 + else: + return 1 + def checkMaxReportNum(self):#检查上报次数最大值 + print("checkMaxReportNum :self.reportNum :{} self.report_Num_old:{}\r\n".format(self.reportNum,self.report_Num_old)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + return 1 + else: + return 0 + + def checkMaxRetryNum(self):#检查上报错误次数 + print("checkMaxRetryNum :self.retryNum:{} self.retryNum_old:{}\r\n".format(self.retryNum_old,self.retryNum)) + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程 + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop()#关闭心跳定时器 + return 1 + else: + return 0 + + def heart_report_cb(self):#心跳上报信息 + + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.report_Num_old+=1#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("heart_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime,self.reportTime_Sec)) + + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址 + confing_type = "keepAlive"#上报传输配置 + print("heart_report_cb:self.china_mobile_autoregist_infor") + result = self.china_mobile_autoregist_infor(url,confing_type) + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum() + if self.checkMaxRetryNum() == 1:#异常重试过多重新间隔reportTime注册流程 + self.search_report_num_step()#重新查询 + return + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return + if self.checkMaxReportNum() == 1:#上报次数大于8次 + self.search_report_num_step()#重新查询 + return + + def china_mobile_init_param(self):#初始化 + + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + #先清空再写入默认参数 + self.init_flag = 1 + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + get_address = eventMesh.publish("get_dmp_cm_address") + if get_address == None:#获取出来地址是空的使用适配地址 + self.address = "a.fxltsbl.com"#默认 + else: #恢复出厂使用BLE传送过来的地址 + self.address = str(eventMesh.publish("get_dmp_cm_address")) + + self.config_data["retryInterval"] = self.retryInterval + self.config_data["retryNum"] = self.retryNum + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportTime"] = self.reportTime + self.config_data["reportNum"] = self.reportNum + # self.config_data["address"] = self.address + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["report_Num_old"] = self.report_Num_old + self.config_data["retryNum_old"] = self.retryNum_old + + self.write_config_msg_file(self.config_data) + #读配置文件 + self.read_config_file()#只读一下配置文件 + + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + def china_mobile_init(self): + self.china_mobile_init_param() + #查询上报总数流程 + self.search_report_num_step_init() + + + + +chinamobileCb = chinamobile() + + + + + + + + + + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/httpota.py b/code/sdk/files/n9/fs/user/system/cat1ota/httpota.py new file mode 100644 index 000000000..1f7ff897c --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/httpota.py @@ -0,0 +1,43 @@ +#远程升级 + +import fota +import utime +import log +import checkNet + +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 +import uos + + +# 设置日志输出级别 + +class httpota: + def __init__(self): + print("httpota init") + + + def run(url_1,url_2): + print("httpDownload...{}".format(url_1)) + print("httpDownload...{}".format(url_2)) + # format(str(url_2))) + fota_obj = fota() # 创建Fota对象 + # res = fota_obj.httpDownload(str(url_1),str(url_2)) + res = fota_obj.httpDownload(url1="{}".format(url_1),url2="{}".format(url_2)) + if res != 0: + print.error("httpDownload error") + return + print("wait httpDownload update...") + utime.sleep(2) + # Power.powerRestart() + +# httpota = httpota() +# httpota.run("http://snicker.com.cn:8089/FD230/V18-V19OTA") \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/main.py b/code/sdk/files/n9/fs/user/system/cat1ota/main.py new file mode 100644 index 000000000..3d70c7cac --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/main.py @@ -0,0 +1,15 @@ +import example +main_flag = 1 +try: + from usr.slipService import slipservice + from usr.tcpService import TcpService + import usr.checkota + example.exec('/usr/main_init.py') + print("启动成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + print("启动失败!!!!!\r\n".format(e)) + + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/main_init.py b/code/sdk/files/n9/fs/user/system/cat1ota/main_init.py new file mode 100644 index 000000000..9ed74f7ce --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/main_init.py @@ -0,0 +1,77 @@ +import example +import osTimer +import ql_fs +import log +import sms +from misc import Power +ota_flag = 0 +try: + from usr.EventMesh import eventMesh + from usr.telecom_dmp import telecomDmpCb + from usr.china_mobile_dmp import chinamobileCb + from usr.cat1Service import cat1service + ota_flag = 1 + print("检测文件成功!!!!!!!\r\n") +except Exception as e: + print("检测文件失败!!!!!!!{}\r\n".format(e)) + ota_flag = 0 +tmp_dir = ql_fs.path_exists("/usr/TmpPyFile") #临时存放的文件夹 +if tmp_dir == True: + try: + ql_fs.rmdirs("/usr/TmpPyFile") + print("移除 TmpPyFile 成功!!!!!!!\r\n") + except Exception as e: + print("移除 TmpPyFile 失败!!!!!!!{}\r\n".format(e)) + +sms_get = sms.getSaveLoc() +if(sms_get != -1): + sms_lacv = sms_get[0][0] + if sms_lacv != 'SM': #每次开机设置一下短信的存储位置 + sms.setSaveLoc('SM', 'SM', 'SM') + +PROJECT_VERSION = "PY_MAIN_V3" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pymain" + + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +cat1service_log = log.getLogger("pymain") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V2" + elif (app_type == "pysrv"): + return "PY_SRV_V2" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + cat1service_log.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + cat1service_log.info("{}".format(config_data)) + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +def checkota_cb(arg): + print("start checkota!!") + example.exec('/usr/checkota.py') +# 创建os定时器 + +timer = osTimer() +# 启动定时器,参数依次为时间、是否循环、回调函数 定时器超时的时间(单位ms) +# 开机delay 20秒后执行一次ota升级 +timer.start(20000,0,checkota_cb) +print("checkota py end!!") diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/slipService.py b/code/sdk/files/n9/fs/user/system/cat1ota/slipService.py new file mode 100644 index 000000000..eddba83fb --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/slipService.py @@ -0,0 +1,20 @@ + +import log +import slip +from machine import UART +class slipServiceInit: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + slip.destroy() + print('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + print('slip netif construct fail') + else: + print('slip netif construct success') + +slipservice = slipServiceInit() \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/system/cat1ota/telecom_dmp.py b/code/sdk/files/n9/fs/user/system/cat1ota/telecom_dmp.py new file mode 100644 index 000000000..289ba2b79 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1ota/telecom_dmp.py @@ -0,0 +1,438 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") +import modem +import base64 +import request +import ujson +REGIST_MAX_NUM=10 #自注册的最大次数 现在是默认是10次 +REGIST_INTERVAL_TIMER=60*60 #自注册失败的间隔时间 1小时 +REGIST_POWER_ON_TIME=5*60 #开机5分钟内就必须自注册触发 +MULTI_DAY_RESEND_T = 30*24*60*60-12*60*60#多日重发的机制的周期T 30天 +MULTI_DAY_RESEND_t = 12*60*60#多日重发的机制的周期t 0.5天 +def get_report_url_website(mode = None):#获取上报网址 + url = "https://zzhc.vnet.cn/pi/"#上报网址 + return url + +class telecomDmp: + def __init__(self): + self.config_data = {} + self.check_timer = osTimer()#1小时定时器 + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + self.telecomTimer = osTimer() + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + eventMesh.subscribe("get_telecom_init_state",self.get_telecom_init_state) + eventMesh.subscribe("set_telecom_init_state",self.set_telecom_init_state) + + eventMesh.subscribe("set_dmp_power_num",self.set_dmp_power_num) + eventMesh.subscribe("get_dmp_power_num",self.get_dmp_power_num) + + eventMesh.subscribe("get_dmp_power_timer_count",self.get_dmp_power_timer_count) + + self.regist_queue = Queue() + _thread.stack_size(10*1024) + _thread.start_new_thread(self.regist_queue_thread, ()) + _thread.stack_size(8*1024) + + eventMesh.subscribe("publish_message_event_registinfor",self.publish_message_event_registinfor) + self.__net_connected = 0 + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("save_iccid_data",self.save_iccid_data)#订阅消息 保存ICCID + eventMesh.subscribe("get_iccid_data",self.get_iccid_data)#订阅消息 保存ICCID + + eventMesh.subscribe("set_regist_time",self.set_regist_time)#订阅消息 保存ICCID + eventMesh.subscribe("get_regist_time",self.get_regist_time)#订阅消息 保存ICCID + + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mulit_day_timesec = 0#多日重发的开始的时间戳 + pass + def regist_queue_thread(self): + while True: + data = self.regist_queue.get() + #EventMesh.debug_log("regist_queue:data = {}".format(data)) + if data != None: + try: + data["func"](data["data"]) + except Exception as e: + print("regist_queue:ERROR:{}".format(e)) + usys.print_exception(e) + def publish_message_event_registinfor(self,event,msg): + self.regist_queue.put(msg) + + def publish_regist_event_cb(self, *args, **kwargs): + eventMesh.publish("publish_message_event_registinfor",{"func":self.timer_cb,"data":0}) + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def save_iccid_data(self,event,msg): + self.iccid_data = str(msg)[6:]#ICCID: + print("write_config_msg_file msg:{}\r\n".format(msg)) + self.config_data["ICCID"]=self.iccid_data + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + #读文件信息 + def get_iccid_data(self,event,msg): + + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_iccid_data self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "ICCID" in self.config_data: + value = self.config_data["ICCID"] + self.iccid_data = str(value) + else: + self.iccid_data = "" + print("get_iccid_data self.config_data end:{}\r\n".format(self.config_data)) + return self.iccid_data + + def set_regist_time(self,event,msg):# + self.regist_timeSec = str(msg)[7:]#REGIST: + print("set_regist_time msg:{}\r\n".format(msg)) + self.config_data["REGIST"]=self.regist_timeSec + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + + def get_regist_time(self,event,msg):# + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_regist_time self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "REGIST" in self.config_data: + value = self.config_data["REGIST"] + self.regist_timeSec = int(value) + else: + self.regist_timeSec = 0 + return self.regist_timeSec + + + def get_sim_state(self):#获取sim状态 不为1是sim异常 + return sim.getStatus() + + def get_sim_iccid(self):#获取sim的iccid + return sim.getIccid() + + def get_sim_imsi(self):#获取sim的imsi + return sim.getImsi() + def get_dev_imei(self):#获取设备的imei号 + return modem.getDevImei() + + def telecom_regeist_infor(self):#自注册信息 可变更 + network_state = eventMesh.publish("get_network_state") + print("telecom_regeist_infor :",network_state,self.isRegistOk,REGIST_INTERVAL_TIMER,MULTI_DAY_RESEND_T,MULTI_DAY_RESEND_t,REGIST_POWER_ON_TIME) + if network_state == 0:# 第一次进入网络不正常就需要开启1小时定时器 等待下一个周期判断网络是否正常 需要判断网络是否正常 不正常就不去触发自注册了 就等待下一次 如果10次都不成功 就等一下次开机再去自注册 + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + return + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + + print("iccid!!!!!!!!!!iccid {} read_iccid:{}".format(iccid,read_iccid)) + if read_iccid != "": + if str(read_iccid) == str(iccid):#两者相同 并且本地有保存 不再自注册了 说明已经自注册过了 + print("already registed!!!!!!") #已自注册过 + self.isRegistOk = 1 + + if self.isRegistOk == 1: + print("multiple_day_resend!!!!!!\r\n") + self.multiple_day_resend() + return + self.telecom_regist_infor_init()#自注册初始化函数 + if self.isRegistOk == 0: + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + + def telecom_regist_infor_init(self):#自注册的数据部分 + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + url = get_report_url_website(None)#上报网址 根据需要更改上报网址 + if iccid == -1: + iccid = str("FF")#为空就填写FF + + IMSI = self.get_sim_imsi() + if IMSI == -1:#没有卡 则填FF + IMSI = str("FF") + imei = self.get_dev_imei() + if imei == -1: + imei = str("FF") + + data_tmp = net.getCellInfo() #会适当卡个3-5s + i = 0 + cell_data = 0 + if(len(data_tmp) >= 1): + for cell in data_tmp: + if i == 2:#在list里面最多就三个元素 最后一个是LTE的数据 + if cell != []: + for tup in cell: + print("tup:{}".format(tup)) + if tup[0] == 0 and len(tup) > 0:#第0个代表当前服务的小区CELLID 7位16进制数 + cell_data = tup[1]#这个是十进制数需要自行转换成十六进制数 + print(cell_data) + break + i+=1 + # cell_data = 0 + cell_data = "%07x"%(cell_data)#7位16进制数不够前面补0 + print(cell_data) + sendCellid = "{}".format(cell_data) + REGVER = "12.0"#当前数据域协议版本号 + + # MODEL = "TXB-Watch Soar"#机型字段 -前面是厂商名 -后面是设备名 + + MODEL = "KNZ-NWO N9"#机型字段 -前面是厂商名 -后面是设备名 + + get_dev_version = eventMesh.publish("get_dev_version")#订阅消息 + if get_dev_version == None: + get_dev_version = "" + SWVER = "NWO N9 V1.0"#get_dev_version #软件版本号 + UETYPE = "12"#终端类型 12是智能手表 11是儿童手表 + SIM1ICCID = iccid + SIM1LTEIMSI = IMSI + MACID = ""#可用WALN的地址 终端布支持WLAN 就是不可上网 + OSVER = "OHOS 5.0"#操作系统版本号 + IMEI1 = imei#"876226002021717"#imei + SIM1CELLID = sendCellid#下发的小区ID + data = { + "REGVER":REGVER, + "MODEL":MODEL, + "SWVER":SWVER, + "UETYPE":UETYPE, + "SIM1ICCID":SIM1ICCID, + "SIM1LTEIMSI":IMSI, + "MACID":MACID, + "OSVER":OSVER, + "IMEI1":IMEI1, + "SIM1CELLID":SIM1CELLID, + # "NETWORKTYPE":4 + "NWTYPE1":4, + } + data_infor=ujson.dumps(data)#将字典转换成json格式 + json_bytes = bytes(data_infor, 'utf-8')#转换成字节数 + data_encode = base64.b64encode(json_bytes)#再转换成base64的编码格式 密文 + print("data_infor:{} data:{}".format(data_encode,data)) + headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写 + request_result = 0 + try: + # https://zzhc.vnet.cn/pi + response = request.post("https://zzhc.vnet.cn/pi/", data=data_encode,headers =headers_T) + request_result = 1 + if response.status_code == 200 : #返回状态码 200服务器正常解析数据 + content = response.content#后台返回的结果 + c = next(content) + + jsload_data = ujson.loads(c) + print("jsload_data:{}".format(ujson.loads(c))) #{"resultCode": "0","resultDesc": "Success"} + if "resultCode" in jsload_data or "resultDesc" in jsload_data:#返回结果码值 + resultCode = jsload_data["resultCode"]#结果解析 "0" 成功 "1" 解码错误 "2" 校验错误 + resultDesc = jsload_data["resultDesc"]#Success 表示自注册成功 + + if resultCode == "0" or resultDesc == "Success":#注册成功退出当前注册 保存当前的ICCID 不在进行自注册了 + iccid = self.get_sim_iccid()#获取当前SIM的ICCID + if iccid != -1:#读到ICCID + self.timer_count = 0 + self.check_timer.stop() + self.isRegistOk = 1#已完成自注册的标识 + iccid_buf =str("ICCID:")+str(str(iccid)) + eventMesh.publish("save_iccid_data",iccid_buf) + self.multiple_day_resend() + #上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域 + print("regist success:!!!!!") + return 1 + if resultCode == "1": + print("Decode error")#解码错误 设备编码不正确 + return 0 + + if resultCode == "2":# + print("Check error")#校验错误 设备里面数据不正确 有些数据不应该为空 + return 0 + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + return 0 + + def timer_cb(self,data):#定时器回调 + self.telecom_regeist_infor()#重新进行自注册 + pass + # 多日重发功能要求: + # 1) 多日重发是指:在重发周期 T 内,如果没有功能性触发数据域自注册(触发发送且发送成功), + # 则终端应根据当前终端实时信息组织数据域自注册(不能直接拿上一周期的内容不变而重发)内容 + # 并发送的过程; + # 2) 多日重发的时间间隔周期 T 设置为 30 天; + # 3) 多日重发的过程应设置为:功能性(比如换卡等)触发数据域自注册后,立即启动定时器 t(t + # 的初始值应设为 0.5 天)开始重发计时,以后每当 t 时间等于 T 的整数倍(t=N*T)时,终端就进 + # 行数据域自注册发送,发送后 t 不要清零不要初始化,只有当功能性触发数据域自注册后,t 才初 + # 始化,t 的初始化值为 0.5 天。 + # Multiple day resend + def multiple_day_resend(self):#多日重发机制函数 没有发送数据域或者发送成功 + + t = 12 #计时周期 按照0.5天 也就是12小时来计算 + T = 30*24 #周期为30天 计算30天的总共小时数 + # t = N*T#只有t为T的整数倍就需要重发数据域自注册 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.multimer_init == 1:#已注册过或者开机5分钟之内没有注册 或者注册成功就开始出发多日重发机制 + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t#初始值多加12小时 #初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + return + self.multimer_init = 1 + #设置开始时间戳 + get_timesec = eventMesh.publish("get_regist_time")#一开机初始化为0 没有保存过数据 如果保存过就用保存的时间 + if get_timesec == 0: + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + else: + self.mulit_day_timesec = get_timesec + self.multiDayResend_timer.start(60*60*1000,1,self.multiDayResendTimer_Cb)#一分钟计时 + + def multiDayResendTimer_Cb(self,*argc):#多日重发机制定时器回调函数 + T = 30*24*60*60 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)+MULTI_DAY_RESEND_t#获取时间戳 + + if time_tmp < self.mulit_day_timesec:#如果当前时间戳小于保存的时间戳 + self.mulit_day_timesec = time_tmp + print("time_tmp: self.mulit_day_timesec:\r\n",time_tmp,self.mulit_day_timesec) + + if time_tmp - self.mulit_day_timesec >= MULTI_DAY_RESEND_T:#一个周期的时间到了重发注册一次 + network_state = eventMesh.publish("get_network_state") + print("get_network_state:\r\n",network_state) + if network_state == 0:#网络不正常就不需要重发了等下一个周期 + return + result = self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t + if result == 0: #上报出错了 + return + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + + + def set_telecom_init_state(self,event,msg):#开机5分钟内检查是否有联网 有一次联网就关闭检查 + self.telecom_init_state = msg + + def get_telecom_init_state(self,event,msg): + return self.telecom_init_state + + def get_dmp_power_timer_count(self,event,msg):#开机后限定5分钟内完成自注册 + return REGIST_POWER_ON_TIME + + def get_dmp_power_num(self,event,msg):#开机限定次数最多十次 十次不成功就等下一次开机 或者多日重发机制 + print("get_dmp_power_num:{}".format(self.timerPowerNum)) + return self.timerPowerNum + + def set_dmp_power_num(self,event,msg): + print("set_dmp_power_num:{}".format(msg)) + self.timerPowerNum = msg + def clear_storage_data(self): + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + print("clear_storage_data;{} {}".format(IFEXIST,isStorage)) + + + def telecom_dmp_power_on_init(self):#开机初始化一次检测 + if eventMesh.publish("get_telecom_init_state") == 1:#发送消息获取对应的值 + return + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#开机检查 + if eventMesh.publish("get_telecom_init_state") == 0:#开机初始化一次 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + if status == 0:#恢复出厂过需要清空存储数据 + self.clear_storage_data() + pass + self.telecomTimer.start(1*1000,0,self.fun_cb) + eventMesh.publish("set_telecom_init_state",1) + + def fun_cb(self,*argc): + self.telecom_regeist_infor()#开机初始一次自注册信息 + pass + def telecom_dmp_power_on_count(self):#开机计时判断最多十次 + if eventMesh.publish("get_telecom_init_state") != 1:#在开机五分钟之内只要一次联网正常就不需要再检查是否网络正常去自注册了 + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#10+1 + num = eventMesh.publish("get_dmp_power_num") #开机计时 如果开机5分钟内没有一次网络正常的话 当前开机自注册不生效 等待下一次开机自注册触发 或者触发多日重发机制 + num+=1 + eventMesh.publish("set_dmp_power_num",num)#次数累计加一 + else: + if self.power_on_multiflag == 1: + return + self.power_on_multiflag = 1 + self.multiple_day_resend() + pass + +telecomDmpCb = telecomDmp() + + + + + + + + + + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/cat1Service.py b/code/sdk/files/n9/fs/user/system/cat1otaudp/cat1Service.py new file mode 100644 index 000000000..f0d46dc3b --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1otaudp/cat1Service.py @@ -0,0 +1,682 @@ +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import ql_fs +import pm +import sms + +from usr.EventMesh import eventMesh + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +CAT1_SERVICE_HEAD = 'FE' +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V17" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + +voiceCall.setVolume(10) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +pm.wakelock_lock(lpm_fd) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) +def ExtIntfun(args): + if args[1] == 0: + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + pm.wakelock_unlock(lpm_fd) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' +UDP_CMD_DIAL_NUMB = '1' +UDP_CMD_HUNGUP = '2' +UDP_CMD_ANSWER = '3' +UDP_CMD_CAT1_OTA_UPDATE = '4' +UDP_CMD_SEND_SMS = '5' +UDP_CMD_GET_TIME = '6' +UDP_CMD_GET_RECV_NETWORKSTAT = '7' +UDP_MSG_SMS = '8' +UDP_CMD_ATCMD = '9' +UDP_MSG_CALL_CONNECTED = 'A' +UDP_MSG_CALL_DISCONNECTED = 'B' +UDP_MSG_COMMING_CALL = 'C' +UDP_MSG_REPLY = 'F' + +class Cat1Service: + AP = 0 + STA = 1 + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + return None + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.volte_switch = 1 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb) + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + self.telecom_dmp_switch = 0 + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + return None + + def __socket_init(self): + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + if cmd == "00": + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + if eventMesh.publish("get_volte_switch") == 1: + ret = voiceCall.callStart(str(parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "06": + time=utime.localtime() + zone=utime.getTimeZone() + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + operator = net.operatorName() + signal = net.csqQueryPoll() + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + self.reply_cmd('09',"{}".format(resp.decode())) + else: + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + eventMesh.publish("set_dmp_change_mode",on) + elif cmd == "16": + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": + voiceCall.startDtmf(str(parm),100) + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "AC": + if self.ack_sem==1: + self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): + self.volte_switch = int(msg) + + def get_volte_switch(self,event,msg): + return self.volte_switch + + def china_mobile_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "16": + eventMesh.publish("set_dev_mac",str(parm)) + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + message=self.sms_get_message_info(int(msg)) + if message == -1: + return + message_pdu = sms.decodePdu(message[5],20) + if message_pdu != -1: + message_ref = message[0] + message_total_num = message[1] + message_seq = message[2] + data = message[5] + data_len = len(data) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + message0=sms.searchPduMsg(index) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + sca = self.sms_deal_phone_number(sca) + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + oa = self.sms_deal_phone_number(oa) + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + if ((pdu_tye & 0x40 ) >> 6) == 1: + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2] + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0] + num = message[1] + curren_num = message[2] + data_len = message[4] + sms_data.append(code) + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return -1 + + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + self.__err = 0 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + return slip.router_add(self.ip, self.mask) + + def ipconfig(self): + return slip.ipconfig() + + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.4.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + + def set_network_config(self): + if (self.__net_connected == 1) : + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.1.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0: + return + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + + def stop(self): + slip.destroy() + return 0 + + def __pack_tlv_format(self, head, content): + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + + def __unpack_tlv_format(self, msg): + self.msg = str(msg)[2:] + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + def __Socket_UDP(self, head, content): + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + data=self.send_data_q.get() + self.ack_sem=1 + self.__Socket_UDP_write( data[0], data[1]) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + self.__Socket_UDP_write( data[0], data[1]) + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head, content) + server_addr = ('172.16.1.5',1000) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + self.__wait_resp = 1 + self.__wait_resp = 0 + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + self.send_data_q.put([head,content]) + + def __Socket_Thread(self): + while True: + try: + data=self.__sock.recv(1024) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + self.btmcu_cmd_handler(value[0],value[2]) + else: + clog.error("data error!!") + except Exception as recverr: + if "110" in str(recverr): + self.__err = 1 + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() +cat1service = Cat1Service() + +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + voiceCall.callEnd() + else: + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyDisconnectCall(args[6]) +voiceCall.setCallback(voice_callback) +def checknet_cb(arg): + _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/china_mobile_dmp.py b/code/sdk/files/n9/fs/user/system/cat1otaudp/china_mobile_dmp.py new file mode 100644 index 000000000..632476ec2 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1otaudp/china_mobile_dmp.py @@ -0,0 +1,17 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") + + + + + + + + + + + + diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/is_need_updata.txt b/code/sdk/files/n9/fs/user/system/cat1otaudp/is_need_updata.txt new file mode 100644 index 000000000..e69de29bb diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/main.py b/code/sdk/files/n9/fs/user/system/cat1otaudp/main.py new file mode 100644 index 000000000..ab14d8bf5 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1otaudp/main.py @@ -0,0 +1,27 @@ +import example +import log +from machine import UART + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +# 设置输出到debug口 +uart = UART(UART.UART0, 115200, 8, 0, 1, 0) +log.set_output(uart) +clog = log.getLogger("cat1") + +main_flag = 1 + + +try: + example.exec('/usr/main_init.py') + clog.info("启动main_init成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + clog.error("启动失败!!!!!\r\n".format(e)) + +try: + example.exec('/usr/tcpserver.py') + clog.info("启动tcpserver成功!!!!!\r\n") +except Exception as e: + clog.error("启动失败!!!!!\r\n".format(e)) + diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/tcpserver.py b/code/sdk/files/n9/fs/user/system/cat1otaudp/tcpserver.py new file mode 100644 index 000000000..afe23b2c1 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1otaudp/tcpserver.py @@ -0,0 +1,602 @@ +from misc import Power +import usocket +import log +import utime +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import osTimer +import utime +import ql_fs +import binascii +import ujson +import uos + + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +USR_FILE_PATH = "/usr" # +BAK_FILE_PATH = "{}/TmpPyFile".format(USR_FILE_PATH) +BAK_FILE_TMP = "_bak" +CAT1_SERVICE_HEAD = "FE" +CAT1_FILE_DATA_HEAD = "FF" +CAT1_REPLAY_STATE="00" +CAT1_CREAT_DIR_FAILE= "01" +CAT1_CREAT_DIR_OK= "02" +CAT1_NO_REPLAY_OTA_OK= "03" +CAT1_WRITE_FILE_SUCC= "04" +CAT1_WRITE_FILE_ERROR = "05" +CAT1_CRC_ERROR = "06" +CAT1_SEND_HEAD_ERR = "07" +CAT1_OTA_TIMEOUT_BLE_NO_REPLAY = "08" +CAT1_CREAT_FILE_ERROR = "09" +CAT1_CREAT_FILE_SUCC = "0A" +CAT1_ALLPY_FILE_TRANSFER_END = "0B" +CAT1_REPLAY_OTA_SUCC = "0C" +CAT1_REPLAY_OTA_FALIE = "0D" +CAT1_REPLAY_FILE_SIZE_OK = "0E" +CAT1_REPLAY_FILE_SIZE_ERR = "0F" +CAT1_REPLAY_OTA_END_FAILE = "10" +CAT1_NEED_UPDATE_OTA = "11" +CAT1_TCP_STOP_OTA = 0 +CAT1_TCP_START_OTA = 1 +CAT1_TCP_START_SEND_SINGLE_FILE_INFO= 2 +CAT1_TCP_START_SEND_FILE_DATA= 3 +CAT1_TCP_START_OTA_FAILE = 4 +CAT1_TCP_START_OTA_SUCC = 5 +CAT1_TCP_START_SEND_ALLFILE_FINESH = 6 +CAT1_TCP_SEND_SINGLE_FINESH = 7 +CAT1_TCP_START_ERROR_INFO = 255 + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) +FILE_TRANSFER_TIMEOUT=60 +class TcpServiceInit: + AP = 0 + STA = 1 + + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.Cat1FileState = 0 + self.Cat1FileReplayBle = 0 + self.Cat1TimeCount = 0 + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer = osTimer() + self.Cat1OtaTimeOut = osTimer() + self.crc_err = 0 + self.allPyRecvFlag = 0 + self.ota_state =0 + self.ota_bstate =0 + self.fileNameTmp = "" + self.fileNameList = [] + self.fileSizeList = [] + self.fileSize = 0 + self.updateTimer = osTimer() + self.updateTimerCount = 0 + self.updateTimerFlag = 0 + self.sock = None + self.bakFlag = "0" + self.conn= None + self.__sock_file = None + self.__sock_file = self.__socket_file_init() + self.__thread_file = _thread.start_new_thread(self.__Socket_File_Thread, ()) + self.conn_thread=_thread.start_new_thread(self._client_conn_proc, ()) + + def __pack_tlv_format(self, head, content): + head1 = head + content1 = content + if len(content1) == 0 or len(content1) > 9999 or len(head1) != 2: + return -1 + len_str ='%04d' % len(content1) + tlv_pack = CAT1_SERVICE_HEAD+head1+len_str+content1 + return tlv_pack + + def __unpack_tlv_format(self, msg): + msg_tmp = str(msg)[2:] + tag = msg_tmp[0:2] + length = msg_tmp[2:6] + value = msg_tmp[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != msg_tmp[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + + def __socket_file_init(self): + self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP_SER) + self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5001) + self.sock.bind(bind_addr) + self.sock.listen(10) + return self.sock + + def __Socket_TCP_file_noreply(self, head, content): + head1 = head + content1 = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head1,content1) + if msg == -1: + return 0 + try: + self.conn.send(msg) + except Exception as e: + clog.info("self.__sock_file error {}".format(e)) + return 0 + + def _client_conn_proc(self): + while True: + if self.conn==None: + utime.sleep_ms(20) + continue + try: + data = self.conn.recv(1024) + if not data: + clog.info("__Socket_File_Thread data null:\r\n") + else: + self.src_data(data.decode('uft-8')) + except: + self.conn.close() + break + + def __Socket_File_Thread(self): + while True: + try : + cli_conn, cli_ip_addr, cli_port = self.__sock_file.accept() + self.conn=cli_conn + clog.info('[serveice] accept a client: %s, %s' % (cli_ip_addr, cli_port)) + except : + utime.sleep_ms(20) + + def cat1FileTimerCb(self,*argc): + clog.info("timer test\r\n") + if self.Cat1PyFileTimout > 0: + self.Cat1PyFileTimout-=1 + if self.Cat1PyFileTimout == 0: + self.Cat1PyFileTimout = 0 + self.Cat1FileState = 0 + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_OTA_TIMEOUT_BLE_NO_REPLAY,"ota error") #结束文件接收不完整的 + self.Cat1FileTransTimer.stop() + pass + + def crc_cal(self,msg): + bytes_data = msg.encode('utf-8') + hex_data = binascii.hexlify(bytes_data) + hex_data = hex_data.decode() + data = hex_data + crcValue = 0 + j = 0 + i = 0 + json_state = 0 + crcbuf = 0 + data_len = len(str(data)) + try: + if data_len % 2 != 0: + json_state = 0 + return [json_state,crcbuf] + except Exception as e: + json_state = 0 + for i in range(data_len): + if j >= data_len: + break + try: + decimal_number = int(str(data[j:j+2]), 16) + crcValue=crcValue+decimal_number + crcValue = crcValue&0xff + except Exception as e: + clog.info("crc_cal") + j+=2 + crcbuf = crcValue%256 + crcbuf = 256-crcbuf + crcbuf = crcbuf%256 + return [json_state,"%02x"%(crcbuf)] + def deleteTmpFile(self): + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + ql_fs.rmdirs(BAK_FILE_PATH) + + def deleteUsrTmpFile(self): + return + + def src_data(self,data): + if self.updateTimerFlag == 0: + self.updateTimerFlag = 1 + self.updateTimer.stop() + msg = "" + json_state = 0 + try: + msg = ujson.loads(data) + json_state = 1 + except Exception as e: + json_state = 0 + if json_state == 0: + value = self.__unpack_tlv_format(data) + self.cmd_data(value[0],value[2]) + return + else: + self.file_data(msg) + pass + def cmd_data(self,cmd,parm): + if cmd == "01": + self.bakFlag = str(parm) + pass + def file_data(self,msg): + if "Code" in msg: + Code = int(msg["Code"]) + if Code == CAT1_TCP_STOP_OTA: + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_OTA: + self.ota_state =0 + self.ota_bstate =0 + self.allPyRecvFlag = 0 + self.fileNameList = [] + self.fileSizeList = [] + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.deleteUsrTmpFile() + self.Cat1OtaTimeOut.stop() + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + mk_dir_state = 0 + if check_dir == True: + try: + self.deleteTmpFile() + except Exception as e: + clog.info("移除失败\r\n") + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + if check_dir == False: + try: + ql_fs.mkdirs(BAK_FILE_PATH) + mk_dir_state = 1 + except Exception as e: + mk_dir_state = 0 + else: + mk_dir_state = 1 + if mk_dir_state == 0: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat dir error!") + else: + self.Cat1FileState = 1 + self.fileNameList = [] + self.fileSizeList = [] + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer.stop() + self.Cat1FileTransTimer.start(1000,1,self.cat1FileTimerCb) + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_OK,"creat dir success!") + + elif Code == CAT1_TCP_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.fileNameTmp = str(msg["fileName"]) + self.fileSize = msg["fileSize"] + self.fileNameList = msg["fileNameList"] + path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + check_touch = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if check_touch == True: + try: + uos.remove("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + except Exception as e: + clog.info("移除文件失败\r\n") + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"1creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"1creat file or dir err!") + else: + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.crc_err = 0 + + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"2creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"2creat file or dir err!") + + + elif Code == CAT1_TCP_START_SEND_FILE_DATA and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + if len(self.fileNameTmp) == 0: + return + data = msg["data"] + if len(data) == 0: + return + tmpdata = str(data) + head = tmpdata[0:2] + if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8: + clog.info("head {}\r\n".format(head)) + self.__Socket_TCP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!") + return + datalen = str(tmpdata[2:6]) + datalen = int("0x" + datalen, 16) + data_buf = tmpdata[6:] + data_buf = data_buf[:-2] + crc = tmpdata[-2:] + if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"crc error or data null!") + return + data = str(data_buf) + path = "{}/{}".format(BAK_FILE_PATH,str(self.fileNameTmp)) + try: + with open(path,"a") as fd: + fd.write(data) + fd.close() + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_SUCC,"write file success!") + + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"write file error!") + + elif Code == CAT1_TCP_START_OTA_FAILE and self.Cat1FileState == 1: + self.allPyRecvFlag = 0 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"OTA FAILE") + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1: + if self.bakFlag == "0": + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + try: + copy_state = 1 + compare_flag = 1 + copy_flag = 0 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("copy file \r\n") + else: + compare_flag = 0 + break + except Exception as e: + clog.info("copy file \r\n") + + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_state == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_START_OTA_SUCC and self.Cat1FileState == 1: + if self.bakFlag == "0": + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + if self.allPyRecvFlag == 0: + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + try: + copy_state = 1 + compare_flag = 1 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("file\r\n") + else: + compare_flag = 0 + break + + except Exception as e: + clog.info("file\r\n") + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_bstate = 1 + self.conn.close() + self.Cat1OtaTimeOut.start(10000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_bstate == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_SEND_SINGLE_FINESH and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + tmp_file = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if tmp_file == True: + file_size = ql_fs.path_getsize("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if self.fileSize != file_size: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + else: + if self.bakFlag == "0": + dst_path = "{}/{}".format(USR_FILE_PATH,self.fileNameTmp) + src_path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + ret = False + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错 yichu!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + return + else: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错!!!!!!!!!!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok") + return + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file copy ok") + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"creat file or dir err!") + pass + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat file or dir error!") + pass + else: + if self.Cat1FileState == 0: + if self.Cat1FileReplayBle == 1: + return + self.Cat1FileReplayBle = 1 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!") + self.Cat1FileState == 0 + self.Cat1FileTransTimer.stop() + self.Cat1PyFileTimout = 0 + self.fileNameList=[] + self.deleteTmpFile() + self.deleteUsrTmpFile() + + def otaTimeOut(self,*argc): + clog.info("重启成功!!!!!!!!\r\n") + +TcpService = TcpServiceInit() + + diff --git a/code/sdk/files/n9/fs/user/system/cat1otaudp/telecom_dmp.py b/code/sdk/files/n9/fs/user/system/cat1otaudp/telecom_dmp.py new file mode 100644 index 000000000..f60e74899 --- /dev/null +++ b/code/sdk/files/n9/fs/user/system/cat1otaudp/telecom_dmp.py @@ -0,0 +1,5 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") diff --git a/code/sdk/files/n9/fs/user/update/test2.txt b/code/sdk/files/n9/fs/user/update/test2.txt new file mode 100644 index 000000000..69ead2249 --- /dev/null +++ b/code/sdk/files/n9/fs/user/update/test2.txt @@ -0,0 +1 @@ +this is test2 file \ No newline at end of file diff --git a/code/sdk/files/n9/fs/user/userdata/readme.txt b/code/sdk/files/n9/fs/user/userdata/readme.txt new file mode 100644 index 000000000..c41b29b3a --- /dev/null +++ b/code/sdk/files/n9/fs/user/userdata/readme.txt @@ -0,0 +1 @@ +Óû§Êý¾Ý·¾¶ \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/music/ring/alarm.mp3 b/code/sdk/files/w9/fs/user/music/ring/alarm.mp3 new file mode 100644 index 000000000..106054d42 Binary files /dev/null and b/code/sdk/files/w9/fs/user/music/ring/alarm.mp3 differ diff --git a/code/sdk/files/w9/fs/user/music/ring/calling.mp3 b/code/sdk/files/w9/fs/user/music/ring/calling.mp3 new file mode 100644 index 000000000..f0de98f2d Binary files /dev/null and b/code/sdk/files/w9/fs/user/music/ring/calling.mp3 differ diff --git a/code/sdk/files/w9/fs/user/music/ring/findwatch.mp3 b/code/sdk/files/w9/fs/user/music/ring/findwatch.mp3 new file mode 100644 index 000000000..2b0a83095 Binary files /dev/null and b/code/sdk/files/w9/fs/user/music/ring/findwatch.mp3 differ diff --git a/code/sdk/files/w9/fs/user/music/ring/ring.mp3 b/code/sdk/files/w9/fs/user/music/ring/ring.mp3 new file mode 100644 index 000000000..94085c2cb Binary files /dev/null and b/code/sdk/files/w9/fs/user/music/ring/ring.mp3 differ diff --git a/code/sdk/files/w9/fs/user/music/test3.txt b/code/sdk/files/w9/fs/user/music/test3.txt new file mode 100644 index 000000000..e56d2dca9 --- /dev/null +++ b/code/sdk/files/w9/fs/user/music/test3.txt @@ -0,0 +1 @@ +this is test3 file \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/res/466x100button.bin b/code/sdk/files/w9/fs/user/res/466x100button.bin new file mode 100644 index 000000000..cf81399fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/466x100button.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/1.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/1.bin new file mode 100644 index 000000000..b2121fe7d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/10.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/10.bin new file mode 100644 index 000000000..2ba1e4bc6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/11.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/11.bin new file mode 100644 index 000000000..3ccfb050e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/12.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/12.bin new file mode 100644 index 000000000..57b2aab36 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/13.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/13.bin new file mode 100644 index 000000000..9b9f5444a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/14.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/14.bin new file mode 100644 index 000000000..44db97035 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/15.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/15.bin new file mode 100644 index 000000000..819398296 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/16.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/16.bin new file mode 100644 index 000000000..bda48ac4e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/17.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/17.bin new file mode 100644 index 000000000..709b664d0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/18.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/18.bin new file mode 100644 index 000000000..1ab941a35 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/19.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/19.bin new file mode 100644 index 000000000..ed758d97c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/2.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/2.bin new file mode 100644 index 000000000..49dffe8da Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/20.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/20.bin new file mode 100644 index 000000000..755fb57c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/21.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/21.bin new file mode 100644 index 000000000..e3237f236 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/22.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/22.bin new file mode 100644 index 000000000..376aed410 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/23.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/23.bin new file mode 100644 index 000000000..836cf4f55 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/24.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/24.bin new file mode 100644 index 000000000..0f52976a7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/25.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/25.bin new file mode 100644 index 000000000..cdb4c4155 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/26.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/26.bin new file mode 100644 index 000000000..54ddd4089 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/27.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/27.bin new file mode 100644 index 000000000..7662e3950 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/28.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/28.bin new file mode 100644 index 000000000..a5b157b51 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/29.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/29.bin new file mode 100644 index 000000000..ed6add77c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/3.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/3.bin new file mode 100644 index 000000000..cc73f2b1d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/30.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/30.bin new file mode 100644 index 000000000..6053116d2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/31.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/31.bin new file mode 100644 index 000000000..448e0d486 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/32.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/32.bin new file mode 100644 index 000000000..05b441d16 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/33.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/33.bin new file mode 100644 index 000000000..116b7f9f2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/34.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/34.bin new file mode 100644 index 000000000..6ea5637c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/35.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/35.bin new file mode 100644 index 000000000..30481e8e2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/36.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/36.bin new file mode 100644 index 000000000..6b951574e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/37.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/37.bin new file mode 100644 index 000000000..8321bb85c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/38.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/38.bin new file mode 100644 index 000000000..3512f7a16 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/39.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/39.bin new file mode 100644 index 000000000..b2dc8cd48 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/4.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/4.bin new file mode 100644 index 000000000..f15ce5b61 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/40.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/40.bin new file mode 100644 index 000000000..59cd3a03f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/5.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/5.bin new file mode 100644 index 000000000..bac61f446 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/6.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/6.bin new file mode 100644 index 000000000..47a993a0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/7.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/7.bin new file mode 100644 index 000000000..3321cd8d5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/8.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/8.bin new file mode 100644 index 000000000..1c119166a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/9.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/9.bin new file mode 100644 index 000000000..de647c7ac Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceListening/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/1.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/1.bin new file mode 100644 index 000000000..a92fc4fc2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/10.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/10.bin new file mode 100644 index 000000000..0c7b90798 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/11.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/11.bin new file mode 100644 index 000000000..d30c8c17b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/12.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/12.bin new file mode 100644 index 000000000..3d81526da Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/13.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/13.bin new file mode 100644 index 000000000..d4c6e565b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/14.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/14.bin new file mode 100644 index 000000000..2e4a246fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/15.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/15.bin new file mode 100644 index 000000000..2855cdeea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/16.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/16.bin new file mode 100644 index 000000000..d23aeae05 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/17.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/17.bin new file mode 100644 index 000000000..3a321205c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/18.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/18.bin new file mode 100644 index 000000000..e4d7896fb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/19.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/19.bin new file mode 100644 index 000000000..faced71c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/2.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/2.bin new file mode 100644 index 000000000..06283f362 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/20.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/20.bin new file mode 100644 index 000000000..5950aaa91 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/21.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/21.bin new file mode 100644 index 000000000..54fdc47fb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/22.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/22.bin new file mode 100644 index 000000000..374f8a95f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/23.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/23.bin new file mode 100644 index 000000000..5a098e165 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/24.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/24.bin new file mode 100644 index 000000000..216b8b766 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/25.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/25.bin new file mode 100644 index 000000000..2b453f467 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/26.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/26.bin new file mode 100644 index 000000000..942ea4156 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/27.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/27.bin new file mode 100644 index 000000000..52bea26f8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/28.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/28.bin new file mode 100644 index 000000000..0a54aa320 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/29.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/29.bin new file mode 100644 index 000000000..a34146459 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/3.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/3.bin new file mode 100644 index 000000000..7f73d2400 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/30.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/30.bin new file mode 100644 index 000000000..90b2dc653 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/31.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/31.bin new file mode 100644 index 000000000..7a76c01c0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/32.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/32.bin new file mode 100644 index 000000000..b48391995 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/33.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/33.bin new file mode 100644 index 000000000..670af9bdb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/34.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/34.bin new file mode 100644 index 000000000..27577ee77 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/35.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/35.bin new file mode 100644 index 000000000..2f8142732 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/36.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/36.bin new file mode 100644 index 000000000..b67eda927 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/37.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/37.bin new file mode 100644 index 000000000..de69c5af1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/38.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/38.bin new file mode 100644 index 000000000..bf93bfeb1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/39.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/39.bin new file mode 100644 index 000000000..63e2e96c3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/4.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/4.bin new file mode 100644 index 000000000..a02f49a0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/40.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/40.bin new file mode 100644 index 000000000..5b8a7972c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/5.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/5.bin new file mode 100644 index 000000000..1a977f3c1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/6.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/6.bin new file mode 100644 index 000000000..cadc92740 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/7.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/7.bin new file mode 100644 index 000000000..972774b0c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/8.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/8.bin new file mode 100644 index 000000000..73d9f07ec Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/9.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/9.bin new file mode 100644 index 000000000..c34499a19 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AIVoiceThinking/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AI_EllWhite.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AI_EllWhite.bin new file mode 100644 index 000000000..9233fbcf9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AI_EllWhite.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecBlack.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecBlack.bin new file mode 100644 index 000000000..3bfd5d2a0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecBlack.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecGreen.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecGreen.bin new file mode 100644 index 000000000..72cfe438c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AI_RecGreen.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/AI_Union.bin b/code/sdk/files/w9/fs/user/res/AIVoice/AI_Union.bin new file mode 100644 index 000000000..1fedfcbd1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/AI_Union.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon.bin b/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon.bin new file mode 100644 index 000000000..67dc31c04 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon_bg.bin b/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon_bg.bin new file mode 100644 index 000000000..252f419a2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/ai_chart_icon_bg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin new file mode 100644 index 000000000..309fc8b84 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_chatgpt.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin new file mode 100644 index 000000000..d33714aea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_doubao.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin new file mode 100644 index 000000000..536761bae Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_kimi.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin new file mode 100644 index 000000000..659b638df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin new file mode 100644 index 000000000..0c32be31b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_deepseek.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin new file mode 100644 index 000000000..dc693290d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin new file mode 100644 index 000000000..abe058be5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin differ diff --git a/code/sdk/files/w9/fs/user/res/AIVoice/apikey.bin b/code/sdk/files/w9/fs/user/res/AIVoice/apikey.bin new file mode 100644 index 000000000..b2c22b440 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/AIVoice/apikey.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_FAILURE.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_FAILURE.bin new file mode 100644 index 000000000..120b4f221 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_FAILURE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_SUCCESS.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_SUCCESS.bin new file mode 100644 index 000000000..89af5fe16 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_BIND_SUCCESS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_HELP.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_HELP.bin new file mode 100644 index 000000000..07872c9ea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_HELP.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_PAY.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_PAY.bin new file mode 100644 index 000000000..4b0c3ed58 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_PAY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_SETTING.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_SETTING.bin new file mode 100644 index 000000000..f37a192f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_SETTING.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_TRANS.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_TRANS.bin new file mode 100644 index 000000000..89337fab2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_LIST_TRANS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin new file mode 100644 index 000000000..5feb11717 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_GREY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin b/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin new file mode 100644 index 000000000..a26ed67db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ALIPAY_PAY_ICON_WHITE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Alarm/alarm_delete.bin b/code/sdk/files/w9/fs/user/res/Alarm/alarm_delete.bin new file mode 100644 index 000000000..33a596c2a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Alarm/alarm_delete.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Alarm/alarm_prompt.bin b/code/sdk/files/w9/fs/user/res/Alarm/alarm_prompt.bin new file mode 100644 index 000000000..ab4e298a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Alarm/alarm_prompt.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Attention.bin b/code/sdk/files/w9/fs/user/res/Attention.bin new file mode 100644 index 000000000..b8120b857 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Attention.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTHEAR.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTHEAR.bin new file mode 100644 index 000000000..50683b6fe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTHEAR.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_01.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_01.bin new file mode 100644 index 000000000..ecaa9cced Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_02.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_02.bin new file mode 100644 index 000000000..35a2c4ffa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_03.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_03.bin new file mode 100644 index 000000000..7059ff88f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_04.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_04.bin new file mode 100644 index 000000000..4673939dc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_05.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_05.bin new file mode 100644 index 000000000..b7cef36fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_06.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_06.bin new file mode 100644 index 000000000..571ef4dad Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_07.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_07.bin new file mode 100644 index 000000000..09c701ce0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_08.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_08.bin new file mode 100644 index 000000000..7113d0402 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_09.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_09.bin new file mode 100644 index 000000000..ddcfd6f7f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_10.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_10.bin new file mode 100644 index 000000000..d5628f4a9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_11.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_11.bin new file mode 100644 index 000000000..682e4972c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_12.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_12.bin new file mode 100644 index 000000000..c5b48dc7b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_13.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_13.bin new file mode 100644 index 000000000..643d9d285 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_14.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_14.bin new file mode 100644 index 000000000..299b25fca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_15.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_15.bin new file mode 100644 index 000000000..8a390d216 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_16.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_16.bin new file mode 100644 index 000000000..289b89880 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_IMAGE_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUETOOTH_TITLE.bin b/code/sdk/files/w9/fs/user/res/BLUETOOTH_TITLE.bin new file mode 100644 index 000000000..b4e8aa8bd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUETOOTH_TITLE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BLUE_ADD.bin b/code/sdk/files/w9/fs/user/res/BLUE_ADD.bin new file mode 100644 index 000000000..fe9abe815 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BLUE_ADD.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_01.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_01.bin new file mode 100644 index 000000000..dd6965434 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_02.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_02.bin new file mode 100644 index 000000000..5d0b081c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_03.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_03.bin new file mode 100644 index 000000000..b808fc2ec Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_04.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_04.bin new file mode 100644 index 000000000..499a7baaa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_05.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_05.bin new file mode 100644 index 000000000..a3f35243f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_06.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_06.bin new file mode 100644 index 000000000..55ee638bc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_07.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_07.bin new file mode 100644 index 000000000..ddb3258a4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_08.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_08.bin new file mode 100644 index 000000000..ef13c8fe6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_09.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_09.bin new file mode 100644 index 000000000..d8307f928 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_10.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_10.bin new file mode 100644 index 000000000..b397e30d6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_11.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_11.bin new file mode 100644 index 000000000..5df586f4f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_12.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_12.bin new file mode 100644 index 000000000..e2fe5f141 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_13.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_13.bin new file mode 100644 index 000000000..0fd97325a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_14.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_14.bin new file mode 100644 index 000000000..6828a66fd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_15.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_15.bin new file mode 100644 index 000000000..fb3043274 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_16.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_16.bin new file mode 100644 index 000000000..593c23e12 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_17.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_17.bin new file mode 100644 index 000000000..9a2ecfb91 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_18.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_18.bin new file mode 100644 index 000000000..e6ac72b16 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_19.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_19.bin new file mode 100644 index 000000000..9867c4a51 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_20.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_20.bin new file mode 100644 index 000000000..7f210f74d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_21.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_21.bin new file mode 100644 index 000000000..a630c740c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_22.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_22.bin new file mode 100644 index 000000000..a40d7ef26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_23.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_23.bin new file mode 100644 index 000000000..f0247cde9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_24.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_24.bin new file mode 100644 index 000000000..e02e56793 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_25.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_25.bin new file mode 100644 index 000000000..ff9b649c0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_26.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_26.bin new file mode 100644 index 000000000..1be9454cc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_27.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_27.bin new file mode 100644 index 000000000..79c97de99 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_28.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_28.bin new file mode 100644 index 000000000..26721a0bc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_29.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_29.bin new file mode 100644 index 000000000..f70ee2370 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_30.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_30.bin new file mode 100644 index 000000000..e643d900c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/BP_GIF/bp_sos/bp_sos_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/D.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/D.bin new file mode 100644 index 000000000..1aaf9a568 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/D.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/G.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/G.bin new file mode 100644 index 000000000..d35cafb39 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/G.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/J1.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/J1.bin new file mode 100644 index 000000000..7090dc559 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/J1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/J2.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/J2.bin new file mode 100644 index 000000000..df187ce55 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/J2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/J3.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/J3.bin new file mode 100644 index 000000000..e22ea90fe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/J3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/Q.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/Q.bin new file mode 100644 index 000000000..ad50a7814 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/Q.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/R2.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/R2.bin new file mode 100644 index 000000000..8a11a79f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/R2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/U.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/U.bin new file mode 100644 index 000000000..cf52aba04 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/U.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/U1.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/U1.bin new file mode 100644 index 000000000..1ea8a8be3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/U1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/U2.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/U2.bin new file mode 100644 index 000000000..7f2417f54 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/U2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/U3.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/U3.bin new file mode 100644 index 000000000..90388d31a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/U3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/W.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/W.bin new file mode 100644 index 000000000..0e54771a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/W.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/Y.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/Y.bin new file mode 100644 index 000000000..1321c1bbb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/Y.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/calibration_remind.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/calibration_remind.bin new file mode 100644 index 000000000..1321c1bbb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/calibration_remind.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/decrease_button.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/decrease_button.bin new file mode 100644 index 000000000..80319591b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/decrease_button.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/error.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/error.bin new file mode 100644 index 000000000..84894c1c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/error.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/error_bg.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/error_bg.bin new file mode 100644 index 000000000..dc24907f7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/error_bg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/increase_button.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/increase_button.bin new file mode 100644 index 000000000..12ae91cd8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/increase_button.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/measuring.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/measuring.bin new file mode 100644 index 000000000..71900cd58 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/measuring.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/posture.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/posture.bin new file mode 100644 index 000000000..3b1a50c08 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/posture.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/right.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/right.bin new file mode 100644 index 000000000..1f3b7974d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/right.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BPCalibration/warning.bin b/code/sdk/files/w9/fs/user/res/BPCalibration/warning.bin new file mode 100644 index 000000000..34578cca0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BPCalibration/warning.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Battery/Battery_Black.bin b/code/sdk/files/w9/fs/user/res/Battery/Battery_Black.bin new file mode 100644 index 000000000..73eefe331 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Battery/Battery_Black.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Battery/Battery_White.bin b/code/sdk/files/w9/fs/user/res/Battery/Battery_White.bin new file mode 100644 index 000000000..3f1a32e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Battery/Battery_White.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Battery/Icon.bin b/code/sdk/files/w9/fs/user/res/Battery/Icon.bin new file mode 100644 index 000000000..c79f063ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Battery/Icon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/Error.bin b/code/sdk/files/w9/fs/user/res/Blood/Error.bin new file mode 100644 index 000000000..b8120b857 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/Error.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/SaO2.bin b/code/sdk/files/w9/fs/user/res/Blood/SaO2.bin new file mode 100644 index 000000000..7f77e35dc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/SaO2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/Vector.bin b/code/sdk/files/w9/fs/user/res/Blood/Vector.bin new file mode 100644 index 000000000..ea9887da9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/Vector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/beijing.bin b/code/sdk/files/w9/fs/user/res/Blood/beijing.bin new file mode 100644 index 000000000..960d11214 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/beijing.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/boutton.bin b/code/sdk/files/w9/fs/user/res/Blood/boutton.bin new file mode 100644 index 000000000..5be4c17d5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/boutton.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_01.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_01.bin new file mode 100644 index 000000000..f9c6c8755 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_02.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_02.bin new file mode 100644 index 000000000..e45d77821 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_03.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_03.bin new file mode 100644 index 000000000..554762fcf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_04.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_04.bin new file mode 100644 index 000000000..a6675c179 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_05.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_05.bin new file mode 100644 index 000000000..cf02766ff Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_06.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_06.bin new file mode 100644 index 000000000..ff9f288ad Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_07.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_07.bin new file mode 100644 index 000000000..a3ddd4c98 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_08.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_08.bin new file mode 100644 index 000000000..0a0058155 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_09.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_09.bin new file mode 100644 index 000000000..a2f1c1757 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_10.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_10.bin new file mode 100644 index 000000000..a03297ddc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_11.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_11.bin new file mode 100644 index 000000000..e3b6f5cdb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_12.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_12.bin new file mode 100644 index 000000000..dc45505c6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_13.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_13.bin new file mode 100644 index 000000000..28b8fd61f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_14.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_14.bin new file mode 100644 index 000000000..401cc59e0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_15.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_15.bin new file mode 100644 index 000000000..5cc60cb4b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_16.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_16.bin new file mode 100644 index 000000000..611b941f8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_17.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_17.bin new file mode 100644 index 000000000..de5ceae61 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_18.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_18.bin new file mode 100644 index 000000000..d1603a22e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_19.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_19.bin new file mode 100644 index 000000000..d32af4968 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_20.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_20.bin new file mode 100644 index 000000000..bd92461c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_21.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_21.bin new file mode 100644 index 000000000..d9338e2b5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_22.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_22.bin new file mode 100644 index 000000000..1ab150206 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_23.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_23.bin new file mode 100644 index 000000000..0a568e9bd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_24.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_24.bin new file mode 100644 index 000000000..b88c0bcfa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_25.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_25.bin new file mode 100644 index 000000000..a1ba31e2d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_26.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_26.bin new file mode 100644 index 000000000..c5f255f81 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_27.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_27.bin new file mode 100644 index 000000000..053a7f184 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_28.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_28.bin new file mode 100644 index 000000000..a159f785d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_29.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_29.bin new file mode 100644 index 000000000..8a1228fff Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_30.bin b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_30.bin new file mode 100644 index 000000000..85fbe4bbd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Blood/spo2_gif/spo2_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/BringhtnessContuolVector.bin b/code/sdk/files/w9/fs/user/res/BringhtnessContuolVector.bin new file mode 100644 index 000000000..21d20587e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/BringhtnessContuolVector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/CHECKBOX_OFF.bin b/code/sdk/files/w9/fs/user/res/CHECKBOX_OFF.bin new file mode 100644 index 000000000..02f4511df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/CHECKBOX_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/CHECKBOX_ON.bin b/code/sdk/files/w9/fs/user/res/CHECKBOX_ON.bin new file mode 100644 index 000000000..1212ce47e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/CHECKBOX_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/CLOSE_RING_CLOCK.bin b/code/sdk/files/w9/fs/user/res/CLOSE_RING_CLOCK.bin new file mode 100644 index 000000000..f5730e0ee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/CLOSE_RING_CLOCK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin b/code/sdk/files/w9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin new file mode 100644 index 000000000..18ac42a93 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/COMPASS_CALIBRATE_IMAGE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/DELETE.bin b/code/sdk/files/w9/fs/user/res/DELETE.bin new file mode 100644 index 000000000..0d5167531 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/DELETE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_0.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_0.bin new file mode 100644 index 000000000..e99f900dd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_0.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_1.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_1.bin new file mode 100644 index 000000000..9f582caa6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_10.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_10.bin new file mode 100644 index 000000000..b4089398f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_11.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_11.bin new file mode 100644 index 000000000..afee7686b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_12.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_12.bin new file mode 100644 index 000000000..fbdfc7374 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_13.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_13.bin new file mode 100644 index 000000000..668a307a0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_14.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_14.bin new file mode 100644 index 000000000..5dd3f99ab Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_15.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_15.bin new file mode 100644 index 000000000..1c5aeb89b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_16.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_16.bin new file mode 100644 index 000000000..f3c76cd1f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_17.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_17.bin new file mode 100644 index 000000000..ae475e6f9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_18.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_18.bin new file mode 100644 index 000000000..e65b9dd6a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_19.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_19.bin new file mode 100644 index 000000000..be70b2646 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_2.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_2.bin new file mode 100644 index 000000000..98d9fb463 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_20.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_20.bin new file mode 100644 index 000000000..12296b444 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_21.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_21.bin new file mode 100644 index 000000000..ecb6892fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_22.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_22.bin new file mode 100644 index 000000000..d743aa988 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_23.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_23.bin new file mode 100644 index 000000000..bc695a3ff Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_24.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_24.bin new file mode 100644 index 000000000..85754475f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_25.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_25.bin new file mode 100644 index 000000000..b12f4c4eb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_26.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_26.bin new file mode 100644 index 000000000..e3b666dc6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_27.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_27.bin new file mode 100644 index 000000000..d32767327 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_28.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_28.bin new file mode 100644 index 000000000..e99301ad5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_29.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_29.bin new file mode 100644 index 000000000..c87ed06e4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_3.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_3.bin new file mode 100644 index 000000000..01b319aa5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_4.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_4.bin new file mode 100644 index 000000000..e7879096b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_5.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_5.bin new file mode 100644 index 000000000..41328930d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_6.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_6.bin new file mode 100644 index 000000000..61e9cafe2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_7.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_7.bin new file mode 100644 index 000000000..9fc35936f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_8.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_8.bin new file mode 100644 index 000000000..6b3136e6c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_9.bin b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_9.bin new file mode 100644 index 000000000..ac1c49af6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/ECG/ECG_GIF/ECG_9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Ellipse_37.bin b/code/sdk/files/w9/fs/user/res/Ellipse_37.bin new file mode 100644 index 000000000..a6413e9e4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Ellipse_37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf b/code/sdk/files/w9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf new file mode 100644 index 000000000..25069dad0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/HarmonyOS_Sans_SC_Regular.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygen.bin b/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygen.bin new file mode 100644 index 000000000..61d09ccab Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygen.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygenCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygenCard.bin new file mode 100644 index 000000000..4a646e6fd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/BloodOxygenCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/CARD_ACTIVITY.bin b/code/sdk/files/w9/fs/user/res/MainCard/CARD_ACTIVITY.bin new file mode 100644 index 000000000..45a459dac Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/CARD_ACTIVITY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/CARD_ADD.bin b/code/sdk/files/w9/fs/user/res/MainCard/CARD_ADD.bin new file mode 100644 index 000000000..f308fc020 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/CARD_ADD.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/CARD_DEL.bin b/code/sdk/files/w9/fs/user/res/MainCard/CARD_DEL.bin new file mode 100644 index 000000000..0c0adcbd8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/CARD_DEL.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/CompassCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/CompassCard.bin new file mode 100644 index 000000000..e5a311a5e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/CompassCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/HeartCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/HeartCard.bin new file mode 100644 index 000000000..b6f4bce02 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/HeartCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/MusicCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/MusicCard.bin new file mode 100644 index 000000000..c8d32c198 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/MusicCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/SetMainCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/SetMainCard.bin new file mode 100644 index 000000000..f52c3ccf2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/SetMainCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/SleepCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/SleepCard.bin new file mode 100644 index 000000000..c08d559f4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/SleepCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/SportCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/SportCard.bin new file mode 100644 index 000000000..7b1a5ea69 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/SportCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/Training.bin b/code/sdk/files/w9/fs/user/res/MainCard/Training.bin new file mode 100644 index 000000000..3fe1da28d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/Training.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/TrainingCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/TrainingCard.bin new file mode 100644 index 000000000..949a7dda2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/TrainingCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/WeatherCard.bin b/code/sdk/files/w9/fs/user/res/MainCard/WeatherCard.bin new file mode 100644 index 000000000..2e0b50616 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/WeatherCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/clock.bin b/code/sdk/files/w9/fs/user/res/MainCard/clock.bin new file mode 100644 index 000000000..ac22cee43 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/clock.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/compass.bin b/code/sdk/files/w9/fs/user/res/MainCard/compass.bin new file mode 100644 index 000000000..2ac20faf2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/compass.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/disturbicon.bin b/code/sdk/files/w9/fs/user/res/MainCard/disturbicon.bin new file mode 100644 index 000000000..21226544d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/disturbicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/dropdown.bin b/code/sdk/files/w9/fs/user/res/MainCard/dropdown.bin new file mode 100644 index 000000000..d4305ccd9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/dropdown.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/heart.bin b/code/sdk/files/w9/fs/user/res/MainCard/heart.bin new file mode 100644 index 000000000..3b3bdd67a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/heart.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MainCard/player.bin b/code/sdk/files/w9/fs/user/res/MainCard/player.bin new file mode 100644 index 000000000..ad44132d4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MainCard/player.bin differ diff --git a/code/sdk/files/w9/fs/user/res/MotionRecognition/MotionRecognition.bin b/code/sdk/files/w9/fs/user/res/MotionRecognition/MotionRecognition.bin new file mode 100644 index 000000000..91abee4d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/MotionRecognition/MotionRecognition.bin differ diff --git a/code/sdk/files/w9/fs/user/res/OK.bin b/code/sdk/files/w9/fs/user/res/OK.bin new file mode 100644 index 000000000..e6c2d7a64 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/OK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/POP_UP_CLOCK.bin b/code/sdk/files/w9/fs/user/res/POP_UP_CLOCK.bin new file mode 100644 index 000000000..eb25f0624 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/POP_UP_CLOCK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/0.bin b/code/sdk/files/w9/fs/user/res/Phone/0.bin new file mode 100644 index 000000000..015cb149e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/0.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/1.bin b/code/sdk/files/w9/fs/user/res/Phone/1.bin new file mode 100644 index 000000000..64eace654 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/2.bin b/code/sdk/files/w9/fs/user/res/Phone/2.bin new file mode 100644 index 000000000..4bb124f1b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/3.bin b/code/sdk/files/w9/fs/user/res/Phone/3.bin new file mode 100644 index 000000000..b2a915897 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/4.bin b/code/sdk/files/w9/fs/user/res/Phone/4.bin new file mode 100644 index 000000000..4305e5edb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/5.bin b/code/sdk/files/w9/fs/user/res/Phone/5.bin new file mode 100644 index 000000000..301bd19d1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/6.bin b/code/sdk/files/w9/fs/user/res/Phone/6.bin new file mode 100644 index 000000000..b37f07a88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/7.bin b/code/sdk/files/w9/fs/user/res/Phone/7.bin new file mode 100644 index 000000000..1d2b72696 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/8.bin b/code/sdk/files/w9/fs/user/res/Phone/8.bin new file mode 100644 index 000000000..527ee5d34 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/9.bin b/code/sdk/files/w9/fs/user/res/Phone/9.bin new file mode 100644 index 000000000..f51b8f2a0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Phone_Call.bin b/code/sdk/files/w9/fs/user/res/Phone/Phone_Call.bin new file mode 100644 index 000000000..b5fb6744c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Phone_Call.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Phone_Ring.bin b/code/sdk/files/w9/fs/user/res/Phone/Phone_Ring.bin new file mode 100644 index 000000000..3934d2d68 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Phone_Ring.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/DialingMethod.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/DialingMethod.bin new file mode 100644 index 000000000..5b7cd092d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/DialingMethod.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin new file mode 100644 index 000000000..a3b00a080 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/FrequentlyContacted.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/TelephoneLine.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/TelephoneLine.bin new file mode 100644 index 000000000..209fcae25 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/TelephoneLine.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/calllogdelete.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/calllogdelete.bin new file mode 100644 index 000000000..33a596c2a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/calllogdelete.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/phone.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/phone.bin new file mode 100644 index 000000000..81045ff1d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/phone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/Telephone/watch.bin b/code/sdk/files/w9/fs/user/res/Phone/Telephone/watch.bin new file mode 100644 index 000000000..4f97b654b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/Telephone/watch.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/boy.bin b/code/sdk/files/w9/fs/user/res/Phone/boy.bin new file mode 100644 index 000000000..06dd386ca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/boy.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/call.bin b/code/sdk/files/w9/fs/user/res/Phone/call.bin new file mode 100644 index 000000000..82f5574d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/call.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/callanswer.bin b/code/sdk/files/w9/fs/user/res/Phone/callanswer.bin new file mode 100644 index 000000000..dcd059284 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/callanswer.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/callhangup.bin b/code/sdk/files/w9/fs/user/res/Phone/callhangup.bin new file mode 100644 index 000000000..12338573a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/callhangup.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/del.bin b/code/sdk/files/w9/fs/user/res/Phone/del.bin new file mode 100644 index 000000000..93acb6361 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/del.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/girl.bin b/code/sdk/files/w9/fs/user/res/Phone/girl.bin new file mode 100644 index 000000000..94082bdca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/girl.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/little-boy.bin b/code/sdk/files/w9/fs/user/res/Phone/little-boy.bin new file mode 100644 index 000000000..34c720726 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/little-boy.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/little-girl.bin b/code/sdk/files/w9/fs/user/res/Phone/little-girl.bin new file mode 100644 index 000000000..d59cd7d62 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/little-girl.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/microphone-no.bin b/code/sdk/files/w9/fs/user/res/Phone/microphone-no.bin new file mode 100644 index 000000000..d2df91a1e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/microphone-no.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/microphone.bin b/code/sdk/files/w9/fs/user/res/Phone/microphone.bin new file mode 100644 index 000000000..7c719cfca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/microphone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/no_sim.bin b/code/sdk/files/w9/fs/user/res/Phone/no_sim.bin new file mode 100644 index 000000000..85f9d7dba Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/no_sim.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/phone-call.bin b/code/sdk/files/w9/fs/user/res/Phone/phone-call.bin new file mode 100644 index 000000000..03acc44d6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/phone-call.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/phone-call1.bin b/code/sdk/files/w9/fs/user/res/Phone/phone-call1.bin new file mode 100644 index 000000000..0f8ea222a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/phone-call1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/phone-off-round.bin b/code/sdk/files/w9/fs/user/res/Phone/phone-off-round.bin new file mode 100644 index 000000000..a08c7895a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/phone-off-round.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/phone-off.bin b/code/sdk/files/w9/fs/user/res/Phone/phone-off.bin new file mode 100644 index 000000000..12338573a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/phone-off.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/phonedir.bin b/code/sdk/files/w9/fs/user/res/Phone/phonedir.bin new file mode 100644 index 000000000..f123d8b8f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/phonedir.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/voice-no.bin b/code/sdk/files/w9/fs/user/res/Phone/voice-no.bin new file mode 100644 index 000000000..90de78f2e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/voice-no.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Phone/voice.bin b/code/sdk/files/w9/fs/user/res/Phone/voice.bin new file mode 100644 index 000000000..59f2276a4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Phone/voice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RIGHT.bin b/code/sdk/files/w9/fs/user/res/RIGHT.bin new file mode 100644 index 000000000..2dbcf5f64 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RIGHT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RING_CLOCK.bin b/code/sdk/files/w9/fs/user/res/RING_CLOCK.bin new file mode 100644 index 000000000..f5a58b003 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RING_CLOCK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/1.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/10.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/11.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/12.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/13.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/14.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/15.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/16.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/17.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/18.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/19.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/2.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/20.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/21.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/22.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/23.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/24.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/25.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/26.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/27.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/28.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/29.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/3.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/30.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/4.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/5.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/6.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/7.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/8.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/9.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ReBoot/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/1.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/1.bin new file mode 100644 index 000000000..e730a79ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/10.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/10.bin new file mode 100644 index 000000000..7079b91cb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/11.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/11.bin new file mode 100644 index 000000000..2f072d378 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/12.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/12.bin new file mode 100644 index 000000000..0de19853c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/13.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/13.bin new file mode 100644 index 000000000..f61553a0b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/14.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/14.bin new file mode 100644 index 000000000..26e9127c0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/15.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/15.bin new file mode 100644 index 000000000..cf079b317 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/16.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/16.bin new file mode 100644 index 000000000..a18432dc4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/17.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/17.bin new file mode 100644 index 000000000..60e564b72 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/18.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/18.bin new file mode 100644 index 000000000..906ed2d73 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/19.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/19.bin new file mode 100644 index 000000000..c1a64972b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/2.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/2.bin new file mode 100644 index 000000000..d1842b6e3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/20.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/20.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/21.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/21.bin new file mode 100644 index 000000000..ebe01a28b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/22.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/22.bin new file mode 100644 index 000000000..93053b378 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/23.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/23.bin new file mode 100644 index 000000000..f75f1bd12 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/24.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/24.bin new file mode 100644 index 000000000..6ff893573 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/25.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/25.bin new file mode 100644 index 000000000..c2e277f0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/26.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/26.bin new file mode 100644 index 000000000..6bf97c91f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/27.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/27.bin new file mode 100644 index 000000000..1c0ea4768 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/28.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/28.bin new file mode 100644 index 000000000..d8901bc42 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/29.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/29.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/3.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/3.bin new file mode 100644 index 000000000..a3fd90c26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/30.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/30.bin new file mode 100644 index 000000000..4c2c1252f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/4.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/4.bin new file mode 100644 index 000000000..2b52168fa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/5.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/5.bin new file mode 100644 index 000000000..6d831f5db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/6.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/6.bin new file mode 100644 index 000000000..f708c1d63 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/7.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/7.bin new file mode 100644 index 000000000..0d87123eb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/8.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/8.bin new file mode 100644 index 000000000..19233f4ba Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/9.bin b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/9.bin new file mode 100644 index 000000000..b62e3a6e6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RebootAndShutDown/ShutDown/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCGroupList.bin b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCGroupList.bin new file mode 100644 index 000000000..9ba40f7ef Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCGroupList.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCVector.bin b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCVector.bin new file mode 100644 index 000000000..be501a130 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RTCVector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin new file mode 100644 index 000000000..4760aa90d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin differ diff --git a/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin new file mode 100644 index 000000000..fc98a59b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SELECTION_BOX.bin b/code/sdk/files/w9/fs/user/res/SELECTION_BOX.bin new file mode 100644 index 000000000..ec6a5eea1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SELECTION_BOX.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SETTING_BACKGROUND.bin b/code/sdk/files/w9/fs/user/res/SETTING_BACKGROUND.bin new file mode 100644 index 000000000..abffa0ed8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SETTING_BACKGROUND.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SETTING_NEXT.bin b/code/sdk/files/w9/fs/user/res/SETTING_NEXT.bin new file mode 100644 index 000000000..1a68bf4f1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SETTING_NEXT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOff.bin b/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOff.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOff.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOn.bin b/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOn.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SYSTEM_CheckOn.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-E.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-E.bin new file mode 100644 index 000000000..f6fe312e4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-E.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-F.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-F.bin new file mode 100644 index 000000000..7b3c3a859 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/Battery-F.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/SaveEle.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/SaveEle.bin new file mode 100644 index 000000000..59d8ed98a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/SaveEle.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Error.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Error.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Error.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Right.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Right.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/Save_Right.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/finger.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/finger.bin new file mode 100644 index 000000000..9cbfbac9d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/finger.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/finger2.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/finger2.bin new file mode 100644 index 000000000..b08089fff Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/finger2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Save_Ele/wathch.bin b/code/sdk/files/w9/fs/user/res/Save_Ele/wathch.bin new file mode 100644 index 000000000..7ae6bf2ac Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Save_Ele/wathch.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin b/code/sdk/files/w9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin new file mode 100644 index 000000000..31bf814aa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Schedule/schedule_no_data.bin b/code/sdk/files/w9/fs/user/res/Schedule/schedule_no_data.bin new file mode 100644 index 000000000..7f9b5f0c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Schedule/schedule_no_data.bin differ diff --git a/code/sdk/files/w9/fs/user/res/SedentaryReminder/SedentaryReminder.bin b/code/sdk/files/w9/fs/user/res/SedentaryReminder/SedentaryReminder.bin new file mode 100644 index 000000000..e721061af Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/SedentaryReminder/SedentaryReminder.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/alarmicon.bin b/code/sdk/files/w9/fs/user/res/Sleep/alarmicon.bin new file mode 100644 index 000000000..f49a20dbf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/alarmicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/back.bin b/code/sdk/files/w9/fs/user/res/Sleep/back.bin new file mode 100644 index 000000000..976b16634 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/back.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/goodmorning.bin b/code/sdk/files/w9/fs/user/res/Sleep/goodmorning.bin new file mode 100644 index 000000000..a47c4320d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/goodmorning.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/line.bin b/code/sdk/files/w9/fs/user/res/Sleep/line.bin new file mode 100644 index 000000000..2f1218c8a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/line.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/room.bin b/code/sdk/files/w9/fs/user/res/Sleep/room.bin new file mode 100644 index 000000000..481b31a43 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/room.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/sunny.bin b/code/sdk/files/w9/fs/user/res/Sleep/sunny.bin new file mode 100644 index 000000000..1e7c086ee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/sunny.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/transverse_line.bin b/code/sdk/files/w9/fs/user/res/Sleep/transverse_line.bin new file mode 100644 index 000000000..c76a3d11a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/transverse_line.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleep/up.bin b/code/sdk/files/w9/fs/user/res/Sleep/up.bin new file mode 100644 index 000000000..96f896968 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleep/up.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Sleepmode/sleepmode.bin b/code/sdk/files/w9/fs/user/res/Sleepmode/sleepmode.bin new file mode 100644 index 000000000..81c306714 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Sleepmode/sleepmode.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_00.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_00.bin new file mode 100644 index 000000000..41f6a506b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_00.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_01.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_01.bin new file mode 100644 index 000000000..d14d4eac0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_02.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_02.bin new file mode 100644 index 000000000..8807dabf0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_03.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_03.bin new file mode 100644 index 000000000..65e942c40 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_04.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_04.bin new file mode 100644 index 000000000..701b3cb35 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_05.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_05.bin new file mode 100644 index 000000000..e168e2a9b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_06.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_06.bin new file mode 100644 index 000000000..2fc0657d3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_07.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_07.bin new file mode 100644 index 000000000..eb0b38847 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_08.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_08.bin new file mode 100644 index 000000000..6c0a62c14 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_09.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_09.bin new file mode 100644 index 000000000..3b28de40d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_10.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_10.bin new file mode 100644 index 000000000..447362b3d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_11.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_11.bin new file mode 100644 index 000000000..864a5c2be Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_12.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_12.bin new file mode 100644 index 000000000..5d2627623 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_13.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_13.bin new file mode 100644 index 000000000..805dfcc19 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_14.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_14.bin new file mode 100644 index 000000000..8eec12fc8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_15.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_15.bin new file mode 100644 index 000000000..bfc7351b1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_16.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_16.bin new file mode 100644 index 000000000..e1ada926a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_17.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_17.bin new file mode 100644 index 000000000..59492461b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_18.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_18.bin new file mode 100644 index 000000000..f72980f99 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_19.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_19.bin new file mode 100644 index 000000000..b216edbcb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_20.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_20.bin new file mode 100644 index 000000000..4211266e9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_21.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_21.bin new file mode 100644 index 000000000..3f020cca9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_22.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_22.bin new file mode 100644 index 000000000..91d47c04d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_23.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_23.bin new file mode 100644 index 000000000..d3b0287e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_24.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_24.bin new file mode 100644 index 000000000..dbae674ee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_25.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_25.bin new file mode 100644 index 000000000..1eddcc3d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_26.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_26.bin new file mode 100644 index 000000000..c3d91d65e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_27.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_27.bin new file mode 100644 index 000000000..3f1cbd936 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_28.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_28.bin new file mode 100644 index 000000000..218541f7a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_29.bin b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_29.bin new file mode 100644 index 000000000..ffa401a65 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Stress/Stress_GIF/analysis_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_OFF.bin b/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_OFF.bin new file mode 100644 index 000000000..d96672bf3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_ON.bin b/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_ON.bin new file mode 100644 index 000000000..99056d1b6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/TOGGLEBUTTON_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/TRUE_ADD.bin b/code/sdk/files/w9/fs/user/res/TRUE_ADD.bin new file mode 100644 index 000000000..bc6eb297f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/TRUE_ADD.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ball.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ball.bin new file mode 100644 index 000000000..2058eb59c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ball.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Dance.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Dance.bin new file mode 100644 index 000000000..fe79dab2f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Dance.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Fitness.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Fitness.bin new file mode 100644 index 000000000..532aba7e6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Fitness.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin new file mode 100644 index 000000000..cd011d567 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/FreeTraining_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ice.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ice.bin new file mode 100644 index 000000000..3edcf807f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Ice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Jumprope.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Jumprope.bin new file mode 100644 index 000000000..4008537cc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Jumprope.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Limit.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Limit.bin new file mode 100644 index 000000000..77dc84c45 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Limit.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Mountaineering.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Mountaineering.bin new file mode 100644 index 000000000..d556e7e1c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Mountaineering.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Other.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Other.bin new file mode 100644 index 000000000..6d628c943 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Other.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Pingpong.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Pingpong.bin new file mode 100644 index 000000000..90bdb3e7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Pingpong.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Rest.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Rest.bin new file mode 100644 index 000000000..6c222eb69 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Rest.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding.bin new file mode 100644 index 000000000..9afc52395 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding_60.bin new file mode 100644 index 000000000..acdd2a499 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Riding_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running.bin new file mode 100644 index 000000000..97573a07f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running_60.bin new file mode 100644 index 000000000..0d9c011a3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Running_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Swimming.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Swimming.bin new file mode 100644 index 000000000..03fcbe38c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/Swimming.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking.bin new file mode 100644 index 000000000..2d23784dd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking_60.bin new file mode 100644 index 000000000..6faf11661 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_36x36/walking_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ball_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ball_54.bin new file mode 100644 index 000000000..b93746ad7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ball_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Dance_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Dance_54.bin new file mode 100644 index 000000000..85cb1e01d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Dance_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Fitness_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Fitness_54.bin new file mode 100644 index 000000000..85ce2a06c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Fitness_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ice_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ice_54.bin new file mode 100644 index 000000000..2ff457221 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Ice_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Limit_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Limit_54.bin new file mode 100644 index 000000000..00b61ec82 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Limit_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Other_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Other_54.bin new file mode 100644 index 000000000..f6dd40be0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Other_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Rest_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Rest_54.bin new file mode 100644 index 000000000..2141e2e96 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Rest_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Swimming_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Swimming_54.bin new file mode 100644 index 000000000..9443d8314 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Swimming_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Walking_54.bin b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Walking_54.bin new file mode 100644 index 000000000..7e498ca0d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_54x79/Walking_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin new file mode 100644 index 000000000..cd011d567 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/FreeTraining_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Riding_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Riding_60.bin new file mode 100644 index 000000000..acdd2a499 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Riding_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Running_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Running_60.bin new file mode 100644 index 000000000..0d9c011a3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/Running_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/riding.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/riding.bin new file mode 100644 index 000000000..126d44cc1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/riding.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/running.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/running.bin new file mode 100644 index 000000000..44aada84c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/running.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking.bin new file mode 100644 index 000000000..beec31cf1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking_60.bin b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking_60.bin new file mode 100644 index 000000000..6faf11661 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_60x60/walking_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Jumprope_80.bin b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Jumprope_80.bin new file mode 100644 index 000000000..65fe2e789 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Jumprope_80.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin new file mode 100644 index 000000000..468ee9e01 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Mountaineering_80.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Pingpong_80.bin b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Pingpong_80.bin new file mode 100644 index 000000000..0670ad4d3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Pingpong_80.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Riding_80.bin b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Riding_80.bin new file mode 100644 index 000000000..abc376f92 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/icon_80x80/Riding_80.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Arrows.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Arrows.bin new file mode 100644 index 000000000..797a64a25 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Arrows.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Back.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Back.bin new file mode 100644 index 000000000..489261160 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Back.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Bouttonground.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Bouttonground.bin new file mode 100644 index 000000000..a494fe202 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Bouttonground.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Bubble.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Bubble.bin new file mode 100644 index 000000000..268046d4c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Bubble.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Buttonground2.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Buttonground2.bin new file mode 100644 index 000000000..a48543767 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Buttonground2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Buttonok.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Buttonok.bin new file mode 100644 index 000000000..0dbdb0712 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Buttonok.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Calories.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Calories.bin new file mode 100644 index 000000000..a46782845 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Calories.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Calories_30.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Calories_30.bin new file mode 100644 index 000000000..8674a596f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Calories_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Color_Progress.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Color_Progress.bin new file mode 100644 index 000000000..da0c82952 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Color_Progress.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Control_point.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Control_point.bin new file mode 100644 index 000000000..199c0f137 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Control_point.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Data_point.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Data_point.bin new file mode 100644 index 000000000..0cd66a165 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Data_point.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/GPS_1.bin b/code/sdk/files/w9/fs/user/res/Training/modules/GPS_1.bin new file mode 100644 index 000000000..c5532930e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/GPS_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/GPS_2.bin b/code/sdk/files/w9/fs/user/res/Training/modules/GPS_2.bin new file mode 100644 index 000000000..815678cf0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/GPS_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Go.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Go.bin new file mode 100644 index 000000000..4ae9a3879 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Go.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Go_2.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Go_2.bin new file mode 100644 index 000000000..ec87acf4c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Go_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate.bin new file mode 100644 index 000000000..a8d074d1a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_1.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_1.bin new file mode 100644 index 000000000..4ae0fe6dc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_2.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_2.bin new file mode 100644 index 000000000..e7a6abb15 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_30.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_30.bin new file mode 100644 index 000000000..1697c6bc7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Heartrate_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Icon.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Icon.bin new file mode 100644 index 000000000..1a68bf4f1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Icon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up.bin new file mode 100644 index 000000000..d81048b08 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up_40.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up_40.bin new file mode 100644 index 000000000..96f896968 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Inco_up_40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Line.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Line.bin new file mode 100644 index 000000000..9ba40f7ef Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Line.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Line_1.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Line_1.bin new file mode 100644 index 000000000..f04c971b6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Line_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Line_2.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Line_2.bin new file mode 100644 index 000000000..635cb2c34 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Line_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Mileage.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Mileage.bin new file mode 100644 index 000000000..ca135d13f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Mileage.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Mileage_30.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Mileage_30.bin new file mode 100644 index 000000000..76237bd30 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Mileage_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/More.bin b/code/sdk/files/w9/fs/user/res/Training/modules/More.bin new file mode 100644 index 000000000..de2ee9146 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/More.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/MoreView.bin b/code/sdk/files/w9/fs/user/res/Training/modules/MoreView.bin new file mode 100644 index 000000000..3fde01787 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/MoreView.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/More_icon.bin b/code/sdk/files/w9/fs/user/res/Training/modules/More_icon.bin new file mode 100644 index 000000000..e98798a25 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/More_icon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/No.bin b/code/sdk/files/w9/fs/user/res/Training/modules/No.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/No.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Norecord.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Norecord.bin new file mode 100644 index 000000000..efc960e12 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Norecord.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Note.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Note.bin new file mode 100644 index 000000000..48ab51d86 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Note.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Path.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Path.bin new file mode 100644 index 000000000..ab6c2a848 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Path.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Piont_bubble.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Piont_bubble.bin new file mode 100644 index 000000000..818a9abd0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Piont_bubble.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Point_black.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Point_black.bin new file mode 100644 index 000000000..a9bc0b8c9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Point_black.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Point_bule.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Point_bule.bin new file mode 100644 index 000000000..808b8987a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Point_bule.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Point_green.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Point_green.bin new file mode 100644 index 000000000..03f2625b4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Point_green.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Point_orange.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Point_orange.bin new file mode 100644 index 000000000..cd6cef386 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Point_orange.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Point_yellow.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Point_yellow.bin new file mode 100644 index 000000000..6ea0184e1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Point_yellow.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Progress.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Progress.bin new file mode 100644 index 000000000..2d456e0c8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Progress.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Sport_continue.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_continue.bin new file mode 100644 index 000000000..29fa070bb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_continue.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Sport_pause.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_pause.bin new file mode 100644 index 000000000..09cfcda72 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_pause.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Sport_stop.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_stop.bin new file mode 100644 index 000000000..7b5a977a5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_stop.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Sport_strength.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_strength.bin new file mode 100644 index 000000000..2f682a0bd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Sport_strength.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Step_30.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Step_30.bin new file mode 100644 index 000000000..98998f919 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Step_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Time.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Time.bin new file mode 100644 index 000000000..493393ae6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Time.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Walking_54.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Walking_54.bin new file mode 100644 index 000000000..0c977057b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Walking_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Warning.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Warning.bin new file mode 100644 index 000000000..7301e2834 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Warning.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/Yes.bin b/code/sdk/files/w9/fs/user/res/Training/modules/Yes.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/Yes.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/modules/sport_heartrate.bin b/code/sdk/files/w9/fs/user/res/Training/modules/sport_heartrate.bin new file mode 100644 index 000000000..9b6dd786d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/modules/sport_heartrate.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/1.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/1.bin new file mode 100644 index 000000000..4ed2da99c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/10.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/10.bin new file mode 100644 index 000000000..21c074611 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/11.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/11.bin new file mode 100644 index 000000000..cf967b494 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/12.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/12.bin new file mode 100644 index 000000000..4743d0839 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/13.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/13.bin new file mode 100644 index 000000000..3011f2971 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/14.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/14.bin new file mode 100644 index 000000000..6e48a1271 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/15.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/15.bin new file mode 100644 index 000000000..6472ae0e8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/16.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/16.bin new file mode 100644 index 000000000..f1354f325 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/17.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/17.bin new file mode 100644 index 000000000..23f391e93 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/18.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/18.bin new file mode 100644 index 000000000..eb2317942 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/19.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/19.bin new file mode 100644 index 000000000..3365d6424 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/2.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/2.bin new file mode 100644 index 000000000..17779e612 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/20.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/20.bin new file mode 100644 index 000000000..f8cab7b50 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/21.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/21.bin new file mode 100644 index 000000000..643935db1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/22.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/22.bin new file mode 100644 index 000000000..8bfdfb3ec Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/23.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/23.bin new file mode 100644 index 000000000..963e047f7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/24.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/24.bin new file mode 100644 index 000000000..51463704d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/25.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/25.bin new file mode 100644 index 000000000..4a9354d98 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/26.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/26.bin new file mode 100644 index 000000000..3633c4d7a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/27.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/27.bin new file mode 100644 index 000000000..036f37a73 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/28.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/28.bin new file mode 100644 index 000000000..8178e69c5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/29.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/29.bin new file mode 100644 index 000000000..484c3d982 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/3.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/3.bin new file mode 100644 index 000000000..b0572b8e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/30.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/30.bin new file mode 100644 index 000000000..59de63584 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/31.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/31.bin new file mode 100644 index 000000000..a3205ff8e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/32.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/32.bin new file mode 100644 index 000000000..384f3d083 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/33.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/33.bin new file mode 100644 index 000000000..3fd42685d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/34.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/34.bin new file mode 100644 index 000000000..b031242d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/35.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/35.bin new file mode 100644 index 000000000..6c39992cd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/36.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/36.bin new file mode 100644 index 000000000..b4c830b35 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/37.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/37.bin new file mode 100644 index 000000000..83ff3e2dd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/38.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/38.bin new file mode 100644 index 000000000..394020dfc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/39.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/39.bin new file mode 100644 index 000000000..e0b491b61 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/4.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/4.bin new file mode 100644 index 000000000..ad317f72e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/40.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/40.bin new file mode 100644 index 000000000..f2159ee32 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/41.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/41.bin new file mode 100644 index 000000000..ad258b618 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/41.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/42.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/42.bin new file mode 100644 index 000000000..b7333980b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/42.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/43.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/43.bin new file mode 100644 index 000000000..d84af3f5a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/43.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/44.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/44.bin new file mode 100644 index 000000000..65291fb87 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/44.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/45.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/45.bin new file mode 100644 index 000000000..b3ce23526 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/45.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/46.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/46.bin new file mode 100644 index 000000000..c42cede09 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/46.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/47.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/47.bin new file mode 100644 index 000000000..2bc3f103c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/47.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/48.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/48.bin new file mode 100644 index 000000000..37cf3a547 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/48.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/49.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/49.bin new file mode 100644 index 000000000..01518ecc7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/49.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/5.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/5.bin new file mode 100644 index 000000000..f966e5e0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/50.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/50.bin new file mode 100644 index 000000000..6e052345b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/50.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/51.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/51.bin new file mode 100644 index 000000000..50958ac84 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/51.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/52.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/52.bin new file mode 100644 index 000000000..440a14694 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/52.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/53.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/53.bin new file mode 100644 index 000000000..5c07ed6e4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/53.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/54.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/54.bin new file mode 100644 index 000000000..2051ad940 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/55.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/55.bin new file mode 100644 index 000000000..8a222c7bc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/55.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/56.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/56.bin new file mode 100644 index 000000000..409735f38 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/56.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/57.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/57.bin new file mode 100644 index 000000000..c04c430db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/57.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/58.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/58.bin new file mode 100644 index 000000000..93450790e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/58.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/59.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/59.bin new file mode 100644 index 000000000..7985c9f15 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/59.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/6.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/6.bin new file mode 100644 index 000000000..baa022f57 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/60.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/60.bin new file mode 100644 index 000000000..6a214be81 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/61.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/61.bin new file mode 100644 index 000000000..9bef293fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/61.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/62.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/62.bin new file mode 100644 index 000000000..8820c1113 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/62.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/63.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/63.bin new file mode 100644 index 000000000..850f763c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/63.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/64.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/64.bin new file mode 100644 index 000000000..4c178f190 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/64.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/65.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/65.bin new file mode 100644 index 000000000..9ad9748c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/65.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/66.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/66.bin new file mode 100644 index 000000000..7fa61e90d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/66.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/67.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/67.bin new file mode 100644 index 000000000..cb3f9b04a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/67.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/68.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/68.bin new file mode 100644 index 000000000..f70963790 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/68.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/69.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/69.bin new file mode 100644 index 000000000..ef9b430ca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/69.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/7.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/7.bin new file mode 100644 index 000000000..4c63fe945 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/70.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/70.bin new file mode 100644 index 000000000..66c478413 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/70.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/71.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/71.bin new file mode 100644 index 000000000..103fc4b20 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/71.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/72.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/72.bin new file mode 100644 index 000000000..8513e1e3a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/72.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/73.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/73.bin new file mode 100644 index 000000000..d08f6a358 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/73.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/74.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/74.bin new file mode 100644 index 000000000..9947f68c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/74.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/75.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/75.bin new file mode 100644 index 000000000..2023be892 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/75.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/76.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/76.bin new file mode 100644 index 000000000..2562e2307 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/76.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/77.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/77.bin new file mode 100644 index 000000000..f25d256b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/77.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/78.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/78.bin new file mode 100644 index 000000000..f45defc7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/78.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/79.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/79.bin new file mode 100644 index 000000000..f09097603 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/79.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/8.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/8.bin new file mode 100644 index 000000000..24f99dc3a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/80.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/80.bin new file mode 100644 index 000000000..e1048d5b4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/80.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/81.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/81.bin new file mode 100644 index 000000000..431451666 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/81.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/82.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/82.bin new file mode 100644 index 000000000..aff794395 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/82.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/83.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/83.bin new file mode 100644 index 000000000..03a762591 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/83.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/84.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/84.bin new file mode 100644 index 000000000..0ad2148b9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/84.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/85.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/85.bin new file mode 100644 index 000000000..c0f620206 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/85.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/86.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/86.bin new file mode 100644 index 000000000..31e9173d5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/86.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/87.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/87.bin new file mode 100644 index 000000000..719699b9f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/87.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/88.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/88.bin new file mode 100644 index 000000000..9b69168b9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/88.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/89.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/89.bin new file mode 100644 index 000000000..08e68b6f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/89.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/9.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/9.bin new file mode 100644 index 000000000..9be948fb8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/90.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/90.bin new file mode 100644 index 000000000..3fae73c7c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/90.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/91.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/91.bin new file mode 100644 index 000000000..a03d7b8d8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/91.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/92.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/92.bin new file mode 100644 index 000000000..895d9eba1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/92.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/93.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/93.bin new file mode 100644 index 000000000..ba97a715d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/93.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/94.bin b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/94.bin new file mode 100644 index 000000000..6b3789195 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Training/training_GIF/win/94.bin differ diff --git a/code/sdk/files/w9/fs/user/res/Vector.bin b/code/sdk/files/w9/fs/user/res/Vector.bin new file mode 100644 index 000000000..a9c7511bd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/Vector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/VolumeControlVector.bin b/code/sdk/files/w9/fs/user/res/VolumeControlVector.bin new file mode 100644 index 000000000..da3928e81 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/VolumeControlVector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/add_card/button_no.bin b/code/sdk/files/w9/fs/user/res/add_card/button_no.bin new file mode 100644 index 000000000..8c397c803 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/add_card/button_no.bin differ diff --git a/code/sdk/files/w9/fs/user/res/add_card/button_ok.bin b/code/sdk/files/w9/fs/user/res/add_card/button_ok.bin new file mode 100644 index 000000000..68257926f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/add_card/button_ok.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/1.bin b/code/sdk/files/w9/fs/user/res/alipay/1.bin new file mode 100644 index 000000000..1a4c9939d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/2.bin b/code/sdk/files/w9/fs/user/res/alipay/2.bin new file mode 100644 index 000000000..410fac639 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/3.bin b/code/sdk/files/w9/fs/user/res/alipay/3.bin new file mode 100644 index 000000000..b69a6207e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/4.bin b/code/sdk/files/w9/fs/user/res/alipay/4.bin new file mode 100644 index 000000000..d675b7783 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/5.bin b/code/sdk/files/w9/fs/user/res/alipay/5.bin new file mode 100644 index 000000000..33211a909 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/6.bin b/code/sdk/files/w9/fs/user/res/alipay/6.bin new file mode 100644 index 000000000..14b9a96aa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/7.bin b/code/sdk/files/w9/fs/user/res/alipay/7.bin new file mode 100644 index 000000000..501f7a95b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/8.bin b/code/sdk/files/w9/fs/user/res/alipay/8.bin new file mode 100644 index 000000000..a1be23997 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin new file mode 100644 index 000000000..120b4f221 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_FAILURE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin new file mode 100644 index 000000000..89af5fe16 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_BIND_SUCCESS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin new file mode 100644 index 000000000..07872c9ea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_HELP.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin new file mode 100644 index 000000000..4b0c3ed58 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_PAY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin new file mode 100644 index 000000000..f37a192f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_SETTING.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin new file mode 100644 index 000000000..89337fab2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_LIST_TRANS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin new file mode 100644 index 000000000..5feb11717 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin new file mode 100644 index 000000000..a26ed67db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/alipay_logo.bin b/code/sdk/files/w9/fs/user/res/alipay/alipay_logo.bin new file mode 100644 index 000000000..db057a195 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/alipay_logo.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/alipaylog.bin b/code/sdk/files/w9/fs/user/res/alipay/alipaylog.bin new file mode 100644 index 000000000..0402d782c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/alipaylog.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/no.bin b/code/sdk/files/w9/fs/user/res/alipay/no.bin new file mode 100644 index 000000000..8dd8ac995 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/no.bin differ diff --git a/code/sdk/files/w9/fs/user/res/alipay/yes.bin b/code/sdk/files/w9/fs/user/res/alipay/yes.bin new file mode 100644 index 000000000..cfacfbe6b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/alipay/yes.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/Fatigue_level.bin b/code/sdk/files/w9/fs/user/res/applist_icon/Fatigue_level.bin new file mode 100644 index 000000000..bdec47d13 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/Fatigue_level.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/aivoice.bin b/code/sdk/files/w9/fs/user/res/applist_icon/aivoice.bin new file mode 100644 index 000000000..158f25871 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/aivoice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/alarm.bin b/code/sdk/files/w9/fs/user/res/applist_icon/alarm.bin new file mode 100644 index 000000000..d386339e6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/alarm.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/alipay.bin b/code/sdk/files/w9/fs/user/res/applist_icon/alipay.bin new file mode 100644 index 000000000..5b71df1c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/alipay.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin new file mode 100644 index 000000000..6fc75a1a4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/aivoice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alarm.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alarm.bin new file mode 100644 index 000000000..c178e98a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alarm.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alipay.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alipay.bin new file mode 100644 index 000000000..94afd4d64 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/alipay.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/assistant.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/assistant.bin new file mode 100644 index 000000000..ba23b2efe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/assistant.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/blood_pressure.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/blood_pressure.bin new file mode 100644 index 000000000..99c1cd803 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/blood_pressure.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bluetooth.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bluetooth.bin new file mode 100644 index 000000000..755ad9a68 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bluetooth.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin new file mode 100644 index 000000000..cf6d2d754 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/booldoxygen.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bp_calibration.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bp_calibration.bin new file mode 100644 index 000000000..b7a900c51 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/bp_calibration.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/breathe.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/breathe.bin new file mode 100644 index 000000000..476930a8c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/breathe.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/calendar.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/calendar.bin new file mode 100644 index 000000000..106fe72c9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/calendar.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin new file mode 100644 index 000000000..b6aa1b14e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/cardsetting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/changedial.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/changedial.bin new file mode 100644 index 000000000..dd30fb86a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/changedial.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/clock.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/clock.bin new file mode 100644 index 000000000..7a54c3d49 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/clock.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/compass.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/compass.bin new file mode 100644 index 000000000..af30bca9f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/compass.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/countdown.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/countdown.bin new file mode 100644 index 000000000..60a633b2a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/countdown.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/disturb.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/disturb.bin new file mode 100644 index 000000000..4ac882a60 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/disturb.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/ecg.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/ecg.bin new file mode 100644 index 000000000..084f6096e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/ecg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/emotion.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/emotion.bin new file mode 100644 index 000000000..846a3f15f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/emotion.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/fatigue_level.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/fatigue_level.bin new file mode 100644 index 000000000..6fc081b13 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/fatigue_level.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/findphone.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/findphone.bin new file mode 100644 index 000000000..526fb529f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/findphone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin new file mode 100644 index 000000000..51803f1da Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/flashlight.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/heart.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/heart.bin new file mode 100644 index 000000000..f63c40d0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/heart.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/information.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/information.bin new file mode 100644 index 000000000..a43ecf7cf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/information.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/lighting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/lighting.bin new file mode 100644 index 000000000..d5cead04f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/lighting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/message.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/message.bin new file mode 100644 index 000000000..81b3ee5c9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/message.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/music.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/music.bin new file mode 100644 index 000000000..b2f6c4a45 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/music.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phone.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phone.bin new file mode 100644 index 000000000..e5c7ac1d3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin new file mode 100644 index 000000000..12354b483 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/phonebook.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/record.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/record.bin new file mode 100644 index 000000000..9f3aace90 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/record.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/recording.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/recording.bin new file mode 100644 index 000000000..c5ba61d99 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/recording.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/save.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/save.bin new file mode 100644 index 000000000..cad4762ba Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/save.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/schedule.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/schedule.bin new file mode 100644 index 000000000..057a37885 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/schedule.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/setting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/setting.bin new file mode 100644 index 000000000..5665f4296 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/setting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin new file mode 100644 index 000000000..ca5eb8715 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sleeping.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/smart.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/smart.bin new file mode 100644 index 000000000..4d9fef7d4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/smart.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sport.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sport.bin new file mode 100644 index 000000000..953229212 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/sport.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/stress.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/stress.bin new file mode 100644 index 000000000..db444a3a2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/stress.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/theme.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/theme.bin new file mode 100644 index 000000000..787540c43 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/theme.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/training.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/training.bin new file mode 100644 index 000000000..76756265d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/training.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/voice.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/voice.bin new file mode 100644 index 000000000..c9736d3fd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/voice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/weather.bin b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/weather.bin new file mode 100644 index 000000000..5e5522f3a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/applist_big_icon/weather.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/assistant.bin b/code/sdk/files/w9/fs/user/res/applist_icon/assistant.bin new file mode 100644 index 000000000..442e8e62a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/assistant.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/blood_pressure.bin b/code/sdk/files/w9/fs/user/res/applist_icon/blood_pressure.bin new file mode 100644 index 000000000..c67d5c577 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/blood_pressure.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/bluetooth.bin b/code/sdk/files/w9/fs/user/res/applist_icon/bluetooth.bin new file mode 100644 index 000000000..2f980bdaa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/bluetooth.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/booldoxygen.bin b/code/sdk/files/w9/fs/user/res/applist_icon/booldoxygen.bin new file mode 100644 index 000000000..480578efc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/booldoxygen.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/boolpressure.bin b/code/sdk/files/w9/fs/user/res/applist_icon/boolpressure.bin new file mode 100644 index 000000000..daad9f0b1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/boolpressure.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/bp_calibration.bin b/code/sdk/files/w9/fs/user/res/applist_icon/bp_calibration.bin new file mode 100644 index 000000000..84ae96c85 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/bp_calibration.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/breathe.bin b/code/sdk/files/w9/fs/user/res/applist_icon/breathe.bin new file mode 100644 index 000000000..b6c5254e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/breathe.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/calendar.bin b/code/sdk/files/w9/fs/user/res/applist_icon/calendar.bin new file mode 100644 index 000000000..21b31b95f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/calendar.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/cardsetting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/cardsetting.bin new file mode 100644 index 000000000..e9cdf458d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/cardsetting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/changedial.bin b/code/sdk/files/w9/fs/user/res/applist_icon/changedial.bin new file mode 100644 index 000000000..4e13dc1f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/changedial.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/clock.bin b/code/sdk/files/w9/fs/user/res/applist_icon/clock.bin new file mode 100644 index 000000000..508925b29 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/clock.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/compass.bin b/code/sdk/files/w9/fs/user/res/applist_icon/compass.bin new file mode 100644 index 000000000..a91d0788d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/compass.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/countdown.bin b/code/sdk/files/w9/fs/user/res/applist_icon/countdown.bin new file mode 100644 index 000000000..837910624 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/countdown.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/disturb.bin b/code/sdk/files/w9/fs/user/res/applist_icon/disturb.bin new file mode 100644 index 000000000..2a16f04b6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/disturb.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/ecg.bin b/code/sdk/files/w9/fs/user/res/applist_icon/ecg.bin new file mode 100644 index 000000000..ed22a1179 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/ecg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/emotion.bin b/code/sdk/files/w9/fs/user/res/applist_icon/emotion.bin new file mode 100644 index 000000000..7b2820c99 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/emotion.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/findphone.bin b/code/sdk/files/w9/fs/user/res/applist_icon/findphone.bin new file mode 100644 index 000000000..f6bc8a7d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/findphone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/flashlight.bin b/code/sdk/files/w9/fs/user/res/applist_icon/flashlight.bin new file mode 100644 index 000000000..64d5083b0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/flashlight.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/heart.bin b/code/sdk/files/w9/fs/user/res/applist_icon/heart.bin new file mode 100644 index 000000000..57fc069cf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/heart.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/information.bin b/code/sdk/files/w9/fs/user/res/applist_icon/information.bin new file mode 100644 index 000000000..7d85a73f3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/information.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/lighting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/lighting.bin new file mode 100644 index 000000000..1fe402538 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/lighting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/message.bin b/code/sdk/files/w9/fs/user/res/applist_icon/message.bin new file mode 100644 index 000000000..5c2561340 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/message.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/music.bin b/code/sdk/files/w9/fs/user/res/applist_icon/music.bin new file mode 100644 index 000000000..236386c37 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/music.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/phone.bin b/code/sdk/files/w9/fs/user/res/applist_icon/phone.bin new file mode 100644 index 000000000..463ab01c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/phone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/phonebook.bin b/code/sdk/files/w9/fs/user/res/applist_icon/phonebook.bin new file mode 100644 index 000000000..c4ef74118 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/phonebook.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/record.bin b/code/sdk/files/w9/fs/user/res/applist_icon/record.bin new file mode 100644 index 000000000..bbe90fe76 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/record.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/recording.bin b/code/sdk/files/w9/fs/user/res/applist_icon/recording.bin new file mode 100644 index 000000000..8541c117f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/recording.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/save.bin b/code/sdk/files/w9/fs/user/res/applist_icon/save.bin new file mode 100644 index 000000000..c6ed1ff2b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/save.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/schedule.bin b/code/sdk/files/w9/fs/user/res/applist_icon/schedule.bin new file mode 100644 index 000000000..a77168010 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/schedule.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/setting.bin b/code/sdk/files/w9/fs/user/res/applist_icon/setting.bin new file mode 100644 index 000000000..952c21a72 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/setting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/sleeping.bin b/code/sdk/files/w9/fs/user/res/applist_icon/sleeping.bin new file mode 100644 index 000000000..8d9440aee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/sleeping.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/smart.bin b/code/sdk/files/w9/fs/user/res/applist_icon/smart.bin new file mode 100644 index 000000000..713af0f2c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/smart.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/sport.bin b/code/sdk/files/w9/fs/user/res/applist_icon/sport.bin new file mode 100644 index 000000000..6b6b97c45 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/sport.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/stress.bin b/code/sdk/files/w9/fs/user/res/applist_icon/stress.bin new file mode 100644 index 000000000..c883a6c51 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/stress.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/theme.bin b/code/sdk/files/w9/fs/user/res/applist_icon/theme.bin new file mode 100644 index 000000000..b6f6903d1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/theme.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/training.bin b/code/sdk/files/w9/fs/user/res/applist_icon/training.bin new file mode 100644 index 000000000..267101726 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/training.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/voice.bin b/code/sdk/files/w9/fs/user/res/applist_icon/voice.bin new file mode 100644 index 000000000..976cb6f2f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/voice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/applist_icon/weather.bin b/code/sdk/files/w9/fs/user/res/applist_icon/weather.bin new file mode 100644 index 000000000..d4b1f84f3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/applist_icon/weather.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant.bin new file mode 100644 index 000000000..e7c053e13 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_01.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_01.bin new file mode 100644 index 000000000..36b7c858f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_02.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_02.bin new file mode 100644 index 000000000..8bb7b5589 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_03.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_03.bin new file mode 100644 index 000000000..5b2ce8b98 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_04.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_04.bin new file mode 100644 index 000000000..442443839 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_05.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_05.bin new file mode 100644 index 000000000..67c9b9fd1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_06.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_06.bin new file mode 100644 index 000000000..3b3906fae Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_07.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_07.bin new file mode 100644 index 000000000..b1a731eea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_08.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_08.bin new file mode 100644 index 000000000..374dc49c8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_09.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_09.bin new file mode 100644 index 000000000..5198df1e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_10.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_10.bin new file mode 100644 index 000000000..e1f0f88c6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_11.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_11.bin new file mode 100644 index 000000000..43da933df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_12.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_12.bin new file mode 100644 index 000000000..eb2540e43 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_13.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_13.bin new file mode 100644 index 000000000..6d71317b0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_14.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_14.bin new file mode 100644 index 000000000..0866db557 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_15.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_15.bin new file mode 100644 index 000000000..a8fd17c3c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_16.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_16.bin new file mode 100644 index 000000000..93604e902 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_17.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_17.bin new file mode 100644 index 000000000..55c1e6e70 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_18.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_18.bin new file mode 100644 index 000000000..ca4f41466 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_19.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_19.bin new file mode 100644 index 000000000..1bb75ec71 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_20.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_20.bin new file mode 100644 index 000000000..2d3198d66 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_21.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_21.bin new file mode 100644 index 000000000..4065902d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_22.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_22.bin new file mode 100644 index 000000000..f5bfc44ca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_23.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_23.bin new file mode 100644 index 000000000..27e8c9a26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_24.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_24.bin new file mode 100644 index 000000000..01e8c9245 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_25.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_25.bin new file mode 100644 index 000000000..80f696572 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_26.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_26.bin new file mode 100644 index 000000000..ce9a4e1ad Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_27.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_27.bin new file mode 100644 index 000000000..29ca1b738 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_28.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_28.bin new file mode 100644 index 000000000..59c377b58 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_29.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_29.bin new file mode 100644 index 000000000..e60b0b9ce Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_30.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_30.bin new file mode 100644 index 000000000..8073c86c2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_31.bin b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_31.bin new file mode 100644 index 000000000..b34cd66c0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/assistant/assistant_gif/assistant_31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/1.bin b/code/sdk/files/w9/fs/user/res/connect/1.bin new file mode 100644 index 000000000..b8ea06f4a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/10.bin b/code/sdk/files/w9/fs/user/res/connect/10.bin new file mode 100644 index 000000000..37e1433d2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/11.bin b/code/sdk/files/w9/fs/user/res/connect/11.bin new file mode 100644 index 000000000..ab6c42baa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/12.bin b/code/sdk/files/w9/fs/user/res/connect/12.bin new file mode 100644 index 000000000..832c4fada Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/13.bin b/code/sdk/files/w9/fs/user/res/connect/13.bin new file mode 100644 index 000000000..ef3fa72a7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/14.bin b/code/sdk/files/w9/fs/user/res/connect/14.bin new file mode 100644 index 000000000..e92650386 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/15.bin b/code/sdk/files/w9/fs/user/res/connect/15.bin new file mode 100644 index 000000000..f9f1fb024 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/16.bin b/code/sdk/files/w9/fs/user/res/connect/16.bin new file mode 100644 index 000000000..90ee32f71 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/17.bin b/code/sdk/files/w9/fs/user/res/connect/17.bin new file mode 100644 index 000000000..d22d5812e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/18.bin b/code/sdk/files/w9/fs/user/res/connect/18.bin new file mode 100644 index 000000000..1b00c6b36 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/19.bin b/code/sdk/files/w9/fs/user/res/connect/19.bin new file mode 100644 index 000000000..ba7fa1f02 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/2.bin b/code/sdk/files/w9/fs/user/res/connect/2.bin new file mode 100644 index 000000000..134cdf40c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/20.bin b/code/sdk/files/w9/fs/user/res/connect/20.bin new file mode 100644 index 000000000..795d2f2f9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/21.bin b/code/sdk/files/w9/fs/user/res/connect/21.bin new file mode 100644 index 000000000..62e081119 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/22.bin b/code/sdk/files/w9/fs/user/res/connect/22.bin new file mode 100644 index 000000000..190ba4b33 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/23.bin b/code/sdk/files/w9/fs/user/res/connect/23.bin new file mode 100644 index 000000000..e699b2ed7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/24.bin b/code/sdk/files/w9/fs/user/res/connect/24.bin new file mode 100644 index 000000000..1aa03972b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/25.bin b/code/sdk/files/w9/fs/user/res/connect/25.bin new file mode 100644 index 000000000..bfcb401e5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/26.bin b/code/sdk/files/w9/fs/user/res/connect/26.bin new file mode 100644 index 000000000..ceb749a21 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/27.bin b/code/sdk/files/w9/fs/user/res/connect/27.bin new file mode 100644 index 000000000..2996d5905 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/28.bin b/code/sdk/files/w9/fs/user/res/connect/28.bin new file mode 100644 index 000000000..a112217d8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/29.bin b/code/sdk/files/w9/fs/user/res/connect/29.bin new file mode 100644 index 000000000..421d73be0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/3.bin b/code/sdk/files/w9/fs/user/res/connect/3.bin new file mode 100644 index 000000000..8a2443ca6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/30.bin b/code/sdk/files/w9/fs/user/res/connect/30.bin new file mode 100644 index 000000000..0d3928db9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/31.bin b/code/sdk/files/w9/fs/user/res/connect/31.bin new file mode 100644 index 000000000..42a555a33 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/32.bin b/code/sdk/files/w9/fs/user/res/connect/32.bin new file mode 100644 index 000000000..d39e56c75 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/33.bin b/code/sdk/files/w9/fs/user/res/connect/33.bin new file mode 100644 index 000000000..385ca7200 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/34.bin b/code/sdk/files/w9/fs/user/res/connect/34.bin new file mode 100644 index 000000000..943399a4c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/35.bin b/code/sdk/files/w9/fs/user/res/connect/35.bin new file mode 100644 index 000000000..8d8972ca9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/36.bin b/code/sdk/files/w9/fs/user/res/connect/36.bin new file mode 100644 index 000000000..9a660d8aa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/37.bin b/code/sdk/files/w9/fs/user/res/connect/37.bin new file mode 100644 index 000000000..83cd7a0a2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/38.bin b/code/sdk/files/w9/fs/user/res/connect/38.bin new file mode 100644 index 000000000..cbb2d2d41 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/39.bin b/code/sdk/files/w9/fs/user/res/connect/39.bin new file mode 100644 index 000000000..8f18bb71f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/4.bin b/code/sdk/files/w9/fs/user/res/connect/4.bin new file mode 100644 index 000000000..7f714137c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/40.bin b/code/sdk/files/w9/fs/user/res/connect/40.bin new file mode 100644 index 000000000..cf56194df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/41.bin b/code/sdk/files/w9/fs/user/res/connect/41.bin new file mode 100644 index 000000000..375a75190 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/41.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/42.bin b/code/sdk/files/w9/fs/user/res/connect/42.bin new file mode 100644 index 000000000..f40b8b79a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/42.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/43.bin b/code/sdk/files/w9/fs/user/res/connect/43.bin new file mode 100644 index 000000000..50a0fbe9a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/43.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/44.bin b/code/sdk/files/w9/fs/user/res/connect/44.bin new file mode 100644 index 000000000..34a3d1d37 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/44.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/45.bin b/code/sdk/files/w9/fs/user/res/connect/45.bin new file mode 100644 index 000000000..5a238dfc0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/45.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/46.bin b/code/sdk/files/w9/fs/user/res/connect/46.bin new file mode 100644 index 000000000..af0c81003 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/46.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/47.bin b/code/sdk/files/w9/fs/user/res/connect/47.bin new file mode 100644 index 000000000..92cbfb01b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/47.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/48.bin b/code/sdk/files/w9/fs/user/res/connect/48.bin new file mode 100644 index 000000000..c013ee99d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/48.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/49.bin b/code/sdk/files/w9/fs/user/res/connect/49.bin new file mode 100644 index 000000000..6634654cd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/49.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/5.bin b/code/sdk/files/w9/fs/user/res/connect/5.bin new file mode 100644 index 000000000..995fd13ec Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/50.bin b/code/sdk/files/w9/fs/user/res/connect/50.bin new file mode 100644 index 000000000..b482c6dd7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/50.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/51.bin b/code/sdk/files/w9/fs/user/res/connect/51.bin new file mode 100644 index 000000000..219a745f7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/51.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/52.bin b/code/sdk/files/w9/fs/user/res/connect/52.bin new file mode 100644 index 000000000..9d5478d66 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/52.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/53.bin b/code/sdk/files/w9/fs/user/res/connect/53.bin new file mode 100644 index 000000000..a89d60ed7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/53.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/54.bin b/code/sdk/files/w9/fs/user/res/connect/54.bin new file mode 100644 index 000000000..01ce8ac0f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/55.bin b/code/sdk/files/w9/fs/user/res/connect/55.bin new file mode 100644 index 000000000..7f199a35b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/55.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/56.bin b/code/sdk/files/w9/fs/user/res/connect/56.bin new file mode 100644 index 000000000..8bd4b2a4b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/56.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/57.bin b/code/sdk/files/w9/fs/user/res/connect/57.bin new file mode 100644 index 000000000..1d068f4ae Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/57.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/58.bin b/code/sdk/files/w9/fs/user/res/connect/58.bin new file mode 100644 index 000000000..b245412a9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/58.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/59.bin b/code/sdk/files/w9/fs/user/res/connect/59.bin new file mode 100644 index 000000000..2c0dd0714 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/59.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/6.bin b/code/sdk/files/w9/fs/user/res/connect/6.bin new file mode 100644 index 000000000..4574c0f24 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/60.bin b/code/sdk/files/w9/fs/user/res/connect/60.bin new file mode 100644 index 000000000..bd9ef11fa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/7.bin b/code/sdk/files/w9/fs/user/res/connect/7.bin new file mode 100644 index 000000000..007fbbca2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/8.bin b/code/sdk/files/w9/fs/user/res/connect/8.bin new file mode 100644 index 000000000..65ffac62f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/connect/9.bin b/code/sdk/files/w9/fs/user/res/connect/9.bin new file mode 100644 index 000000000..8acfb3eb4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/connect/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_END.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_END.bin new file mode 100644 index 000000000..85ed573cf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_END.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin new file mode 100644 index 000000000..87c18748a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PAUSE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PLAY.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PLAY.bin new file mode 100644 index 000000000..97b64f812 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_PLAY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_RESET.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_RESET.bin new file mode 100644 index 000000000..2d3105e7d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_RESET.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin new file mode 100644 index 000000000..ff8eb2dbd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_TIMER_ICON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin new file mode 100644 index 000000000..40be9d194 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWM_VECTOR.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWN_COLONE.bin b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWN_COLONE.bin new file mode 100644 index 000000000..f3d90d91f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/COUNTDOWN_COLONE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/Vector_Big.bin b/code/sdk/files/w9/fs/user/res/countdown/Vector_Big.bin new file mode 100644 index 000000000..d569231c8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/Vector_Big.bin differ diff --git a/code/sdk/files/w9/fs/user/res/countdown/repeat_button.bin b/code/sdk/files/w9/fs/user/res/countdown/repeat_button.bin new file mode 100644 index 000000000..2d3105e7d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/countdown/repeat_button.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/KUMI.bin b/code/sdk/files/w9/fs/user/res/dial_soures/KUMI.bin new file mode 100644 index 000000000..982845bf5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/KUMI.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/KUMIVIEW.bin b/code/sdk/files/w9/fs/user/res/dial_soures/KUMIVIEW.bin new file mode 100644 index 000000000..5532379ee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/KUMIVIEW.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin b/code/sdk/files/w9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin new file mode 100644 index 000000000..350fed251 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/MAIN_FACE_IMAGE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/background.bin b/code/sdk/files/w9/fs/user/res/dial_soures/background.bin new file mode 100644 index 000000000..1469df65f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/background.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/main_bg.bin b/code/sdk/files/w9/fs/user/res/dial_soures/main_bg.bin new file mode 100644 index 000000000..8c7778a08 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/main_bg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_soures/thumbnail.bin b/code/sdk/files/w9/fs/user/res/dial_soures/thumbnail.bin new file mode 100644 index 000000000..8b2ca7342 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_soures/thumbnail.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_state/disturbicon.bin b/code/sdk/files/w9/fs/user/res/dial_state/disturbicon.bin new file mode 100644 index 000000000..387118cab Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_state/disturbicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_state/lock.bin b/code/sdk/files/w9/fs/user/res/dial_state/lock.bin new file mode 100644 index 000000000..f272ad8e5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_state/lock.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_state/sleep.bin b/code/sdk/files/w9/fs/user/res/dial_state/sleep.bin new file mode 100644 index 000000000..bedbeb8d5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_state/sleep.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dial_state/unread.bin b/code/sdk/files/w9/fs/user/res/dial_state/unread.bin new file mode 100644 index 000000000..da64bdc7c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dial_state/unread.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/1.bin b/code/sdk/files/w9/fs/user/res/down/1.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/10.bin b/code/sdk/files/w9/fs/user/res/down/10.bin new file mode 100644 index 000000000..8dc49d6fe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/11.bin b/code/sdk/files/w9/fs/user/res/down/11.bin new file mode 100644 index 000000000..8c6a7cbdb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/12.bin b/code/sdk/files/w9/fs/user/res/down/12.bin new file mode 100644 index 000000000..c887ac0c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/13.bin b/code/sdk/files/w9/fs/user/res/down/13.bin new file mode 100644 index 000000000..a841d7702 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/14.bin b/code/sdk/files/w9/fs/user/res/down/14.bin new file mode 100644 index 000000000..2bb520fb1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/15.bin b/code/sdk/files/w9/fs/user/res/down/15.bin new file mode 100644 index 000000000..58101646f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/16.bin b/code/sdk/files/w9/fs/user/res/down/16.bin new file mode 100644 index 000000000..e184bc195 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/17.bin b/code/sdk/files/w9/fs/user/res/down/17.bin new file mode 100644 index 000000000..a9691d22c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/18.bin b/code/sdk/files/w9/fs/user/res/down/18.bin new file mode 100644 index 000000000..25e4e9486 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/19.bin b/code/sdk/files/w9/fs/user/res/down/19.bin new file mode 100644 index 000000000..be47b3da5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/2.bin b/code/sdk/files/w9/fs/user/res/down/2.bin new file mode 100644 index 000000000..be739815b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/20.bin b/code/sdk/files/w9/fs/user/res/down/20.bin new file mode 100644 index 000000000..467d8c1a1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/21.bin b/code/sdk/files/w9/fs/user/res/down/21.bin new file mode 100644 index 000000000..a65fecc7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/22.bin b/code/sdk/files/w9/fs/user/res/down/22.bin new file mode 100644 index 000000000..c1b706938 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/23.bin b/code/sdk/files/w9/fs/user/res/down/23.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/24.bin b/code/sdk/files/w9/fs/user/res/down/24.bin new file mode 100644 index 000000000..d720c8260 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/3.bin b/code/sdk/files/w9/fs/user/res/down/3.bin new file mode 100644 index 000000000..02baeddfb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/4.bin b/code/sdk/files/w9/fs/user/res/down/4.bin new file mode 100644 index 000000000..ff0bd976f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/5.bin b/code/sdk/files/w9/fs/user/res/down/5.bin new file mode 100644 index 000000000..72dd45fc3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/6.bin b/code/sdk/files/w9/fs/user/res/down/6.bin new file mode 100644 index 000000000..cbbccb498 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/7.bin b/code/sdk/files/w9/fs/user/res/down/7.bin new file mode 100644 index 000000000..b62f089a3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/8.bin b/code/sdk/files/w9/fs/user/res/down/8.bin new file mode 100644 index 000000000..79cb70251 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/down/9.bin b/code/sdk/files/w9/fs/user/res/down/9.bin new file mode 100644 index 000000000..745099b44 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/down/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/drinkReminder/DrinkReminder.bin b/code/sdk/files/w9/fs/user/res/drinkReminder/DrinkReminder.bin new file mode 100644 index 000000000..fd3b4eae0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/drinkReminder/DrinkReminder.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin new file mode 100644 index 000000000..dc42228a7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin new file mode 100644 index 000000000..b0672f332 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_4G_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin new file mode 100644 index 000000000..766920684 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_ALIPAY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin new file mode 100644 index 000000000..57b12686d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin new file mode 100644 index 000000000..97df05bfa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT.bin new file mode 100644 index 000000000..e0978030c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin new file mode 100644 index 000000000..20ca20564 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_CONNECT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin new file mode 100644 index 000000000..e806a2ca6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin new file mode 100644 index 000000000..1f10216fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin new file mode 100644 index 000000000..1c159b708 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin new file mode 100644 index 000000000..e263427a6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin new file mode 100644 index 000000000..2ab029386 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin new file mode 100644 index 000000000..50b7c157f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_FINDPHONE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_HD.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_HD.bin new file mode 100644 index 000000000..2f8fa0cd7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_HD.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin new file mode 100644 index 000000000..fd14a2422 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LIGHTING.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LINE.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LINE.bin new file mode 100644 index 000000000..7b0ca25b4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_LINE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin new file mode 100644 index 000000000..d215fec3b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin new file mode 100644 index 000000000..6c2d33048 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_NOSIGNAL.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin new file mode 100644 index 000000000..007019247 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin new file mode 100644 index 000000000..4548053a2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin new file mode 100644 index 000000000..fa7de75ae Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin new file mode 100644 index 000000000..9890c4e77 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin new file mode 100644 index 000000000..f6b2ba234 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin new file mode 100644 index 000000000..f4dd0fe4e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SELECT_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SETTING.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SETTING.bin new file mode 100644 index 000000000..c89f3fd70 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SETTING.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin new file mode 100644 index 000000000..8e8136926 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin new file mode 100644 index 000000000..5af99761e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/DROPDOWN_SLEEP_ON.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_connect.bin b/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_connect.bin new file mode 100644 index 000000000..e1bc5caf0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_connect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_disconnect.bin b/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_disconnect.bin new file mode 100644 index 000000000..f4e82052e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/bluetooth_disconnect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/earphones_connect.bin b/code/sdk/files/w9/fs/user/res/dropdown/earphones_connect.bin new file mode 100644 index 000000000..2a378f49c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/earphones_connect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/earphones_disconnect.bin b/code/sdk/files/w9/fs/user/res/dropdown/earphones_disconnect.bin new file mode 100644 index 000000000..06f2aaa7c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/earphones_disconnect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/phone_connect.bin b/code/sdk/files/w9/fs/user/res/dropdown/phone_connect.bin new file mode 100644 index 000000000..e0e1731bc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/phone_connect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/dropdown/phone_disconnect.bin b/code/sdk/files/w9/fs/user/res/dropdown/phone_disconnect.bin new file mode 100644 index 000000000..09044bf6e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/dropdown/phone_disconnect.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/1.bin b/code/sdk/files/w9/fs/user/res/findphone/1.bin new file mode 100644 index 000000000..2273cd870 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/10.bin b/code/sdk/files/w9/fs/user/res/findphone/10.bin new file mode 100644 index 000000000..f93d75014 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/11.bin b/code/sdk/files/w9/fs/user/res/findphone/11.bin new file mode 100644 index 000000000..df46946e5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/12.bin b/code/sdk/files/w9/fs/user/res/findphone/12.bin new file mode 100644 index 000000000..2d344f8b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/13.bin b/code/sdk/files/w9/fs/user/res/findphone/13.bin new file mode 100644 index 000000000..b447b41c3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/14.bin b/code/sdk/files/w9/fs/user/res/findphone/14.bin new file mode 100644 index 000000000..a4120b569 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/15.bin b/code/sdk/files/w9/fs/user/res/findphone/15.bin new file mode 100644 index 000000000..64c4bdf0f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/16.bin b/code/sdk/files/w9/fs/user/res/findphone/16.bin new file mode 100644 index 000000000..f8b169000 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/17.bin b/code/sdk/files/w9/fs/user/res/findphone/17.bin new file mode 100644 index 000000000..5e04ef8ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/18.bin b/code/sdk/files/w9/fs/user/res/findphone/18.bin new file mode 100644 index 000000000..3cd8ff5f0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/19.bin b/code/sdk/files/w9/fs/user/res/findphone/19.bin new file mode 100644 index 000000000..b1a06a562 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/2.bin b/code/sdk/files/w9/fs/user/res/findphone/2.bin new file mode 100644 index 000000000..f09d2d7c3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/20.bin b/code/sdk/files/w9/fs/user/res/findphone/20.bin new file mode 100644 index 000000000..3eb902dfc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/21.bin b/code/sdk/files/w9/fs/user/res/findphone/21.bin new file mode 100644 index 000000000..9f4c54121 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/22.bin b/code/sdk/files/w9/fs/user/res/findphone/22.bin new file mode 100644 index 000000000..911bc6461 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/23.bin b/code/sdk/files/w9/fs/user/res/findphone/23.bin new file mode 100644 index 000000000..481371bf8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/24.bin b/code/sdk/files/w9/fs/user/res/findphone/24.bin new file mode 100644 index 000000000..70d5a3620 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/25.bin b/code/sdk/files/w9/fs/user/res/findphone/25.bin new file mode 100644 index 000000000..140ead0ba Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/26.bin b/code/sdk/files/w9/fs/user/res/findphone/26.bin new file mode 100644 index 000000000..70a6edcca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/27.bin b/code/sdk/files/w9/fs/user/res/findphone/27.bin new file mode 100644 index 000000000..24ab75d7f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/28.bin b/code/sdk/files/w9/fs/user/res/findphone/28.bin new file mode 100644 index 000000000..e5c286ba1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/29.bin b/code/sdk/files/w9/fs/user/res/findphone/29.bin new file mode 100644 index 000000000..92299243e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/3.bin b/code/sdk/files/w9/fs/user/res/findphone/3.bin new file mode 100644 index 000000000..1802ec1eb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/30.bin b/code/sdk/files/w9/fs/user/res/findphone/30.bin new file mode 100644 index 000000000..00a693c30 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/31.bin b/code/sdk/files/w9/fs/user/res/findphone/31.bin new file mode 100644 index 000000000..23fb37373 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/32.bin b/code/sdk/files/w9/fs/user/res/findphone/32.bin new file mode 100644 index 000000000..17de93c05 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/33.bin b/code/sdk/files/w9/fs/user/res/findphone/33.bin new file mode 100644 index 000000000..bfa8f9b3d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/34.bin b/code/sdk/files/w9/fs/user/res/findphone/34.bin new file mode 100644 index 000000000..d022b510e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/35.bin b/code/sdk/files/w9/fs/user/res/findphone/35.bin new file mode 100644 index 000000000..fa67d6b6a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/36.bin b/code/sdk/files/w9/fs/user/res/findphone/36.bin new file mode 100644 index 000000000..c5966a954 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/37.bin b/code/sdk/files/w9/fs/user/res/findphone/37.bin new file mode 100644 index 000000000..d945f94cb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/38.bin b/code/sdk/files/w9/fs/user/res/findphone/38.bin new file mode 100644 index 000000000..31ae7aa65 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/39.bin b/code/sdk/files/w9/fs/user/res/findphone/39.bin new file mode 100644 index 000000000..cee47b3f6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/4.bin b/code/sdk/files/w9/fs/user/res/findphone/4.bin new file mode 100644 index 000000000..04d569552 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/40.bin b/code/sdk/files/w9/fs/user/res/findphone/40.bin new file mode 100644 index 000000000..e305830af Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/41.bin b/code/sdk/files/w9/fs/user/res/findphone/41.bin new file mode 100644 index 000000000..0fe61b708 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/41.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/42.bin b/code/sdk/files/w9/fs/user/res/findphone/42.bin new file mode 100644 index 000000000..d3bcc47dd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/42.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/43.bin b/code/sdk/files/w9/fs/user/res/findphone/43.bin new file mode 100644 index 000000000..c1806abb3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/43.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/44.bin b/code/sdk/files/w9/fs/user/res/findphone/44.bin new file mode 100644 index 000000000..9dea25e9c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/44.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/45.bin b/code/sdk/files/w9/fs/user/res/findphone/45.bin new file mode 100644 index 000000000..a84a93cce Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/45.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/46.bin b/code/sdk/files/w9/fs/user/res/findphone/46.bin new file mode 100644 index 000000000..5f7e4a65e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/46.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/47.bin b/code/sdk/files/w9/fs/user/res/findphone/47.bin new file mode 100644 index 000000000..13ce8d79c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/47.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/48.bin b/code/sdk/files/w9/fs/user/res/findphone/48.bin new file mode 100644 index 000000000..738841fa5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/48.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/49.bin b/code/sdk/files/w9/fs/user/res/findphone/49.bin new file mode 100644 index 000000000..bcb02d981 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/49.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/5.bin b/code/sdk/files/w9/fs/user/res/findphone/5.bin new file mode 100644 index 000000000..b8cba58f2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/50.bin b/code/sdk/files/w9/fs/user/res/findphone/50.bin new file mode 100644 index 000000000..765673b85 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/50.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/6.bin b/code/sdk/files/w9/fs/user/res/findphone/6.bin new file mode 100644 index 000000000..557684390 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/7.bin b/code/sdk/files/w9/fs/user/res/findphone/7.bin new file mode 100644 index 000000000..cf9250d24 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/8.bin b/code/sdk/files/w9/fs/user/res/findphone/8.bin new file mode 100644 index 000000000..9da6f900e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/findphone/9.bin b/code/sdk/files/w9/fs/user/res/findphone/9.bin new file mode 100644 index 000000000..ad40414c7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/findphone/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/Flashlight.bin b/code/sdk/files/w9/fs/user/res/flashlight/Flashlight.bin new file mode 100644 index 000000000..92982c34a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/Flashlight.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_0.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_0.bin new file mode 100644 index 000000000..9acd6841d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_0.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_1.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_1.bin new file mode 100644 index 000000000..d6220951a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_2.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_2.bin new file mode 100644 index 000000000..96446e692 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_3.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_3.bin new file mode 100644 index 000000000..89282c996 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_4.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_4.bin new file mode 100644 index 000000000..accc7a674 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_5.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_5.bin new file mode 100644 index 000000000..2a68cb9e2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_6.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_6.bin new file mode 100644 index 000000000..b85617724 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_custom_bg.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_custom_bg.bin new file mode 100644 index 000000000..7e9b4b856 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_custom_bg.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_custom_selected.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_custom_selected.bin new file mode 100644 index 000000000..47888e1ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_custom_selected.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_selected.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_selected.bin new file mode 100644 index 000000000..591ebcef1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_selected.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/color_setting.bin b/code/sdk/files/w9/fs/user/res/flashlight/color_setting.bin new file mode 100644 index 000000000..5a02b1e1c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/color_setting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/flahing_setting.bin b/code/sdk/files/w9/fs/user/res/flashlight/flahing_setting.bin new file mode 100644 index 000000000..7153ae7fb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/flahing_setting.bin differ diff --git a/code/sdk/files/w9/fs/user/res/flashlight/up_arrow.bin b/code/sdk/files/w9/fs/user/res/flashlight/up_arrow.bin new file mode 100644 index 000000000..cef9678a4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/flashlight/up_arrow.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font/ar.lang b/code/sdk/files/w9/fs/user/res/font/ar.lang new file mode 100644 index 000000000..0f0e3415b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ar.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/az.lang b/code/sdk/files/w9/fs/user/res/font/az.lang new file mode 100644 index 000000000..76985f369 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/az.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/cs.lang b/code/sdk/files/w9/fs/user/res/font/cs.lang new file mode 100644 index 000000000..a5b0c52b0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/cs.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/de.lang b/code/sdk/files/w9/fs/user/res/font/de.lang new file mode 100644 index 000000000..78a86a991 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/de.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/el.lang b/code/sdk/files/w9/fs/user/res/font/el.lang new file mode 100644 index 000000000..94fdcdf3c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/el.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/en.lang b/code/sdk/files/w9/fs/user/res/font/en.lang new file mode 100644 index 000000000..441b55529 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/en.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/es.lang b/code/sdk/files/w9/fs/user/res/font/es.lang new file mode 100644 index 000000000..110fc4881 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/es.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/fa.lang b/code/sdk/files/w9/fs/user/res/font/fa.lang new file mode 100644 index 000000000..06dffe9f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/fa.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/fi.lang b/code/sdk/files/w9/fs/user/res/font/fi.lang new file mode 100644 index 000000000..973c9ca18 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/fi.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/fr.lang b/code/sdk/files/w9/fs/user/res/font/fr.lang new file mode 100644 index 000000000..7155f8720 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/fr.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/he.lang b/code/sdk/files/w9/fs/user/res/font/he.lang new file mode 100644 index 000000000..cbf17478e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/he.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/hi.lang b/code/sdk/files/w9/fs/user/res/font/hi.lang new file mode 100644 index 000000000..834c4833a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/hi.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/hr.lang b/code/sdk/files/w9/fs/user/res/font/hr.lang new file mode 100644 index 000000000..fa9fc66e8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/hr.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/id.lang b/code/sdk/files/w9/fs/user/res/font/id.lang new file mode 100644 index 000000000..fca02336f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/id.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/it.lang b/code/sdk/files/w9/fs/user/res/font/it.lang new file mode 100644 index 000000000..62ab8f936 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/it.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ja.lang b/code/sdk/files/w9/fs/user/res/font/ja.lang new file mode 100644 index 000000000..6a718d6ea Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ja.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ko.lang b/code/sdk/files/w9/fs/user/res/font/ko.lang new file mode 100644 index 000000000..14303ba5a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ko.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ms.lang b/code/sdk/files/w9/fs/user/res/font/ms.lang new file mode 100644 index 000000000..17f04c6b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ms.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/nl.lang b/code/sdk/files/w9/fs/user/res/font/nl.lang new file mode 100644 index 000000000..11d72318a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/nl.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/pl.lang b/code/sdk/files/w9/fs/user/res/font/pl.lang new file mode 100644 index 000000000..8bbce9a02 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/pl.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/pt.lang b/code/sdk/files/w9/fs/user/res/font/pt.lang new file mode 100644 index 000000000..06fa00b2c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/pt.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ro.lang b/code/sdk/files/w9/fs/user/res/font/ro.lang new file mode 100644 index 000000000..5cfefd79b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ro.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ru.lang b/code/sdk/files/w9/fs/user/res/font/ru.lang new file mode 100644 index 000000000..0772c8826 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/ru.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/sv.lang b/code/sdk/files/w9/fs/user/res/font/sv.lang new file mode 100644 index 000000000..4d99b7bd9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/sv.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/th.lang b/code/sdk/files/w9/fs/user/res/font/th.lang new file mode 100644 index 000000000..fcc7083f0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/th.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/tr.lang b/code/sdk/files/w9/fs/user/res/font/tr.lang new file mode 100644 index 000000000..a122977c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/tr.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/ui_resource_string.h b/code/sdk/files/w9/fs/user/res/font/ui_resource_string.h new file mode 100644 index 000000000..2e7c9569d --- /dev/null +++ b/code/sdk/files/w9/fs/user/res/font/ui_resource_string.h @@ -0,0 +1,750 @@ +/* +* Copyright (c) xxxxxxxx Technologies Co., Ltd. 2021-2021. All rights reserved. +* Description: language +* Author: Graphic develop team +* Create: 2021-07-06 +*/ + +#ifndef UI_RESOURCE_STRING_H +#define UI_RESOURCE_STRING_H +#include +namespace OHOS { +enum UIResourceTextId : uint16_t { + STR_EXERCISE_OUTDOORWALKING = 0, + STR_EXERCISE_OUTDOORRUNNING = 1, + STR_EXERCISE_OUTDOORBIKING = 2, + STR_EXERCISE_GENERAL = 3, + STR_EXERCISE_FREETRAINING = 4, + STR_EXERCISE_RESISTANCETRAINING = 5, + STR_EXERCISE_SPINBIKE = 6, + STR_EXERCISE_TREADMILL = 7, + STR_EXERCISE_STROLLMACHINE = 8, + STR_EXERCISE_HIIT = 9, + STR_EXERCISE_CROSSFIT = 10, + STR_EXERCISE_GROUPCALISTHENICS = 11, + STR_EXERCISE_YOGA = 12, + STR_EXERCISE_YOGACAT = 13, + STR_EXERCISE_YOGACOW = 14, + STR_EXERCISE_YOGACOBRA = 15, + STR_EXERCISE_YOGAHERO1 = 16, + STR_EXERCISE_YOGAHERO2 = 17, + STR_EXERCISE_YOGAHERO3 = 18, + STR_EXERCISE_YOGAROLLING = 19, + STR_EXERCISE_INDOORWALKING = 20, + STR_EXERCISE_INDOORRUNNING = 21, + STR_EXERCISE_JUMPINGROPE = 22, + STR_EXERCISE_PILATES = 23, + STR_EXERCISE_CROSS_FIT = 24, + STR_EXERCISE_FUNCTIONALTRAINING = 25, + STR_EXERCISE_PHYSICALTRAINING = 26, + STR_EXERCISE_TAEKWONDO = 27, + STR_EXERCISE_BOXING = 28, + STR_EXERCISE_KICKBOXING = 29, + STR_EXERCISE_KARATE = 30, + STR_EXERCISE_FENCING = 31, + STR_EXERCISE_CORETRAINING = 32, + STR_EXERCISE_BODYCOMBAT = 33, + STR_EXERCISE_KENDO = 34, + STR_EXERCISE_HORIZONTALBAR = 35, + STR_EXERCISE_PARALLELBARS = 36, + STR_EXERCISE_CIRCUIT = 37, + STR_EXERCISE_AEROBICS = 38, + STR_EXERCISE_CALISTHENICE = 39, + STR_EXERCISE_P90X = 40, + STR_EXERCISE_KETTLEBELLTRAINING = 41, + STR_EXERCISE_MIXEDMARTIALARTS = 42, + STR_EXERCISE_STAIRCLIMBINGMACHINE = 43, + STR_EXERCISE_WEIGHTLIFTING = 44, + STR_EXERCISE_BARRE = 45, + STR_EXERCISE_HANDCYCLING = 46, + STR_EXERCISE_TRACKFIELD = 47, + STR_EXERCISE_WRESTLING = 48, + STR_EXERCISE_MINDBODY = 49, + STR_EXERCISE_FLEXIBILITY = 50, + STR_EXERCISE_MIXEDCARDIO = 51, + STR_EXERCISE_TRADITIONALSTRENGTHTRAINING = 52, + STR_EXERCISE_CROSSTRAINING = 53, + STR_EXERCISE_GYMNASTICS = 54, + STR_EXERCISE_STEPTRAINING = 55, + STR_EXERCISE_ELLIPTICALTRAINER = 56, + STR_EXERCISE_ROWINGMACHINE = 57, + STR_DANCING_GENERAL = 58, + STR_DANCING_BELLY = 59, + STR_DANCING_JAZZ = 60, + STR_DANCING_LATIN = 61, + STR_DANCING_BALLET = 62, + STR_DANCING_STREET = 63, + STR_DANCING_PUBLICSQUARE = 64, + STR_DANCING_ZUMBA = 65, + STR_DANCING_SOCIALDANCE = 66, + STR_DANCING_TAPDANCE = 67, + STR_RECREATIONAL_SPORTS = 68, + STR_RECREATIONAL_SKATING = 69, + STR_RECREATIONAL_MARTIALARTS = 70, + STR_RECREATIONAL_TAICHI = 71, + STR_RECREATIONAL_HULAHOOP = 72, + STR_RECREATIONAL_DISCSPORT = 73, + STR_RECREATIONAL_DARTS = 74, + STR_RECREATIONAL_ARCHERY = 75, + STR_RECREATIONAL_HORSERIDING = 76, + STR_RECREATIONAL_BATTLEGAME = 77, + STR_RECREATIONAL_KITE = 78, + STR_RECREATIONAL_TUGOFWAR = 79, + STR_RECREATIONAL_SWING = 80, + STR_RECREATIONAL_STAIRCLIMBING = 81, + STR_RECREATIONAL_OBSTACLERACE = 82, + STR_RECREATIONAL_FISHING = 83, + STR_RECREATIONAL_HUNTING = 84, + STR_RECREATIONAL_SCOOTERRIDING = 85, + STR_RECREATIONAL_PARAGLIDING = 86, + STR_RECREATIONAL_TEAMSPORTS = 87, + STR_RECREATIONAL_FINESSGAMING = 88, + STR_RECREATIONAL_HIKING = 89, + STR_RECREATIONAL_EQUESTRIANSPORTS = 90, + STR_RECREATIONAL_PLAY = 91, + STR_BALL_GAMES = 92, + STR_BALL_BADMINTON = 93, + STR_BALL_TABLETENNIS = 94, + STR_BALL_TENNIS = 95, + STR_BALL_BILLIARDS = 96, + STR_BALL_BOWLING = 97, + STR_BALL_VOLLEYBALL = 98, + STR_BALL_SHUTTLECOCK = 99, + STR_BALL_HANDBALL = 100, + STR_BALL_BASEBALL = 101, + STR_BALL_SOFTBALL = 102, + STR_BALL_CRICKET = 103, + STR_BALL_FOOTBALL = 104, + STR_BALL_BEACHSOCCER = 105, + STR_BALL_BEACHVOLLEYBALL = 106, + STR_BALL_CROQUET = 107, + STR_BALL_HOCKEY = 108, + STR_BALL_SQUASH = 109, + STR_BALL_SEPAKTAKRAW = 110, + STR_BALL_DODGEBALL = 111, + STR_BALL_BASKETBALL = 112, + STR_BALL_SOCCER = 113, + STR_BALL_GOLF = 114, + STR_BALL_POLO = 115, + STR_BALL_RACQUETBALL = 116, + STR_BALL_RUGBY = 117, + STR_BALL_GATEBALL = 118, + STR_BALL_PICKLEBALL = 119, + STR_BALL_LACROSSE = 120, + STR_WATER_ACTIVITIES = 121, + STR_WATER_SAILING = 122, + STR_WATER_SURFING = 123, + STR_WATER_WHITEWATERRAFTING = 124, + STR_WATER_CANOEING = 125, + STR_WATER_KAYAKING = 126, + STR_WATER_ROWING = 127, + STR_WATER_MOTORBOAT = 128, + STR_WATER_SUP = 129, + STR_WATER_SCUBADIVING = 130, + STR_WATER_DIVING = 131, + STR_WATER_KITESURFING = 132, + STR_WATER_WAKEBOARDING = 133, + STR_WATER_POLO = 134, + STR_WATER_WINDSURFING = 135, + STR_WATER_DRIFTING = 136, + STR_WATER_FITNESS = 137, + STR_WATER_SPORTS = 138, + STR_WATER_OUTDOORSWIM = 139, + STR_WATER_INDOORSWIM = 140, + STR_WATER_SWIMFREESTYLE = 141, + STR_WATER_SWIMBREASTSTROKE = 142, + STR_WATER_SWIMBACKSTROKE = 143, + STR_WATER_SWIMBUTTERFLY = 144, + STR_ICE_SPORTS = 145, + STR_ICE_SKATING = 146, + STR_ICE_HOCKEY = 147, + STR_ICE_CURLING = 148, + STR_ICE_SNOWMOBILING = 149, + STR_ICE_SLED = 150, + STR_ICE_BIATHLON = 151, + STR_ICE_CROSSCOUNTRYSKING = 152, + STR_ICE_SKIING = 153, + STR_ICE_SNOWBOARDING = 154, + STR_ICE_SNOWSHOEING = 155, + STR_ICE_SNOWSPORTS = 156, + STR_EXTREME_SPORTS = 157, + STR_EXTREME_SKATEBOARDING = 158, + STR_EXTREME_ROCKCLIMBING = 159, + STR_EXTREME_BUNGEEJUMPING = 160, + STR_EXTREME_PARKOUR = 161, + STR_EXTREME_BMX = 162, + STR_EXTREME_ORIENTEERING = 163, + STR_EXTREME_PARACHUTE = 164, + STR_EXTREME_RACING = 165, + STR_EXTREME_TRIATHLONS = 166, + STR_OTHER_ELEVATOR = 167, + STR_OTHER_ESCALATOR = 168, + STR_OTHER_GARDENING = 169, + STR_OTHER_HORSEWORK = 170, + STR_OTHER_INVEHICLE = 171, + STR_OTHER_MEDITATION = 172, + STR_OTHER_STILL = 173, + STR_OTHER_TILTING = 174, + STR_OTHER_WHEELCHAIR = 175, + STR_HEART_RATE = 176, + STR_BLOOD_OXYGEN = 177, + STR_TRAINING = 178, + STR_TRAINING_RECORD = 179, + STR_COMPASS = 180, + STR_TELEPHONE = 181, + STR_FAVORITE_CONTACTS = 182, + STR_WEATHER = 183, + STR_ACTIVITY = 184, + STR_WATCH_FACE = 185, + STR_DISPLAY_MODE = 186, + STR_CARD_MANAGEMENT = 187, + STR_MUSIC = 188, + STR_SLEEP = 189, + STR_RECORD = 190, + STR_BREATH_TRAINING = 191, + STR_REMOTE_SHOOTING = 192, + STR_VOICE_ASSISTANT = 193, + STR_ALIPAY = 194, + STR_TIMER = 195, + STR_ALARM = 196, + STR_STOPWATCH = 197, + STR_CALCULATOR = 198, + STR_FIND_PHONE = 199, + STR_BRIGHTNESS_ADJUSTMENT = 200, + STR_SOUND = 201, + STR_BLUETOOTH = 202, + STR_DO_NOT_DISTURB = 203, + STR_MESSAGE_NOTIFICATION = 204, + STR_POWER_SAVE_MODE = 205, + STR_FLASHLIGHT = 206, + STR_SETTINGS = 207, + STR_EXERCISE_LIST = 208, + STR_BALL_LIST = 209, + STR_WATER_LIST = 210, + STR_DANCING_LIST = 211, + STR_EXTREME_LIST = 212, + STR_ICE_LIST = 213, + STR_RECREATIONAL_LIST = 214, + STR_OTHER_LIST = 215, + STR_DANCING_TITLE = 216, + STR_BALL_LIST_TITLE = 217, + STR_OTHER_TITLE = 218, + STR_EXERCISE_TITLE = 219, + STR_RAPID_TRAINING = 220, + STR_SET_GOALS = 221, + STR_DURATION = 222, + STR_DURATION_SETTING = 223, + STR_CALORIE = 224, + STR_CALORIE_SETTING = 225, + STR_DISTANCE = 226, + STR_RANGE_SETTING = 227, + STR_STEP_NUMBER = 228, + STR_STEP_SETTING = 229, + STR_HEART_RATE_SETTING = 230, + STR_MEAN_HEART_RATE = 231, + STR_TIMES_PER_MIN = 232, + STR_MEAN_HEART_RATE_MIN = 233, + STR_LOWER_STRENGTH = 234, + STR_MEDIUM_STRENGTH = 235, + STR_HIGH_STRENGTH = 236, + STR_ULTRA_HIGH_STRENGTH = 237, + STR_TRAINING_INTENSITY = 238, + STR_TRAINING_IN_PROGRESS = 239, + STR_BREAK_TRAINING = 240, + STR_FINISH = 241, + STR_PAUSE = 242, + STR_RESUME = 243, + STR_GOAL_ACHIEVED = 244, + STR_ACCOMPLISH_GOAL = 245, + STR_OK = 246, + STR_LOOK_OUT = 247, + STR_INSUFFICIENT_EXERCISE_AMOUNT = 248, + STR_END_MOVEMENT = 249, + STR_END_THIS_MOVEMENT = 250, + STR_GOAL_ACCOMPLISHMENT_DEGREE = 251, + STR_TRAINING_DURATION = 252, + STR_RANGE_MILE = 253, + STR_CLOSE = 254, + STR_MORE = 255, + STR_MORE_APP = 256, + STR_SAVENOTE = 257, + STR_SAVEBACK = 258, + STR_SAVEASK = 259, + STR_BLOOD = 260, + STR_CHECK = 261, + STR_CHECKNEW = 262, + STR_CHECKTIME = 263, + STR_CHECKLONG = 264, + STR_CHECKNO = 265, + STR_CHECKNOTE = 266, + STR_CHECKON = 267, + STR_CHECKSTOP = 268, + STR_CHECKERROR = 269, + STR_WAERKEEP = 270, + STR_WEARRE = 271, + STR_WEARREADY = 272, + STR_RECHECK = 273, + STR_CHECKEWARN = 274, + STR_BLOODSHORT = 275, + STR_HEARTNOTE = 276, + STR_KONW = 277, + STR_EXPLAIN = 278, + STR_HEARTREST = 279, + STR_HEARTDATA = 280, + STR_HEARTTITLE = 281, + STR_HEARTMAX = 282, + STR_HEARTMIN = 283, + STR_TRAINGNO = 284, + STR_TRAINGGO = 285, + STR_MESSAGENO = 286, + STR_CLEAN = 287, + STR_CLEANALL = 288, + STR_SLEEP_YESTERDAY = 289, + STR_HOUR = 290, + STR_MIN = 291, + STR_SLEEPMGOAL = 292, + STR_REATTIME = 293, + STR_SLEEPTIME = 294, + STR_WALKTIME = 295, + STR_APPMORE = 296, + STR_DISTURB = 297, + STR_DISTURBNOTE = 298, + STR_MORNNING = 299, + STR_NOW = 300, + STR_NAP = 301, + STR_TACK = 302, + STR_CLICK = 303, + STR_TACKNUM = 304, + STR_SCREEN_AND_BRIGHTNESS = 305, + STR_NETWORKANDCALL = 306, + STR_SOUND_AND_VIBRATION = 307, + STR_MOTION_RECOGNITION = 308, + STR_SYSTEM = 309, + STR_SHUTDOWN_AND_RESTART = 310, + STR_SCREEN_ON_DURATION = 311, + STR_RAISE_TO_WAKE = 312, + STR_5_SECONDS = 313, + STR_10_SECONDS = 314, + STR_15_SECONDS = 315, + STR_30_SECONDS = 316, + STR_60_SECONDS = 317, + STR_300_SECONDS = 318, + STR_4G_CAPABILITY = 319, + STR_VOLTE_CALL = 320, + STR_MOBILE_DATA_OPTION = 321, + STR_SYSTEM_UPDATE = 322, + STR_ONLINE_MUSIC = 323, + STR_BLUETOOTH_HEADPHONES = 324, + STR_TRADITIONAL_BLUETOOTH = 325, + STR_AUTO_OFF_BLUETOOTH_NOTE = 326, + STR_BLUETOOTH_SERVICE_OPTIONS = 327, + STR_HFP = 328, + STR_A2DP = 329, + STR_SYSTEM_VOLUME = 330, + STR_MEDIA_VOLUME = 331, + STR_CALL_VOLUME = 332, + STR_VIBRATION_MODE = 333, + STR_SILENT_MODE = 334, + STR_LIST_DISPLAY = 335, + STR_GRID_DISPLAY = 336, + STR_CELLULAR_DISPLAY = 337, + STR_AUTO_DETECT = 338, + STR_ABOUT_WATCH = 339, + STR_WATCH_QR_CODE = 340, + STR_SYSTEM_LANGUAGE = 341, + STR_RESTART = 342, + STR_SHUTDOWN = 343, + STR_FACTORY_RESET = 344, + STR_WATCH_NAME = 345, + STR_FIRMWARE_VERSION = 346, + STR_BLUETOOTH_NAME = 347, + STR_BLUETOOTH_ADDRESS = 348, + STR_UPDATENOW = 349, + STR_LATEST_VERSION = 350, + STR_LATER = 351, + STR_UP_TO_DATE = 352, + STR_NO_UPDATE = 353, + STR_LANGUAGE_SELECTION = 354, + STR_RESET_CONFIRM = 355, + STR_SHUTDOWN_CONFIRM = 356, + STR_RESET_CONFIRM_NOTE = 357, + STR_RECORDER = 358, + STR_CLICK_TO_RECORD = 359, + STR_RECORDING = 360, + STR_AUDIO_XX = 361, + STR_VOICE_RECORDING_REMINDER = 362, + STR_VOICE_RECORDING_REMINDER_NOTE = 363, + STR_DELETE_RECORDING = 364, + STR_DELETE_PERMANENTLY = 365, + STR_RECORDING_LIST = 366, + STR_CRLEMPTY = 367, + STR_DO_NOT_DISTURB_MODE = 368, + STR_CONNECTION_STATUS = 369, + STR_PHONE = 370, + STR_HEADSET = 371, + STR_CONNECTED = 372, + STR_DISCONNECTED = 373, + STR_PHONE_RINGING_VIBRATING = 374, + STR_BLUETOOTH_DISCONNECTED = 375, + STR_STOP = 376, + STR_WORKDAY = 377, + STR_REPEAT_NO = 378, + STR_EVERYDAY = 379, + STR_ADD_A_NEW_ALARM = 380, + STR_TIME = 381, + STR_NEXT_STEP = 382, + STR_MON = 383, + STR_TUES = 384, + STR_WEDNES = 385, + STR_THURS = 386, + STR_FRI = 387, + STR_SATUR = 388, + STR_SUN = 389, + STR_MONDAY = 390, + STR_TUESDAY = 391, + STR_WEDNESDAY = 392, + STR_THURSDAY = 393, + STR_FRIDAY = 394, + STR_SATURDAY = 395, + STR_SUNDAY = 396, + STR_CALIBRATE_COMPASS = 397, + STR_CALIBRATE_COMPASS_NOTE = 398, + STR_EAST = 399, + STR_SOUTH = 400, + STR_WEST = 401, + STR_NORTH = 402, + STR_SOUTHEAST = 403, + STR_SOUTHWEST = 404, + STR_NORTHEAST = 405, + STR_NORTHWEST = 406, + STR_KEEP_STILL_FOCUS_ON_BREATHING = 407, + STR_EXHALE_NOW = 408, + STR_INHALE_NOW = 409, + STR_TRAINING_COMPLETE = 410, + STR_THIS_BREATH = 411, + STR_TODAYS_BREATHING_TRAINING = 412, + STR_RECENT_CALLS = 413, + STR_NO_CALLS = 414, + STR_MISSED_CALLS = 415, + STR_DIALED_CALLS = 416, + STR_RECEIVED_CALLS = 417, + STR_NOTE_RECENT_CALLS_LIMITATION = 418, + STR_NO_CONTACTS_ADDED = 419, + STR_DIAL_MODE = 420, + STR_DIAL_VIA_WATCH_SIM = 421, + STR_DIAL_VIA_PHONE = 422, + STR_KUMI_TECHNOLOGY = 423, + STR_CALLING = 424, + STR_NOT_PAIRED = 425, + STR_PAIRED = 426, + STR_UNPAIR = 427, + STR_CONNECTION_ERROR = 428, + STR_INSERT_WATCH_SIM_OR_CONNECT_PHONE = 429, + STR_ENABLE_BLUETOOTH_CALL = 430, + STR_SOLUTION = 431, + STR_IPHONE = 432, + STR_ANDROID = 433, + STR_ENABLE_BLUETOOTH_CALL_NOTE_IPHONE = 434, + STR_ENABLE_BLUETOOTH_CALL_NOTE_ANDROID = 435, + STR_SIM_CARD_ERROR = 436, + STR_CHECK_SIM_CARD_INSERTION = 437, + STR_WEATHER_REPORT = 438, + STR_ULTRAVIOLET = 439, + STR_WIND_SPEED = 440, + STR_HUMIDITY = 441, + STR_NEXT_7_DAYS = 442, + STR_GET_WEATHER_ERROR = 443, + STR_MUSIC_SOURCE = 444, + STR_MOBILE_MUSIC = 445, + STR_WATCH_MUSIC = 446, + STR_MUSIC_LIST = 447, + STR_BLUETOOTH_CONNECTION_FAILED = 448, + STR_SCANNING_BINDING = 449, + STR_DEVICE_BINDING = 450, + STR_DEVICE_BINDING_NOTE = 451, + STR_EQUIPMENT_UNTYING = 452, + STR_EQUIPMENT_UNTYING_NOTE = 453, + STR_DRINK_WATER_REMINDER = 454, + STR_DRINK_WATER_REMINDER_NOTE = 455, + STR_SEDENTARY_REMINDER = 456, + STR_SEDENTARY_REMINDER_NOTE = 457, + STR_SYSTEM_UPGRADING = 458, + STR_NEWDEVICE_BIND_REMIND_NOTE1 = 459, + STR_NEWDEVICE_BIND_REMIND_NOTE2 = 460, + STR_NEWDEVICE_BIND_REMIND_NOTE3 = 461, + STR_AI_VOICE = 462, + STR_AI_INTELLIGENT_ASSISTANT = 463, + STR_START_CHAT = 464, + STR_BOOT_FAILED = 465, + STR_ENABLE_MOBILE_DATA_FIRST = 466, + STR_ENABLE_BLUETOOTH_FIRST = 467, + STR_LISTENING = 468, + STR_FINISH_SPEAKING = 469, + STR_THINKING = 470, + STR_CANCEL = 471, + STR_CONNECT_TIMEOUT = 472, + STR_PLEASE_RESTART_CHAT = 473, + STR_CONTINUE_CHAT = 474, + STR_AIMODELS_DOUBAO = 475, + STR_AIMODES_WENXINYIYAN = 476, + STR_AIMODES_KIMI = 477, + STR_AIMODES_CHATGPT = 478, + STR_SLIDE_TO_SHUTDOWN = 479, + STR_SLIDE_TO_REBOOT = 480, + STR_AI_FAMILY_MEALS = 481, + STR_CHAT = 482, + STR_PCY4GC_OR_AS = 483, + STR_API_KEYS = 484, + STR_PGTTAF = 485, + STR_DAFBS = 486, + STR_OPENAI_API_KEYS = 487, + STR_KHBB = 488, + STR_GTAS = 489, + STR_DYWTDAK = 490, + STR_CONNECTING = 491, + STR_CONNECTION_FAIL = 492, + STR_PTALORTM = 493, + STR_MOTION_DETECTION_WALK_NOTE = 494, + STR_MOTION_DETECTION_RUN_NOTE = 495, + STR_MOTION_DETECTION_RIDE_NOTE = 496, + STR_MOTION_DETECTION_ROWING_NOTE = 497, + STR_MOTION_DETECTION_ELLIPTICAL_NOTE = 498, + STR_PE4GC = 499, + STR_OBU_MESSAGE = 500, + STR_DELETE = 501, + STR_CHARGE = 502, + STR_CHARGE_NOTE = 503, + STR_STEP_FREQUENCY = 504, + STR_STEP_LENGTH = 505, + STR_AVG_PACE = 506, + STR_TONGYI_QIANWEN = 507, + STR_IFLYTEK_SPARK = 508, + STR_DISTURBNOTE_OFF = 509, + STR_4G_NOTE = 510, + STR_MUSIC_PLAYER_SOURCE_NOTE = 511, + STR_MUSIC_LIST_IS_EMPTY = 512, + STR_BT_HEADSET_RESCAN = 513, + STR_BT_HEADSET_NOFOND = 514, + STR_SCHEDULE = 515, + STR_SCHEDULE_TITLE = 516, + STR_SCHEDULE_NO_DATA = 517, + STR_SCHEDULE_NO_DATA_PROMPT = 518, + STR_NO_PAIRED_DEV = 519, + STR_IGNORE = 520, + STR_START = 521, + STR_ARC_SCALE_LIST_DISPLAY = 522, + STR_COUNT_DOWN = 523, + STR_CUSTOM_TIME = 524, + STR_QUICK_START = 525, + STR_1_MIN = 526, + STR_5_MIN = 527, + STR_10_MIN = 528, + STR_30_MIN = 529, + STR_SET_COUNT_DOWN_NOTE = 530, + STR_COUNTDOWN_ENDS = 531, + STR_MAXIMUM_TIME_REACH_NOTE = 532, + STR_STOPWATCH_STOP_NOTE = 533, + STR_TMCHBR = 534, + STR_SCHEDULE_TOPIC = 535, + STR_SCHEDULE_TIME = 536, + STR_SCHEDULE_NOTES = 537, + STR_SCHEDULE_DELETE_PROMPT = 538, + STR_HANG_UP_OR_ANSWER = 539, + STR_WATCH_CALL = 540, + STR_PHONE_CALL = 541, + STR_STEPS_OF_THE_DAY = 542, + STR_MILEAGE = 543, + STR_FAT_BURNING_TIME = 544, + STR_NUMBER_OF_STANDS = 545, + STR_CONSUME_CALORIES = 546, + STR_GOAL_HINT = 547, + STR_SLEEPMODE = 548, + STR_SLEEP_MODE_PROMPT_ON = 549, + STR_LOW_POWER_NOTIF_1 = 550, + STR_LOW_POWER_NOTIF_2 = 551, + STR_CONNECTION_SUCC = 552, + STR_RETRY = 553, + STR_BTEARPHONE_CONN_FAIL_TIP = 554, + STR_FLASHLIGHT_SETTING = 555, + STR_LIGHT_COLOR = 556, + STR_FLICKER_FREQUENCY = 557, + STR_NO_FLICKER = 558, + STR_FAST_FLICKER = 559, + STR_SLOW_FLICKER = 560, + STR_BROWSING_SPECIAL_EFFECTS = 561, + STR_OVERLAY_FLOW = 562, + STR_ROLLER = 563, + STR_DIAL_BROWSING_SPECIAL_EFFECTS = 564, + STR_SET_TARGET = 565, + STR_PWUWC = 566, + STR_CALENDAR = 567, + STR_ALARM_DELETE_NOTE = 568, + STR_ALARM_TIME_CHANGE = 569, + STR_ALARM_WEEK_CHANGE = 570, + STR_ALARM_REPEAT = 571, + STR_ALARM_ADD_LIMIT_NOTE = 572, + STR_MOTION_RECOGNITION_NOTE = 573, + STR_DURATION_SETTINGS = 574, + STR_2_MIN = 575, + STR_3_MIN = 576, + STR_4_MIN = 577, + STR_ONE_MIN = 578, + STR_TWO_MIN = 579, + STR_THREE_MIN = 580, + STR_FOUR_MIN = 581, + STR_FIVE_MIN = 582, + STR_MUSIC_TRANSMIT = 583, + STR_MUSIC_TRANSMIT_NOTE = 584, + STR_MUSIC_TRANSMIT_SUCCESS_NOTE = 585, + STR_OTA_DOWNLOAD = 586, + STR_OTA_DOWNLOADING = 587, + STR_OTA_DOWNLOADFIAL = 588, + STR_OTA_DOWNLOADFIAL_TRY = 589, + STR_OTA_DOWNLOADSUCC = 590, + STR_OTA_DOWNLOADSUCC_UPDATA = 591, + STR_DIAL_DOWNLOADING_TITLE = 592, + STR_DIAL_DOWNLOADING_LABEL = 593, + STR_MP3_SUCC_TITLE = 594, + STR_DIAL_SUCC_TITLE = 595, + STR_DIAL_SUCC_LABEL = 596, + STR_DIAL_FAIL_TITLE = 597, + STR_DIAL_FAIL_LABEL = 598, + STR_MP3_FAIL_TITL = 599, + STR_MP3_FAIL_LABEL = 600, + STR_CALLSOMEONE = 601, + STR_BLUENOTE = 602, + STR_VOICE_FAIL = 603, + STR_WAKE_VOIVE = 604, + STR_TIME_SET = 605, + STR_FORMAT = 606, + STR_FORMAT_NOTE = 607, + STR_SLEEP_UPDATE = 608, + STR_CAMERA = 609, + STR_GOAL_TITLE = 610, + STR_HEART_HIAGER = 611, + STR_CHARG_DOWN = 612, + STR_CHAEGING = 613, + STR_GOAL_DOWN = 614, + STR_OPERAT_FAIL = 615, + STR_DIAL_NOTE = 616, + STR_HEART_UNKOWN = 617, + STR_HEART_AVAILABLE = 618, + STR_HEART_JUST = 619, + STR_HEART_MIN_AGO = 620, + STR_HEART_HOUR_AGO = 621, + STR_RECORDS_20 = 622, + STR_RECORDS_NOTE = 623, + STR_RECORDS_DELETE = 624, + STR_NEW_INCOM = 625, + STR_NET_ERROR = 626, + STR_LANGUAGE_SELECTION_NOTE = 627, + STR_AUTO_OFF_BLUETOOTH_NOTE2 = 628, + STR_PHONE_MUSCI_NOTE = 629, + STR_TIME_FORMAT_SET = 630, + STR_DIAL_PLATE = 631, + STR_SLEEP_NOTIFY = 632, + STR_SLEEP_NOTE = 633, + STR_MAX_CARD = 634, + STR_NUM_LENGTH = 635, + STR_CALL_LIST = 636, + STR_DELETE_ALL = 637, + STR_FRE_CONTACT = 638, + STR_RECORD_MAX = 639, + STR_CLEAR_ALL_RECORDS = 640, + STR_DEEPSEEK = 641, + STR_BP_CHECK = 642, + STR_BP_CALIBRATE = 643, + STR_MEARURING = 644, + STR_MEASURING_KEEP_STILL = 645, + STR_RECALIBRATE = 646, + STR_CALIBRATION_DONE = 647, + STR_CALIBRATION_FAILED = 648, + STR_MEASUREMENT_DONE = 649, + STR_CALIBRATION_REMINDER = 650, + STR_USE_TRAD_SPHYGM = 651, + STR_CONFIRM = 652, + STR_CAL_RES_UPLOADED_30D = 653, + STR_RES_ANALYZING = 654, + STR_ANALYZING_DONT_EXIT = 655, + STR_FIRST_CAL_KEEP_STILL = 656, + STR_SECOND_CAL_KEEP_STILL = 657, + STR_ENTER_BP_READ = 658, + STR_SBP = 659, + STR_DBP = 660, + STR_NORMAL = 661, + STR_ELEVATED = 662, + STR_WARNING = 663, + STR_SBP_ELEVATED = 664, + STR_WARN_THRESH = 665, + STR_BP_WARN_CONSULT_DOC = 666, + STR_MEAS_FAILED = 667, + STR_CALIBRATING = 668, + STR_S = 669, + STR_PRESSURE = 670, + STR_WEAR_WATCH_DET = 671, + STR_RE_MEAS = 672, + STR_DATA_ANAL_WAIT = 673, + STR_EMOTION = 674, + STR_PLEASURE = 675, + STR_COMPLEX_NEG_EMO = 676, + STR_MEASURE = 677, + STR_FINGER_LEAD_PORT = 678, + STR_START_MEAS = 679, + STR_WEAR_TIGHT_FINGER_LEAD = 680, + STR_NO_FINGER_MOVE = 681, + STR_CONNECT_APP_4G = 682, + STR_FINGER_LEAD_TILL_VAL = 683, + STR_SINUS_HR = 684, + STR_APP_REPORT_NOT_CLIN = 685, + STR_FATIGUE_LEVEL = 686, + STR_BP_MODEL_2CAL = 687, + STR_RECAL_MONTHLY = 688, + STR_SAME_ARM_CALIB = 689, + STR_HYPERTENSIVE_PREPOST_CAL = 690, + STR_CALIB_POSTURE_GUIDE = 691, + STR_START_CAL = 692, + STR_CALIB_POSTURE_REQ = 693, + STR_ECG = 694, + STR_JIUTIAN = 695, + STR_LAST_CALIBRATION_TIME = 696, + STR_CALIBRATE = 697, + STR_CALIBRATION_SUGGESTION = 698, + STR_CALIBRATION_PATH = 699, + STR_MAX_ID = 700, +}; // UIResourceTextId + +enum FontLanguageId : uint8_t { + LANGUAGE_ID_AR, + LANGUAGE_ID_AZ, + LANGUAGE_ID_CS, + LANGUAGE_ID_DE, + LANGUAGE_ID_EL, + LANGUAGE_ID_EN, + LANGUAGE_ID_ES, + LANGUAGE_ID_FA, + LANGUAGE_ID_FI, + LANGUAGE_ID_FR, + LANGUAGE_ID_HE, + LANGUAGE_ID_HI, + LANGUAGE_ID_HR, + LANGUAGE_ID_ID, + LANGUAGE_ID_IT, + LANGUAGE_ID_JA, + LANGUAGE_ID_KO, + LANGUAGE_ID_MS, + LANGUAGE_ID_NL, + LANGUAGE_ID_PL, + LANGUAGE_ID_PT, + LANGUAGE_ID_RO, + LANGUAGE_ID_RU, + LANGUAGE_ID_SV, + LANGUAGE_ID_TH, + LANGUAGE_ID_TR, + LANGUAGE_ID_UK, + LANGUAGE_ID_UZ, + LANGUAGE_ID_VI, + LANGUAGE_ID_ZH, + LANGUAGE_ID_MAX +}; // UITextLanguageTextId +} +#endif /* UI_RESOURCE_STRING_H */ diff --git a/code/sdk/files/w9/fs/user/res/font/uk.lang b/code/sdk/files/w9/fs/user/res/font/uk.lang new file mode 100644 index 000000000..6d40546c6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/uk.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/uz.lang b/code/sdk/files/w9/fs/user/res/font/uz.lang new file mode 100644 index 000000000..f62890bfc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/uz.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/vi.lang b/code/sdk/files/w9/fs/user/res/font/vi.lang new file mode 100644 index 000000000..f46339156 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/vi.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font/zh.lang b/code/sdk/files/w9/fs/user/res/font/zh.lang new file mode 100644 index 000000000..c84385fa1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font/zh.lang differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ar.bin b/code/sdk/files/w9/fs/user/res/font_bin/ar.bin new file mode 100644 index 000000000..e55f7ee52 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ar.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/az.bin b/code/sdk/files/w9/fs/user/res/font_bin/az.bin new file mode 100644 index 000000000..30415fecc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/az.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/cs.bin b/code/sdk/files/w9/fs/user/res/font_bin/cs.bin new file mode 100644 index 000000000..541128861 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/cs.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/de.bin b/code/sdk/files/w9/fs/user/res/font_bin/de.bin new file mode 100644 index 000000000..4b8959202 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/de.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/el.bin b/code/sdk/files/w9/fs/user/res/font_bin/el.bin new file mode 100644 index 000000000..08feaac9f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/el.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/en.bin b/code/sdk/files/w9/fs/user/res/font_bin/en.bin new file mode 100644 index 000000000..fcbd98ed7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/en.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/es.bin b/code/sdk/files/w9/fs/user/res/font_bin/es.bin new file mode 100644 index 000000000..6f10342ab Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/es.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/fa.bin b/code/sdk/files/w9/fs/user/res/font_bin/fa.bin new file mode 100644 index 000000000..3c02cd88f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/fa.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/fi.bin b/code/sdk/files/w9/fs/user/res/font_bin/fi.bin new file mode 100644 index 000000000..736fdabfa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/fi.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/fr.bin b/code/sdk/files/w9/fs/user/res/font_bin/fr.bin new file mode 100644 index 000000000..0b2168c57 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/fr.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/he.bin b/code/sdk/files/w9/fs/user/res/font_bin/he.bin new file mode 100644 index 000000000..40cca4ead Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/he.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/hi.bin b/code/sdk/files/w9/fs/user/res/font_bin/hi.bin new file mode 100644 index 000000000..a886e3b4e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/hi.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/hr.bin b/code/sdk/files/w9/fs/user/res/font_bin/hr.bin new file mode 100644 index 000000000..6c2d2f054 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/hr.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/id.bin b/code/sdk/files/w9/fs/user/res/font_bin/id.bin new file mode 100644 index 000000000..f96a1bc83 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/id.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/it.bin b/code/sdk/files/w9/fs/user/res/font_bin/it.bin new file mode 100644 index 000000000..0c375d9f7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/it.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ja.bin b/code/sdk/files/w9/fs/user/res/font_bin/ja.bin new file mode 100644 index 000000000..7a8cea140 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ja.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ko.bin b/code/sdk/files/w9/fs/user/res/font_bin/ko.bin new file mode 100644 index 000000000..df2082733 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ko.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ms.bin b/code/sdk/files/w9/fs/user/res/font_bin/ms.bin new file mode 100644 index 000000000..7dd1cbf97 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ms.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/nl.bin b/code/sdk/files/w9/fs/user/res/font_bin/nl.bin new file mode 100644 index 000000000..506657c49 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/nl.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/pl.bin b/code/sdk/files/w9/fs/user/res/font_bin/pl.bin new file mode 100644 index 000000000..95c985e3e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/pl.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/pt.bin b/code/sdk/files/w9/fs/user/res/font_bin/pt.bin new file mode 100644 index 000000000..de5a0dad9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/pt.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ro.bin b/code/sdk/files/w9/fs/user/res/font_bin/ro.bin new file mode 100644 index 000000000..d3913dcd0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ro.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/ru.bin b/code/sdk/files/w9/fs/user/res/font_bin/ru.bin new file mode 100644 index 000000000..142bd062c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/ru.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/sv.bin b/code/sdk/files/w9/fs/user/res/font_bin/sv.bin new file mode 100644 index 000000000..8a1688d26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/sv.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/th.bin b/code/sdk/files/w9/fs/user/res/font_bin/th.bin new file mode 100644 index 000000000..886a84b17 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/th.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/tr.bin b/code/sdk/files/w9/fs/user/res/font_bin/tr.bin new file mode 100644 index 000000000..4a81554d0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/tr.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/uk.bin b/code/sdk/files/w9/fs/user/res/font_bin/uk.bin new file mode 100644 index 000000000..d785cb1b2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/uk.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/uz.bin b/code/sdk/files/w9/fs/user/res/font_bin/uz.bin new file mode 100644 index 000000000..c915fcdb6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/uz.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/vi.bin b/code/sdk/files/w9/fs/user/res/font_bin/vi.bin new file mode 100644 index 000000000..02d4d2a0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/vi.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_bin/zh.bin b/code/sdk/files/w9/fs/user/res/font_bin/zh.bin new file mode 100644 index 000000000..90daef6ef Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_bin/zh.bin differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf b/code/sdk/files/w9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf new file mode 100644 index 000000000..ffa363f11 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Anuphan-VariableFont_wght.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Audiowide_Regular.ttf b/code/sdk/files/w9/fs/user/res/font_library/Audiowide_Regular.ttf new file mode 100644 index 000000000..348817d57 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Audiowide_Regular.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/DejaVuSans.ttf b/code/sdk/files/w9/fs/user/res/font_library/DejaVuSans.ttf new file mode 100644 index 000000000..27cff476e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/DejaVuSans.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Gilroy_Bold.ttf b/code/sdk/files/w9/fs/user/res/font_library/Gilroy_Bold.ttf new file mode 100644 index 000000000..2704cd67d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Gilroy_Bold.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Handjet.ttf b/code/sdk/files/w9/fs/user/res/font_library/Handjet.ttf new file mode 100644 index 000000000..5a1489383 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Handjet.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf b/code/sdk/files/w9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf new file mode 100644 index 000000000..01e01c59a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Orbit-Regular.ttf b/code/sdk/files/w9/fs/user/res/font_library/Orbit-Regular.ttf new file mode 100644 index 000000000..db9562d1c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Orbit-Regular.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/Sheeping_Cats.ttf b/code/sdk/files/w9/fs/user/res/font_library/Sheeping_Cats.ttf new file mode 100644 index 000000000..31705c9fe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/Sheeping_Cats.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/font_library/hindi.ttf b/code/sdk/files/w9/fs/user/res/font_library/hindi.ttf new file mode 100644 index 000000000..14479c192 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/font_library/hindi.ttf differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/background.bin b/code/sdk/files/w9/fs/user/res/heart_chart/background.bin new file mode 100644 index 000000000..582ff3b1a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/background.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/buttomicon.bin b/code/sdk/files/w9/fs/user/res/heart_chart/buttomicon.bin new file mode 100644 index 000000000..45116af9c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/buttomicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon.bin new file mode 100644 index 000000000..873aecf3f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin new file mode 100644 index 000000000..2f8cd4f1e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_01.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin new file mode 100644 index 000000000..891a935cf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_02.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin new file mode 100644 index 000000000..2b2edb49a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_03.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin new file mode 100644 index 000000000..beae56c34 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_04.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin new file mode 100644 index 000000000..0388bcc01 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_05.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin new file mode 100644 index 000000000..a72943ad8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_06.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin new file mode 100644 index 000000000..6d9ec7843 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_07.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin new file mode 100644 index 000000000..5e744d9a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_08.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin new file mode 100644 index 000000000..8bf49170b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_09.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin new file mode 100644 index 000000000..2b008f5b0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin new file mode 100644 index 000000000..20d974e6f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin new file mode 100644 index 000000000..135e07107 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin new file mode 100644 index 000000000..92d22bc62 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin new file mode 100644 index 000000000..3ee1144f0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin new file mode 100644 index 000000000..eb18d2583 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin new file mode 100644 index 000000000..92f19e01d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin new file mode 100644 index 000000000..efd3bb0a5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin new file mode 100644 index 000000000..883fa2a2e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin new file mode 100644 index 000000000..87f39bc20 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin new file mode 100644 index 000000000..7b91033dc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin new file mode 100644 index 000000000..2f8cd4f1e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/hearticon/HEARTICON_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/heart_chart/topicon.bin b/code/sdk/files/w9/fs/user/res/heart_chart/topicon.bin new file mode 100644 index 000000000..f5f5549b8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/heart_chart/topicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/line_cj.brk b/code/sdk/files/w9/fs/user/res/line_cj.brk new file mode 100644 index 000000000..53512178d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/line_cj.brk differ diff --git a/code/sdk/files/w9/fs/user/res/lowpower.bin b/code/sdk/files/w9/fs/user/res/lowpower.bin new file mode 100644 index 000000000..150d617be Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/lowpower.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/dial.bin b/code/sdk/files/w9/fs/user/res/makephone/dial.bin new file mode 100644 index 000000000..b576c05e1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/dial.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/headset_1.bin b/code/sdk/files/w9/fs/user/res/makephone/headset_1.bin new file mode 100644 index 000000000..02be3a112 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/headset_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/headset_2.bin b/code/sdk/files/w9/fs/user/res/makephone/headset_2.bin new file mode 100644 index 000000000..14eb369f3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/headset_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/headset_3.bin b/code/sdk/files/w9/fs/user/res/makephone/headset_3.bin new file mode 100644 index 000000000..362a3798f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/headset_3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/microphone.bin b/code/sdk/files/w9/fs/user/res/makephone/microphone.bin new file mode 100644 index 000000000..7c719cfca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/microphone.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/microphone_1.bin b/code/sdk/files/w9/fs/user/res/makephone/microphone_1.bin new file mode 100644 index 000000000..e1edbb918 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/microphone_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/person.bin b/code/sdk/files/w9/fs/user/res/makephone/person.bin new file mode 100644 index 000000000..699a01e26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/person.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/vector.bin b/code/sdk/files/w9/fs/user/res/makephone/vector.bin new file mode 100644 index 000000000..a08c7895a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/vector.bin differ diff --git a/code/sdk/files/w9/fs/user/res/makephone/voice.bin b/code/sdk/files/w9/fs/user/res/makephone/voice.bin new file mode 100644 index 000000000..59f2276a4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/makephone/voice.bin differ diff --git a/code/sdk/files/w9/fs/user/res/message/Icon.bin b/code/sdk/files/w9/fs/user/res/message/Icon.bin new file mode 100644 index 000000000..4c57c3f29 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/message/Icon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/message/Line.bin b/code/sdk/files/w9/fs/user/res/message/Line.bin new file mode 100644 index 000000000..96332ba8e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/message/Line.bin differ diff --git a/code/sdk/files/w9/fs/user/res/message/disturbicon.bin b/code/sdk/files/w9/fs/user/res/message/disturbicon.bin new file mode 100644 index 000000000..21226544d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/message/disturbicon.bin differ diff --git a/code/sdk/files/w9/fs/user/res/message/message.bin b/code/sdk/files/w9/fs/user/res/message/message.bin new file mode 100644 index 000000000..c3799e3f9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/message/message.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD1.bin b/code/sdk/files/w9/fs/user/res/record/RECORD1.bin new file mode 100644 index 000000000..d1322a55e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD2.bin b/code/sdk/files/w9/fs/user/res/record/RECORD2.bin new file mode 100644 index 000000000..387fa4073 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD3.bin b/code/sdk/files/w9/fs/user/res/record/RECORD3.bin new file mode 100644 index 000000000..f1c2f15d6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin new file mode 100644 index 000000000..57a72780b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_BACKGROUND.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_DELETE.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_DELETE.bin new file mode 100644 index 000000000..3734ac8ef Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_DELETE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_NEXT.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_NEXT.bin new file mode 100644 index 000000000..72567d16e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_NEXT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_PROVE.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_PROVE.bin new file mode 100644 index 000000000..893d42d9a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_PROVE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_VOLUME.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_VOLUME.bin new file mode 100644 index 000000000..7af937be9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PLAY_VOLUME.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/RECORD_PROGRESS_BG.bin b/code/sdk/files/w9/fs/user/res/record/RECORD_PROGRESS_BG.bin new file mode 100644 index 000000000..be552043b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/RECORD_PROGRESS_BG.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PAUSE.bin b/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PAUSE.bin new file mode 100644 index 000000000..93008102a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PAUSE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PLAY.bin b/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PLAY.bin new file mode 100644 index 000000000..65be736c3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/record/UNIVERSAL_PLAY.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/1.bin b/code/sdk/files/w9/fs/user/res/remind/bind/1.bin new file mode 100644 index 000000000..981c52067 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/10.bin b/code/sdk/files/w9/fs/user/res/remind/bind/10.bin new file mode 100644 index 000000000..77e2cd281 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/11.bin b/code/sdk/files/w9/fs/user/res/remind/bind/11.bin new file mode 100644 index 000000000..7c8867bbf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/12.bin b/code/sdk/files/w9/fs/user/res/remind/bind/12.bin new file mode 100644 index 000000000..4430cff98 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/13.bin b/code/sdk/files/w9/fs/user/res/remind/bind/13.bin new file mode 100644 index 000000000..8fe78fad3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/14.bin b/code/sdk/files/w9/fs/user/res/remind/bind/14.bin new file mode 100644 index 000000000..0d706becc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/15.bin b/code/sdk/files/w9/fs/user/res/remind/bind/15.bin new file mode 100644 index 000000000..8c88b2da1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/16.bin b/code/sdk/files/w9/fs/user/res/remind/bind/16.bin new file mode 100644 index 000000000..78fa23881 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/17.bin b/code/sdk/files/w9/fs/user/res/remind/bind/17.bin new file mode 100644 index 000000000..a84b31080 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/18.bin b/code/sdk/files/w9/fs/user/res/remind/bind/18.bin new file mode 100644 index 000000000..fbc7f4a1b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/19.bin b/code/sdk/files/w9/fs/user/res/remind/bind/19.bin new file mode 100644 index 000000000..7c837b1e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/2.bin b/code/sdk/files/w9/fs/user/res/remind/bind/2.bin new file mode 100644 index 000000000..405ba80aa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/20.bin b/code/sdk/files/w9/fs/user/res/remind/bind/20.bin new file mode 100644 index 000000000..5691693a7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/21.bin b/code/sdk/files/w9/fs/user/res/remind/bind/21.bin new file mode 100644 index 000000000..4940ef8df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/22.bin b/code/sdk/files/w9/fs/user/res/remind/bind/22.bin new file mode 100644 index 000000000..caf127bb1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/23.bin b/code/sdk/files/w9/fs/user/res/remind/bind/23.bin new file mode 100644 index 000000000..1670de17d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/24.bin b/code/sdk/files/w9/fs/user/res/remind/bind/24.bin new file mode 100644 index 000000000..1248aaffb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/25.bin b/code/sdk/files/w9/fs/user/res/remind/bind/25.bin new file mode 100644 index 000000000..7c3bf6cbb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/3.bin b/code/sdk/files/w9/fs/user/res/remind/bind/3.bin new file mode 100644 index 000000000..4d5b4fefe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/4.bin b/code/sdk/files/w9/fs/user/res/remind/bind/4.bin new file mode 100644 index 000000000..102776ad2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/5.bin b/code/sdk/files/w9/fs/user/res/remind/bind/5.bin new file mode 100644 index 000000000..b7387b6a9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/6.bin b/code/sdk/files/w9/fs/user/res/remind/bind/6.bin new file mode 100644 index 000000000..7468e3a90 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/7.bin b/code/sdk/files/w9/fs/user/res/remind/bind/7.bin new file mode 100644 index 000000000..34171da9e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/8.bin b/code/sdk/files/w9/fs/user/res/remind/bind/8.bin new file mode 100644 index 000000000..d39baf224 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/bind/9.bin b/code/sdk/files/w9/fs/user/res/remind/bind/9.bin new file mode 100644 index 000000000..01bb9edc6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/bind/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/1.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/1.bin new file mode 100644 index 000000000..9f1299c0c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/10.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/10.bin new file mode 100644 index 000000000..aba8a23f2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/11.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/11.bin new file mode 100644 index 000000000..92f55d3a9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/12.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/12.bin new file mode 100644 index 000000000..e4587ab2d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/13.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/13.bin new file mode 100644 index 000000000..32b37ce63 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/14.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/14.bin new file mode 100644 index 000000000..32b37ce63 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/15.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/15.bin new file mode 100644 index 000000000..9fbaf9541 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/16.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/16.bin new file mode 100644 index 000000000..249e1fcf0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/17.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/17.bin new file mode 100644 index 000000000..f7f1529e1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/18.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/18.bin new file mode 100644 index 000000000..0fa409149 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/19.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/19.bin new file mode 100644 index 000000000..c34db509d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/2.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/2.bin new file mode 100644 index 000000000..4cf0213ff Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/20.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/20.bin new file mode 100644 index 000000000..a1033ceca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/21.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/21.bin new file mode 100644 index 000000000..0e8dfeaa3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/22.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/22.bin new file mode 100644 index 000000000..98457b13c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/23.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/23.bin new file mode 100644 index 000000000..be9f6a22b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/24.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/24.bin new file mode 100644 index 000000000..522fa4bd3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/25.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/25.bin new file mode 100644 index 000000000..221652125 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/3.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/3.bin new file mode 100644 index 000000000..141c7a37e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/4.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/4.bin new file mode 100644 index 000000000..e7b15cf92 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/5.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/5.bin new file mode 100644 index 000000000..245679761 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/6.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/6.bin new file mode 100644 index 000000000..582c8bdee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/7.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/7.bin new file mode 100644 index 000000000..8774b852a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/8.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/8.bin new file mode 100644 index 000000000..8c16538f0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/remind/unbind/9.bin b/code/sdk/files/w9/fs/user/res/remind/unbind/9.bin new file mode 100644 index 000000000..2d39bfd09 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/remind/unbind/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin new file mode 100644 index 000000000..d875fde65 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_BLUETOOTH.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CARDSET.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CARDSET.bin new file mode 100644 index 000000000..a524871fc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CARDSET.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin new file mode 100644 index 000000000..458e306d0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_CHANGEDIAL.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin new file mode 100644 index 000000000..d35045010 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin new file mode 100644 index 000000000..74f2f852a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISPLAY_MODE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISTURB.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISTURB.bin new file mode 100644 index 000000000..cf13a99a5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_DISTURB.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin new file mode 100644 index 000000000..ca1d2e419 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin new file mode 100644 index 000000000..98c8a3a99 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_NETWORKANDCALL.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SAVEELE.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SAVEELE.bin new file mode 100644 index 000000000..8c93987f1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SAVEELE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin new file mode 100644 index 000000000..7331b61cf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin new file mode 100644 index 000000000..229cb6c1d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SOUND_VIBRATION.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SYSTEM.bin b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SYSTEM.bin new file mode 100644 index 000000000..4942e1cbe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTINGS_SYSTEM.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTTING_REBOOT.bin b/code/sdk/files/w9/fs/user/res/settings/SETTTING_REBOOT.bin new file mode 100644 index 000000000..172ff3e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTTING_REBOOT.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SETTTING_SHUTDOWN.bin b/code/sdk/files/w9/fs/user/res/settings/SETTTING_SHUTDOWN.bin new file mode 100644 index 000000000..5f6b10436 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SETTTING_SHUTDOWN.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/SOS.bin b/code/sdk/files/w9/fs/user/res/settings/SOS.bin new file mode 100644 index 000000000..66f070e09 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/SOS.bin differ diff --git a/code/sdk/files/w9/fs/user/res/settings/shutdown.bin b/code/sdk/files/w9/fs/user/res/settings/shutdown.bin new file mode 100644 index 000000000..05e886595 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/settings/shutdown.bin differ diff --git a/code/sdk/files/w9/fs/user/res/solar-energy_1.bin b/code/sdk/files/w9/fs/user/res/solar-energy_1.bin new file mode 100644 index 000000000..9eefef036 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/solar-energy_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/1.bin b/code/sdk/files/w9/fs/user/res/step/1.bin new file mode 100644 index 000000000..4849d2d5b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/10.bin b/code/sdk/files/w9/fs/user/res/step/10.bin new file mode 100644 index 000000000..7d6e1344b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/11.bin b/code/sdk/files/w9/fs/user/res/step/11.bin new file mode 100644 index 000000000..3b80c9af3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/12.bin b/code/sdk/files/w9/fs/user/res/step/12.bin new file mode 100644 index 000000000..1092267db Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/13.bin b/code/sdk/files/w9/fs/user/res/step/13.bin new file mode 100644 index 000000000..a029f888d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/14.bin b/code/sdk/files/w9/fs/user/res/step/14.bin new file mode 100644 index 000000000..c2e60e343 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/15.bin b/code/sdk/files/w9/fs/user/res/step/15.bin new file mode 100644 index 000000000..c8d0939a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/16.bin b/code/sdk/files/w9/fs/user/res/step/16.bin new file mode 100644 index 000000000..a0918e83c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/17.bin b/code/sdk/files/w9/fs/user/res/step/17.bin new file mode 100644 index 000000000..efd3d1569 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/18.bin b/code/sdk/files/w9/fs/user/res/step/18.bin new file mode 100644 index 000000000..2c24c9609 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/19.bin b/code/sdk/files/w9/fs/user/res/step/19.bin new file mode 100644 index 000000000..04ec02769 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/2.bin b/code/sdk/files/w9/fs/user/res/step/2.bin new file mode 100644 index 000000000..a8a459138 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/20.bin b/code/sdk/files/w9/fs/user/res/step/20.bin new file mode 100644 index 000000000..76638e12e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/3.bin b/code/sdk/files/w9/fs/user/res/step/3.bin new file mode 100644 index 000000000..b4569b6e2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/4.bin b/code/sdk/files/w9/fs/user/res/step/4.bin new file mode 100644 index 000000000..6327da829 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/5.bin b/code/sdk/files/w9/fs/user/res/step/5.bin new file mode 100644 index 000000000..c76501e57 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/6.bin b/code/sdk/files/w9/fs/user/res/step/6.bin new file mode 100644 index 000000000..7bd7e8e93 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/7.bin b/code/sdk/files/w9/fs/user/res/step/7.bin new file mode 100644 index 000000000..d4f2fcbd9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/8.bin b/code/sdk/files/w9/fs/user/res/step/8.bin new file mode 100644 index 000000000..e8921f0c4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/9.bin b/code/sdk/files/w9/fs/user/res/step/9.bin new file mode 100644 index 000000000..346024dab Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/step/step_b.bin b/code/sdk/files/w9/fs/user/res/step/step_b.bin new file mode 100644 index 000000000..976b16634 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/step/step_b.bin differ diff --git a/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_LINE.bin b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_LINE.bin new file mode 100644 index 000000000..28019b06d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_LINE.bin differ diff --git a/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_MARK.bin b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_MARK.bin new file mode 100644 index 000000000..482ef15ca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATCH_MARK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET1.bin b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET1.bin new file mode 100644 index 000000000..66a43d7fd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET2.bin b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET2.bin new file mode 100644 index 000000000..2730fd954 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/stopwatch/STOPWATH_RESET2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/system/KUMILOGO.bin b/code/sdk/files/w9/fs/user/res/system/KUMILOGO.bin new file mode 100644 index 000000000..ed1fdfa0c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/system/KUMILOGO.bin differ diff --git a/code/sdk/files/w9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin b/code/sdk/files/w9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin new file mode 100644 index 000000000..2078e102a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/system/SYSTEM_UPDATE_FLAG.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/1.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/1.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/10.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/10.bin new file mode 100644 index 000000000..2028e0a3d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/11.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/11.bin new file mode 100644 index 000000000..0a32f6c2b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/12.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/12.bin new file mode 100644 index 000000000..5fca47d35 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/13.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/13.bin new file mode 100644 index 000000000..7aceb85f2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/14.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/14.bin new file mode 100644 index 000000000..0a5d836b5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/15.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/15.bin new file mode 100644 index 000000000..bf62634ad Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/16.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/16.bin new file mode 100644 index 000000000..6dd6eb357 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/17.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/17.bin new file mode 100644 index 000000000..67043d2c1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/18.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/18.bin new file mode 100644 index 000000000..33aff30e3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/19.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/19.bin new file mode 100644 index 000000000..ede899833 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/2.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/2.bin new file mode 100644 index 000000000..e07623ef2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/20.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/20.bin new file mode 100644 index 000000000..74857d3b3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/21.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/21.bin new file mode 100644 index 000000000..a9dc858c1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/22.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/22.bin new file mode 100644 index 000000000..7b2e28bbb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/23.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/23.bin new file mode 100644 index 000000000..99c94b43a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/24.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/24.bin new file mode 100644 index 000000000..bbb6fa60f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/25.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/25.bin new file mode 100644 index 000000000..3da1ca297 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/26.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/26.bin new file mode 100644 index 000000000..01671008a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/27.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/27.bin new file mode 100644 index 000000000..371174062 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/28.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/28.bin new file mode 100644 index 000000000..ec8397c1b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/29.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/29.bin new file mode 100644 index 000000000..47f921e50 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/3.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/3.bin new file mode 100644 index 000000000..3f6b3d01b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/30.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/30.bin new file mode 100644 index 000000000..63fb85b7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/31.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/31.bin new file mode 100644 index 000000000..9e85ed845 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/32.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/32.bin new file mode 100644 index 000000000..896b245a2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/33.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/33.bin new file mode 100644 index 000000000..5c2473cb9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/34.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/34.bin new file mode 100644 index 000000000..f84c3ebbb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/35.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/35.bin new file mode 100644 index 000000000..04825625f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/36.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/36.bin new file mode 100644 index 000000000..4edec961e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/37.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/37.bin new file mode 100644 index 000000000..1934db02d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/38.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/38.bin new file mode 100644 index 000000000..8c2995dc8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/39.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/39.bin new file mode 100644 index 000000000..054e17b9a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/4.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/4.bin new file mode 100644 index 000000000..0feadfafb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/40.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/40.bin new file mode 100644 index 000000000..6f540572a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/41.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/41.bin new file mode 100644 index 000000000..605637461 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/41.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/42.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/42.bin new file mode 100644 index 000000000..94c8c23d7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/42.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/43.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/43.bin new file mode 100644 index 000000000..774d0e888 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/43.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/44.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/44.bin new file mode 100644 index 000000000..6da059441 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/44.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/45.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/45.bin new file mode 100644 index 000000000..4239019cd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/45.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/46.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/46.bin new file mode 100644 index 000000000..c30beb6f4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/46.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/47.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/47.bin new file mode 100644 index 000000000..46ed2ba65 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/47.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/48.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/48.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/48.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/49.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/49.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/49.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/5.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/5.bin new file mode 100644 index 000000000..2199fbd36 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/50.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/50.bin new file mode 100644 index 000000000..352105e88 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/50.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/6.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/6.bin new file mode 100644 index 000000000..fa94cd651 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/7.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/7.bin new file mode 100644 index 000000000..d2cfa7d64 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/8.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/8.bin new file mode 100644 index 000000000..ea9752d9c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/cream/9.bin b/code/sdk/files/w9/fs/user/res/takephotos/cream/9.bin new file mode 100644 index 000000000..8c944149c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/cream/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/1.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/1.bin new file mode 100644 index 000000000..9c23da2a3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/10.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/10.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/11.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/11.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/12.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/12.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/13.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/13.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/14.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/14.bin new file mode 100644 index 000000000..56bd4aba0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/15.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/15.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/16.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/16.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/17.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/17.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/18.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/18.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/19.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/19.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/2.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/2.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/20.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/20.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/21.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/21.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/22.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/22.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/23.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/23.bin new file mode 100644 index 000000000..ba287dd7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/24.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/24.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/25.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/25.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/26.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/26.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/27.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/27.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/28.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/28.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/3.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/3.bin new file mode 100644 index 000000000..89c2a52ec Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/4.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/4.bin new file mode 100644 index 000000000..8631985d8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/5.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/5.bin new file mode 100644 index 000000000..7864c75e9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/6.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/6.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/7.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/7.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/8.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/8.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/takephotos/smile/9.bin b/code/sdk/files/w9/fs/user/res/takephotos/smile/9.bin new file mode 100644 index 000000000..5c2b0272f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/takephotos/smile/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/arclist.bin b/code/sdk/files/w9/fs/user/res/themestyle/arclist.bin new file mode 100644 index 000000000..ec1721e5b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/arclist.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage1.bin b/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage1.bin new file mode 100644 index 000000000..e2cd6ba4b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage2.bin b/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage2.bin new file mode 100644 index 000000000..b0322575f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/circlelist/circleListImage2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/dialplate.bin b/code/sdk/files/w9/fs/user/res/themestyle/dialplate.bin new file mode 100644 index 000000000..30bfd03cd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/dialplate.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/grid.bin b/code/sdk/files/w9/fs/user/res/themestyle/grid.bin new file mode 100644 index 000000000..4aaedb4b6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/grid.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/hexagons.bin b/code/sdk/files/w9/fs/user/res/themestyle/hexagons.bin new file mode 100644 index 000000000..ef677d9da Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/hexagons.bin differ diff --git a/code/sdk/files/w9/fs/user/res/themestyle/list.bin b/code/sdk/files/w9/fs/user/res/themestyle/list.bin new file mode 100644 index 000000000..6f9c4f5b9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/themestyle/list.bin differ diff --git a/code/sdk/files/w9/fs/user/res/users/AddCard.bin b/code/sdk/files/w9/fs/user/res/users/AddCard.bin new file mode 100644 index 000000000..3d78503ae Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/users/AddCard.bin differ diff --git a/code/sdk/files/w9/fs/user/res/users/Enter.bin b/code/sdk/files/w9/fs/user/res/users/Enter.bin new file mode 100644 index 000000000..38c128d21 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/users/Enter.bin differ diff --git a/code/sdk/files/w9/fs/user/res/users/OK.bin b/code/sdk/files/w9/fs/user/res/users/OK.bin new file mode 100644 index 000000000..e6c2d7a64 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/users/OK.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_1.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_1.bin new file mode 100644 index 000000000..590dafd4a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_10.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_10.bin new file mode 100644 index 000000000..caf4f6ed8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_11.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_11.bin new file mode 100644 index 000000000..52c2f1e19 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_12.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_12.bin new file mode 100644 index 000000000..9da665830 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_13.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_13.bin new file mode 100644 index 000000000..f87bbfb97 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_14.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_14.bin new file mode 100644 index 000000000..e550cfded Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_15.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_15.bin new file mode 100644 index 000000000..1ed73363d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_16.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_16.bin new file mode 100644 index 000000000..c48e1157a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_17.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_17.bin new file mode 100644 index 000000000..63da629ac Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_18.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_18.bin new file mode 100644 index 000000000..c3ae52a03 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_19.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_19.bin new file mode 100644 index 000000000..be9b26331 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_2.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_2.bin new file mode 100644 index 000000000..55f8c90ca Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_20.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_20.bin new file mode 100644 index 000000000..0c6c86155 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_21.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_21.bin new file mode 100644 index 000000000..a0fbed932 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_22.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_22.bin new file mode 100644 index 000000000..435194692 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_23.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_23.bin new file mode 100644 index 000000000..c88abee73 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_24.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_24.bin new file mode 100644 index 000000000..cd2e0e521 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_25.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_25.bin new file mode 100644 index 000000000..02ffc1fbf Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_25.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_26.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_26.bin new file mode 100644 index 000000000..e16626869 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_26.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_27.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_27.bin new file mode 100644 index 000000000..bd53c659a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_27.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_28.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_28.bin new file mode 100644 index 000000000..8f90b3452 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_28.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_29.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_29.bin new file mode 100644 index 000000000..6297e55be Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_29.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_3.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_3.bin new file mode 100644 index 000000000..ac4a767c6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_30.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_30.bin new file mode 100644 index 000000000..8a7b47da4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_30.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_31.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_31.bin new file mode 100644 index 000000000..13c51c6e1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_31.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_32.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_32.bin new file mode 100644 index 000000000..d42a790a8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_32.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_33.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_33.bin new file mode 100644 index 000000000..ff4f6e819 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_33.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_34.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_34.bin new file mode 100644 index 000000000..5643a2a9c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_34.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_35.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_35.bin new file mode 100644 index 000000000..36f6c37e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_35.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_36.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_36.bin new file mode 100644 index 000000000..32ef18309 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_36.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_37.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_37.bin new file mode 100644 index 000000000..c3920150d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_37.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_38.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_38.bin new file mode 100644 index 000000000..db5a8ece6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_38.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_39.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_39.bin new file mode 100644 index 000000000..e7771e428 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_39.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_4.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_4.bin new file mode 100644 index 000000000..309316c2b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_40.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_40.bin new file mode 100644 index 000000000..5391fd9e7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_40.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_41.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_41.bin new file mode 100644 index 000000000..35ce61c8a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_41.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_42.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_42.bin new file mode 100644 index 000000000..2393aea2d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_42.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_43.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_43.bin new file mode 100644 index 000000000..de7484cee Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_43.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_44.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_44.bin new file mode 100644 index 000000000..52a5f4d20 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_44.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_45.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_45.bin new file mode 100644 index 000000000..bdb60b3b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_45.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_46.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_46.bin new file mode 100644 index 000000000..9155ac22b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_46.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_47.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_47.bin new file mode 100644 index 000000000..1822cbc2d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_47.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_48.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_48.bin new file mode 100644 index 000000000..c0bb0e4dd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_48.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_49.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_49.bin new file mode 100644 index 000000000..09867eafe Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_49.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_5.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_5.bin new file mode 100644 index 000000000..d666ef32a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_50.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_50.bin new file mode 100644 index 000000000..ec3502c1f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_50.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_51.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_51.bin new file mode 100644 index 000000000..37a69888b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_51.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_52.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_52.bin new file mode 100644 index 000000000..ad3e97889 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_52.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_53.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_53.bin new file mode 100644 index 000000000..9b44e96cb Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_53.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_54.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_54.bin new file mode 100644 index 000000000..1dd83c0b5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_54.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_55.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_55.bin new file mode 100644 index 000000000..5d6fcf6ad Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_55.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_56.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_56.bin new file mode 100644 index 000000000..d3a46b20e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_56.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_57.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_57.bin new file mode 100644 index 000000000..3378a3980 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_57.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_58.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_58.bin new file mode 100644 index 000000000..bc2240e2e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_58.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_59.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_59.bin new file mode 100644 index 000000000..f09e7052f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_59.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_6.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_6.bin new file mode 100644 index 000000000..8bfe866d1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_60.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_60.bin new file mode 100644 index 000000000..f3d0d1e7d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_60.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_61.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_61.bin new file mode 100644 index 000000000..84415282d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_61.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_62.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_62.bin new file mode 100644 index 000000000..6b9a48d56 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_62.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_63.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_63.bin new file mode 100644 index 000000000..445d82d69 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_63.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_64.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_64.bin new file mode 100644 index 000000000..927fd6601 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_64.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_65.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_65.bin new file mode 100644 index 000000000..768c872ed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_65.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_66.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_66.bin new file mode 100644 index 000000000..fbac77146 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_66.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_67.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_67.bin new file mode 100644 index 000000000..4b2253e9c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_67.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_68.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_68.bin new file mode 100644 index 000000000..0766767f7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_68.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_69.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_69.bin new file mode 100644 index 000000000..e86eb4748 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_69.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_7.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_7.bin new file mode 100644 index 000000000..e68839dc4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_70.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_70.bin new file mode 100644 index 000000000..028a47ee8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_70.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_71.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_71.bin new file mode 100644 index 000000000..cf8ec67b8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_71.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_72.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_72.bin new file mode 100644 index 000000000..353cd1b0d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_72.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_73.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_73.bin new file mode 100644 index 000000000..da16df0d1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_73.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_74.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_74.bin new file mode 100644 index 000000000..fdb9e1c68 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_74.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_8.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_8.bin new file mode 100644 index 000000000..0da485852 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_9.bin b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_9.bin new file mode 100644 index 000000000..d8ab4a03c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/PullUp/PullUp_9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/WEATHER_BACKGROUND.bin b/code/sdk/files/w9/fs/user/res/weather/WEATHER_BACKGROUND.bin new file mode 100644 index 000000000..143df271c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/WEATHER_BACKGROUND.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/1.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/1.bin new file mode 100644 index 000000000..26e05031b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/10.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/10.bin new file mode 100644 index 000000000..585620079 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/11.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/11.bin new file mode 100644 index 000000000..da418e602 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/12.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/12.bin new file mode 100644 index 000000000..bc9901825 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/13.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/13.bin new file mode 100644 index 000000000..c65159fd3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/14.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/14.bin new file mode 100644 index 000000000..44fa2f8d0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/15.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/15.bin new file mode 100644 index 000000000..f17bd4313 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/16.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/16.bin new file mode 100644 index 000000000..da1d9bc6d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/17.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/17.bin new file mode 100644 index 000000000..cfd14c3df Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/18.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/18.bin new file mode 100644 index 000000000..2d940d62e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/19.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/19.bin new file mode 100644 index 000000000..ecb91b586 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/2.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/2.bin new file mode 100644 index 000000000..98377646f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/20.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/20.bin new file mode 100644 index 000000000..5ee7470e1 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/3.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/3.bin new file mode 100644 index 000000000..666e09c0e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/4.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/4.bin new file mode 100644 index 000000000..d5f59b85f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/5.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/5.bin new file mode 100644 index 000000000..6c28cf8a9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/6.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/6.bin new file mode 100644 index 000000000..9badd78d3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/7.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/7.bin new file mode 100644 index 000000000..fde04ff6d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/8.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/8.bin new file mode 100644 index 000000000..1d5c19ae0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/9.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/9.bin new file mode 100644 index 000000000..e56abecc0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/Humidity/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/1.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/1.bin new file mode 100644 index 000000000..f449dada8 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/10.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/10.bin new file mode 100644 index 000000000..159eacfcd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/11.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/11.bin new file mode 100644 index 000000000..358cdfc68 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/12.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/12.bin new file mode 100644 index 000000000..15081606c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/13.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/13.bin new file mode 100644 index 000000000..e79f9ddd4 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/14.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/14.bin new file mode 100644 index 000000000..a619bf730 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/15.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/15.bin new file mode 100644 index 000000000..c586f0677 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/16.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/16.bin new file mode 100644 index 000000000..2e0d7c939 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/17.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/17.bin new file mode 100644 index 000000000..1b2d8a2f5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/18.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/18.bin new file mode 100644 index 000000000..402347baa Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/19.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/19.bin new file mode 100644 index 000000000..65c145f0a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/2.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/2.bin new file mode 100644 index 000000000..d969f1490 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/20.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/20.bin new file mode 100644 index 000000000..29f1121f9 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/21.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/21.bin new file mode 100644 index 000000000..729a77da3 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/22.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/22.bin new file mode 100644 index 000000000..de173e30c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/23.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/23.bin new file mode 100644 index 000000000..c87459b04 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/24.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/24.bin new file mode 100644 index 000000000..b6ede91f2 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/3.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/3.bin new file mode 100644 index 000000000..697933618 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/4.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/4.bin new file mode 100644 index 000000000..b1f6cf436 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/5.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/5.bin new file mode 100644 index 000000000..d81e513d0 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/6.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/6.bin new file mode 100644 index 000000000..a5c68753c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/7.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/7.bin new file mode 100644 index 000000000..567cced3d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/8.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/8.bin new file mode 100644 index 000000000..ee82fda24 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/9.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/9.bin new file mode 100644 index 000000000..70187e6fd Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/UV/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin new file mode 100644 index 000000000..105641d59 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin new file mode 100644 index 000000000..be3a15ed6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin new file mode 100644 index 000000000..04cd932de Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin new file mode 100644 index 000000000..850a97437 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin new file mode 100644 index 000000000..c57ce8168 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin new file mode 100644 index 000000000..93c6d78a6 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin new file mode 100644 index 000000000..aabb74339 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin new file mode 100644 index 000000000..7b76584b7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin new file mode 100644 index 000000000..9eed55491 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin new file mode 100644 index 000000000..7fc964a7e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin new file mode 100644 index 000000000..0ab7eba2f Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin new file mode 100644 index 000000000..604f06bd5 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin new file mode 100644 index 000000000..ff8502ecc Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin new file mode 100644 index 000000000..360551b46 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin new file mode 100644 index 000000000..76c372299 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin new file mode 100644 index 000000000..1c9a0db18 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin new file mode 100644 index 000000000..a1cec350c Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin new file mode 100644 index 000000000..de995cc70 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin new file mode 100644 index 000000000..db0720190 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin new file mode 100644 index 000000000..33a193a3b Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin new file mode 100644 index 000000000..f29776e7a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin new file mode 100644 index 000000000..1964cf12a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin new file mode 100644 index 000000000..91497f75e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin new file mode 100644 index 000000000..5ad490723 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin new file mode 100644 index 000000000..96d16533d Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_cloudy.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin new file mode 100644 index 000000000..d0a81f84a Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_clear_sunny.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_duststorm.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_duststorm.bin new file mode 100644 index 000000000..c6710e714 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_duststorm.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_foggy.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_foggy.bin new file mode 100644 index 000000000..d38ac2e77 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_foggy.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_haze.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_haze.bin new file mode 100644 index 000000000..6f795a16e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_haze.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_overcast.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_overcast.bin new file mode 100644 index 000000000..272962347 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_overcast.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_rain.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_rain.bin new file mode 100644 index 000000000..b3874bd26 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_rain.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_snow.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_snow.bin new file mode 100644 index 000000000..f92e6feed Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_snow.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny.bin new file mode 100644 index 000000000..548273d1e Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin new file mode 100644 index 000000000..b3eae3b41 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_sunny_cloudy.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_thundershower.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_thundershower.bin new file mode 100644 index 000000000..148c18b45 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_thundershower.bin differ diff --git a/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_unknown.bin b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_unknown.bin new file mode 100644 index 000000000..50b0ff892 Binary files /dev/null and b/code/sdk/files/w9/fs/user/res/weather/weather65x65/weather_unknown.bin differ diff --git a/code/sdk/files/w9/fs/user/system/KUMI_LOGO.bin b/code/sdk/files/w9/fs/user/system/KUMI_LOGO.bin new file mode 100644 index 000000000..43fa9aee7 Binary files /dev/null and b/code/sdk/files/w9/fs/user/system/KUMI_LOGO.bin differ diff --git a/code/sdk/files/w9/fs/user/system/N9_TEST_LOGO.bin b/code/sdk/files/w9/fs/user/system/N9_TEST_LOGO.bin new file mode 100644 index 000000000..073642c91 Binary files /dev/null and b/code/sdk/files/w9/fs/user/system/N9_TEST_LOGO.bin differ diff --git a/code/sdk/files/w9/fs/user/system/OTAUpdata.bin b/code/sdk/files/w9/fs/user/system/OTAUpdata.bin new file mode 100644 index 000000000..f7689f22c Binary files /dev/null and b/code/sdk/files/w9/fs/user/system/OTAUpdata.bin differ diff --git a/code/sdk/files/w9/fs/user/system/OTAUpdataRecover.bin b/code/sdk/files/w9/fs/user/system/OTAUpdataRecover.bin new file mode 100644 index 000000000..e89ad7813 Binary files /dev/null and b/code/sdk/files/w9/fs/user/system/OTAUpdataRecover.bin differ diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/Cat1pyVersion.txt b/code/sdk/files/w9/fs/user/system/cat1ota/Cat1pyVersion.txt new file mode 100644 index 000000000..19c7bdba7 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/Cat1pyVersion.txt @@ -0,0 +1 @@ +16 \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/EventMesh.py b/code/sdk/files/w9/fs/user/system/cat1ota/EventMesh.py new file mode 100644 index 000000000..7951835b2 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/EventMesh.py @@ -0,0 +1,86 @@ +import _thread +import usys +import ql_fs +CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能 +CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能 +class EventStore(object): + def __init__(self): + self.map = dict() + self.log = None + self.__filters = [] + + def add_filter(self, flt): + self.__filters.append(flt) + + def append(self, event, cb): + self.map[event] = cb + + def fire_async(self, event, msg,thread_size): + if event in self.map: + #print("fire_async:thread_size:{}".format(thread_size)) + if thread_size != None: + _thread.stack_size(thread_size) + #print("fire_async:thread_size:{}".format(thread_size)) + _thread.start_new_thread(self.map[event], (event, msg)) + if thread_size != None: + _thread.stack_size(8*1024) + if self.log: + self.log.info("ASYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, None)) + + def fire_sync(self, event, msg): + res = None + try: + if event in self.map: + res = self.map[event](event, msg) + except Exception as e: + usys.print_exception(e) + if self.log: + self.log.info("ERROR executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + if event not in self.__filters: + if self.log: + self.log.info("SYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res)) + return res + + def subscribe(self,event, cb): + """ + subscribe event and cb + """ + return self.append(event, cb) + + + def publish(self,event, msg=None): + """ + publish event and msg + """ + return self.publish_sync(event, msg) + + + def publish_async(self,event, msg=None,thread_size = None): + """ + 异步发送 + """ + return self.fire_async(event, msg,thread_size) + + + def publish_sync(self,event, msg=None): + """ + 同步发送 + """ + return self.fire_sync(event, msg) + + + def set_log(self,log_adapter): + self,log = log_adapter + + + def add_filter(self,flt): + self.add_filter(flt) + +eventMesh = EventStore() + + + + + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/cat1Service.py b/code/sdk/files/w9/fs/user/system/cat1ota/cat1Service.py new file mode 100644 index 000000000..d0b727137 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/cat1Service.py @@ -0,0 +1,1090 @@ +# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +# net.getNetMode() +# (0, '460', '11', 7) + +# net.getSignal(1) +# ([99, 99, 255, 255], [-84, -117, -15, 255, -3]) + +# net.nitzTime() +# ('24/02/26 11:17:42 8 0', 1708946262, 0) + + +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import uping +import example +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import fota +import request +import ql_fs +import pm +import sms + +from usr.EventMesh import eventMesh +from usr.httpota import httpota +# from usr.telecom_dmp import telecomDmpCb +# from usr.china_mobile_dmp import chinamobileCb +from usr.china_mobile_ai_regulation import aiRegulation +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +def msg_cb(args): + index = args[1] + storage = args[2] + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if index != -1: + eventMesh.publish("send_singal_data_toBle",index) + + if index >= sms_max-1:#删除短信 + eventMesh.publish("delete_sms_event")#删除短信 + +sms.setCallback(msg_cb)#sms注册回调 + +CAT1_SERVICE_HEAD = 'FE' #固定head + +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V19" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + + + + + + +#设置通话音量 +voiceCall.setVolume(10) +clog.info("voice call volume {}".format(voiceCall.getVolume())) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +# pm.autosleep(1) +pm.wakelock_lock(lpm_fd) +clog.info("create_wakelock {}".format(pm.get_wakelock_num())) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + clog.info("{}".format(config_data)) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) + +# GPIO21 - 引脚 86 KP_MKOUT1 唤醒主控 +# GPIO22 - 引脚 87 KP_MKIN 被主控唤醒 + +# GPIOn - GPIO号,int类型,点此查看GPIO引脚编号与物理引脚的映射关系。 + +# direction - 输入输出模式,int类型,IN - 输入模式,OUT - 输出模式。 + +# pullMode - 上下拉模式,int类型,说明如下: +# PULL_DISABLE - 浮空模式 +# PULL_PU - 上拉模式 +# PULL_PD - 下拉模式 + +# level - 引脚电平,int类型,0 - 设置引脚为低电平, 1- 设置引脚为高电平。 +# recvDataPin = Pin(Pin.GPIO22, Pin.IN, Pin.PULL_PU, 0) +def ExtIntfun(args): + # clog.info('### interrupt {} ###'.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿 + if args[1] == 0: + clog.info("disable autosleep") + # pm.autosleep(0) + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + clog.info("enable autosleep") + pm.wakelock_unlock(lpm_fd) + # pm.autosleep(1) + # clog.info("recvDataPin={}".format(recvDataPin.read())) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + + +# 创建gpio对象 +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +# 设置输入输出模式 +gpioWakeBT.set_dir(Pin.OUT) + +# 设置引脚电平 +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' #获取 Cat1 版本号 +UDP_CMD_DIAL_NUMB = '1' #拨打电话 +UDP_CMD_HUNGUP = '2' #挂断电话 +UDP_CMD_ANSWER = '3' #接听电话 +UDP_CMD_CAT1_OTA_UPDATE = '4' #触发Cat1 OTA升级,mcu提供url +UDP_CMD_SEND_SMS = '5' #发送SMS短信,mcu提供电话号及短信内容 +UDP_CMD_GET_TIME = '6' #获取Cat1 时间 ,YYYYMMDD HHmmss zone +UDP_CMD_GET_RECV_NETWORKSTAT = '7' #获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 // 内容同UDP_CMD_GET_NETWORKSTAT,CAT主动发给MCU +UDP_MSG_SMS = '8' # CAT1接收到的SMS信息给MCU,包含电话号及短信内容 +UDP_CMD_ATCMD = '9' # 执行AT指令 +UDP_MSG_CALL_CONNECTED = 'A' # CAT1 电话接听消息 +UDP_MSG_CALL_DISCONNECTED = 'B' # CAT1 电话挂断消息 +UDP_MSG_COMMING_CALL = 'C' # CAT1 来电消息,包含电话号 +UDP_MSG_REPLY = 'F' # 返回值 +UDP_MSG_OTA = 'D' # 返回值 + +class Cat1Service: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + + def __init__(self, uart=UART.UART4, mode=AP): + + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + # self.__value = None + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + clog.info('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + clog.error('slip netif construct fail') + return None + clog.info('slip network card create success') + # self.__queue = Queue(1) + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.china_mobile_ai_init = 0 + self.volte_switch = 1 #默认是开启VOLTE通话功能 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)# + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) #获取所有的短信内容 + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + + + self.telecom_dmp_switch = 0 + + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + # + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + # 发数据线程 + return None + + def __socket_init(self): + # 创建一个socket实例 + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + # 绑定IP + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + + # cmd = "" + # cmd_tmp= int(cmd_data)#将十进制数转换成int 再转换成十六进制 + # cell_data = hex(cmd_tmp) + # decimal_number = int(cell_data, 16) + # cmd = "%02x"%(decimal_number) # 使用两位表示,不足前面补0 + clog.info(cmd) # 输出: 07 + clog.info("btmcu_cmd_handler cmd {0} , args {1}".format(cmd,parm)) + if cmd == "00": + clog.info(cmd) + # UDP_CMD_GET_CAT1VER + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + # UDP_CMD_DIAL_NUMB + if eventMesh.publish("get_volte_switch") == 1: #只有BLE开了VOLTE才允许打电话 + ret = voiceCall.callStart(str(parm)) + # if ret != 0: + # ret = voiceCall.callStart(str(parm)) + clog.info("ret={} {} {}".format(ret,cmd,parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + print("get_volte_switch NO") + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + clog.info(cmd) + # UDP_CMD_HUNGUP + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + clog.info(cmd) + # UDP_CMD_ANSWER + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "04": + clog.info(cmd) + elif cmd == "05": + clog.info(cmd) + # UDP_CMD_SEND_SMS + elif cmd == "06": + clog.info(cmd) + # UDP_CMD_GET_TIME + time=utime.localtime() + zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # 返回当前时间戳,参数为元组 + # timestamp = utime.mktime(time) + # clog.info(timestamp) + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + clog.info("cmd ==== 07!") + # UDP_CMD_GET_RECV_NETWORKSTAT + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + # ([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data_lac, data_cid, data_rat, data_reject_cause, data_psc]) + operator = net.operatorName() + signal = net.csqQueryPoll() + clog.info("imei:{0},sim:{1},oper:{2},signal:{3},net:{4}".format(imei,simstat,operator,signal,netstat)) + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + clog.info("{},{}".format(cmd,parm)) + # UDP_CMD_ATCMD + # net.setModemFun(0) + # net.setModemFun(1) + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + clog.info("reply:{},ret:{}".format(resp.decode(),ret)) + self.reply_cmd('09',"{}".format(resp.decode())) + else: + clog.info("cmd error ret:{}".format(ret)) + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": #获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能 + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 : + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + clog.info("set_dmp_change_mode on:{}".format(on)) + eventMesh.publish("set_dmp_change_mode",on) + + elif cmd == "16": + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用 + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": #DTMF功能 + voiceCall.startDtmf(str(parm),100) #100ms 持续时间 100-1000 + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "1B": + print("fota {}".format(str(parm).split("and")[0])) + print("fota {}".format(str(parm).split("and")[-1])) + # httpota = httpota() + httpota.run( str(parm).split("and")[0], str(parm).split("and")[-1]) + # eventMesh.publish("set_volte_switch",int(parm)) + # UDP_MSG_OTA + elif cmd == "AC":# + if self.ack_sem==1: + self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): #设置VOLTE开关 + self.volte_switch = int(msg) + + + def get_volte_switch(self,event,msg): #获取VOLTE开关 + + return self.volte_switch + + + def china_mobile_recv_cmd(self,cmd,parm): #移动入库相关指令 + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + clog.info("software_version:{},{}".format(self.software_version,parm)) + elif cmd == "16": #获取BLE mac地址 + eventMesh.publish("set_dev_mac",str(parm)) + clog.info("parm:{}\r\n".format(parm)) + + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + clog.info("remove_all_sms_cb\r\n") + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + clog.info("{}\r\n".format(sms_data)) + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) #删除所有的sms信息 + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() #短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] #最大存储短信数量 + clog.info("recv:{}".format(int(msg))) + message=self.sms_get_message_info(int(msg)) + if message == -1: #说明没有这条短信 + return + message_pdu = sms.decodePdu(message[5],20) + + if message_pdu != -1: #解码出来的内容 + + message_ref = message[0] #编码 + message_total_num = message[1] #总共条数 + message_seq = message[2] #当前第几条 + data = message[5] #内容 + data_len = len(data) #内容长度 + # ref :短信参考标识,同一个标识表明为同一条短信 + # total_num :此条长短信总条数 大于1属于长短信 + # seq :此条短信在长短信中的序号 + # print("message:{} {}\r\n".format(message,message_pdu)) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + """ + :param index :短信索引值 + :tyoe index :整形 + + :return :元组类型 + 元组内容: + (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len) + + :message_ref :短信参考标识,同一个标识表明为同一条短信 + :message_total_num :此条长短信总条数 + :message_seq :此条短信在长短信中的序号 + :sub_message_data :词条短信的内容 + :pdu_tye :PDU类型,bit 6标记是否包含用户报文头,长短信需要 + :sub_message_len :此条短信内容长度 + + """ + + message0=sms.searchPduMsg(index) + #print("sms_get_message_info:message0:{}".format(message0)) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + # 电话号码高低位需要转换 + sca = self.sms_deal_phone_number(sca) + + # if sca_num % 2 == 1: + # print("Get SCA phone {}".format(sca[:-1])) + # else: + # print("Get SCA phone {}".format(sca)) + + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + # 电话号码高低位需要转换 + oa = self.sms_deal_phone_number(oa) + + # if oa_num % 2 == 1: + # print("Get OA phone {}".format(oa[:-1])) + # else: + # print("get OA phone {}".format(oa)) + + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + + # 或短信用户数据 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + #长短信 + if ((pdu_tye & 0x40 ) >> 6) == 1: + #长短信,处理长短信用户报文头 + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + # 短短信 + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums()#短信数量 + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2]#最大存储短信数量 + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + clog.info(sms_data) + if sms_data == -1: + return + sms_max = sms_data[0][2]#最大存储短信数量 + clog.info(sms_max) + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0]#编码 + num = message[1]#总共条数 + curren_num = message[2]#当前第几条 + data_len = message[4] + sms_data.append(code)#编码 编码相同是同一条短信的内容 + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + clog.info("text:{} {} {}\r\n".format(text[0],text[1],text[2])) + + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + # 来电提醒 + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话接听消息 + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + # 电话拒接消息 + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + # if self.__err == 1 or self.__value[2] != 'OK': + # return -1 + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + clog.info('Network connection successful.') + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + clog.info('Network connection failed, stage={}, state={}'.format(stage, state)) + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + + self.__waiting_netstat = 0 + return -1 + + # 查询网卡状态 + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + clog.info('reply_cmd 1') + self.clear_remain() + message = str(_timesync) + clog.info('reply_cmd 2') + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + # if self.__queue.empty() == False: + # self.__queue.get() + self.__err = 0 + # self.__value = None + #添加路由信息 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + + return slip.router_add(self.ip, self.mask) + + # 获取slip的网络配置 + def ipconfig(self): + return slip.ipconfig() + + # 设置dns服务器 + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + # 设置默认网卡 + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + clog.info("skip reset_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.4.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + + def set_network_config(self): + + + if (self.__net_connected == 1) : + clog.info("skip set_network_config") + return 0 + Info = dataCall.getInfo(1,0) + clog.info("Info{}".format(Info)) + default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改 + segment_ip = '172.16.1.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改 + mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改 + # 配置默认网卡,通过默认网卡进行网络转发 + cat1service.set_default_NIC(default_NIC_ip) + clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip)) + #添加路由规则,只有该网段IP才进行转发 + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改 + sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改 + # 配置网卡DNS服务器 + cat1service.set_dns(pri_dns, sec_dns) + # 网卡IP信息查询 + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭 + return + if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改 + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + # telecomDmpCb.telecom_dmp_power_on_init() + if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: + if eventMesh.publish("get_dmp_change_mode") == 2: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + #移动入库的初始化 + # chinamobileCb.china_mobile_init() + if eventMesh.publish("get_dmp_change_mode") == 3: + if self.china_mobile_ai_init == 1: + return + self.china_mobile_ai_init = 1 + eventMesh.publish("set_network_state",1) + aiRegulation.AIRegulation_init() + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + # 释放slip网卡 + def stop(self): + slip.destroy() + return 0 + + + # 封装tlv数据包 + def __pack_tlv_format(self, head, content): + # self.head = head + # self.content = content + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + clog.error('illegal pack tlv content') + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + # 解码tlv数据包 + def __unpack_tlv_format(self, msg): + clog.info('__unpack_tlv_format {}\r\n'.format(msg)) + self.msg = str(msg)[2:]#这是去除head FE + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + clog.error('__unpack_tlv_format err') + return -1 + clog.info('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value)) + unpack = (tag,length,value) + return unpack + # socket通信(UDP)模块 + def __Socket_UDP(self, head, content): + # 0 则 __Socket_UDP_write + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + clog.info("send====") + data=self.send_data_q.get() + self.ack_sem=1 + # # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + + clog.info("Socket_SEND_Thread data:{} {}".format(data[0],data[1])) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + # if data[2]: + # self.__Socket_UDP_noreply_write( data[0], data[1]) + # else : + self.__Socket_UDP_write( data[0], data[1]) + + clog.info("Socket_SEND_Thread while data:{} {}".format(data[0],data[1])) + + if data: + clog.info("data ok!!") + else: + clog.error("data error!!") + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + ##self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + clog.info("__Socket_UDP send msg {}".format(msg)) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + clog.info("__Socket_UDP send 2") + self.__wait_resp = 1 + # data = self.__queue.get() + self.__wait_resp = 0 + # return data + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + # 1 则 __Socket_UDP_noreply_write + self.send_data_q.put([head,content]) + + def __Socket_UDP_noreply_write(self, head, content): + # self.head = head + # self.content = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + # 消息处理 + msg = self.__pack_tlv_format(head, content) + + # 向服务端发送消息 + server_addr = ('172.16.1.5',1000) + + clog.info("__Socket_UDP_noreply send msg {}".format(msg)) + self.__err = 0 + data_size = self.__sock.sendto(msg,server_addr) + clog.info("self.__sock data_size {}".format(data_size)) + self.__wait_resp = 0 + return 0 + + # socket通信(UDP)模块 + def __Socket_Thread(self): + while True: + try: + clog.info("recv====") + data=self.__sock.recv(1024) + clog.info("data:{}".format(data)) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + clog.info('mode: {0}, recv {1} bytes, Data: {2}'.format (value[0],len(data), value[2])) + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + # self.__value = value + # self.__queue.put('1') + self.btmcu_cmd_handler(value[0],value[2]) + clog.info("End else Thread") + else: + clog.error("data error!!") + except Exception as recverr: + clog.error("recverr:{}\r\n".format(recverr)) + if "110" in str(recverr): + self.__err = 1 + # if self.__wait_resp == 1: + # self.__queue.put('0') + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() + + + + clog.info("End Socket Thread") + + + + +# UDP_CMD_GET_CAT1VER = '0', // 获取 Cat1 版本号 +# UDP_CMD_DIAL_NUMB = '1', // 拨打电话 +# UDP_CMD_HUNGUP = '2', // 挂断电话 +# UDP_CMD_ANSWER = '3', // 接听电话 +# UDP_CMD_CAT1_OTA_UPDATE = '4', // 触发Cat1 OTA升级,mcu提供url +# UDP_CMD_SEND_SMS = '5', // 发送SMS短信,mcu提供电话号及短信内容 +# UDP_CMD_GET_TIME = '6', // 获取Cat1 时间 ,YYYYMMDD HHmmss zone +# UDP_CMD_GET_NETWORKSTAT = '7', //获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 +# 下文进行系统配置 +clog.info("Cat1Service start") + +cat1service = Cat1Service() + +#send_data_q = Queue(100) + +#voice call callback function +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + clog.info('voicecall auto end:') + voiceCall.callEnd() + else: + # gpioWakeBT.write(1) + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall connected, PhoneNO: \n'.format(args[6])) + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + clog.info('voicecall disconnect') + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + clog.info('voicecall disconnected, PhoneNO: \n'.format(args[6])) + cat1service.notifyDisconnectCall(args[6]) + elif args[0] == 13: + clog.info('voicecall is waiting, PhoneNO: \n'.format(args[6])) + elif args[0] == 14: + clog.info('voicecall dialing, PhoneNO: \n'.format(args[6])) + elif args[0] == 15: + clog.info('voicecall alerting, PhoneNO: \n'.format(args[6])) + elif args[0] == 16: + clog.info('voicecall holding, PhoneNO: \n'.format(args[6])) + else: + clog.info('voice_callback , args[0]: \n'.format(args[6])) + +#电话消息反馈 +voiceCall.setCallback(voice_callback) + + +def checknet_cb(arg): + clog.info("start checktime!!") + # if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次 + # if eventMesh.publish("get_dmp_change_mode") == 1: + # telecomDmpCb.telecom_dmp_power_on_count() + + _thread.start_new_thread(cat1service.wait_network_ready, ()) + # time=utime.localtime() + # zone=utime.getTimeZone() + #(2024, 3, 2, 18, 31, 32, 5, 62),8 + # cat1service.timesync("{0},{1}".format(time,zone)) +# _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +# checknet_cb(()) +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + +# def checkpin_cb(arg): +# clog.info("recvDataPin={}".format(recvDataPin.read())) + +# timerCheckRevPin = osTimer() +# timerCheckRevPin.start(1000,1,checkpin_cb) + + + + + + +# while True: +# utime.sleep(5) + + +# uping.ping("172.16.1.5") + # 获取网卡当前工作状态 + +# gpioWakeBT.write(1) +# utime.sleep(1) + +# timesync = net.nitzTime() +# cat1service.timesync(timesync) + + +#url = "http://zzhc.vnet.cn:9998/" + + diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/checkota.py b/code/sdk/files/w9/fs/user/system/cat1ota/checkota.py new file mode 100644 index 000000000..e5ef1f1ae --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/checkota.py @@ -0,0 +1,150 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 + +import fota +import utime +import log +import uos + +PROJECT_VERSION="PY_OTA_V14" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pyota" +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("Fota") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pyota"): + return "PY_OTA_V13" + + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + try: + ql_fs.touch(CONFIG_JSON,data) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def set_version_to_json_config(app_type,keyvalue): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + + ql_fs.touch(CONFIG_JSON, config_data) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + print("{}".format(config_data)) + except Exception as e: + print("checkota 创建出错 {}".format(e)) + +def get_version_from_json_config(app_type): + try: + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + print("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + return keyvalue + except Exception as e: + print("get_version_from_json_config出错 {}".format(e)) + return "" + +def result(args): + print('download status:',args[0],'download process:',args[1]) + +def check_fota(): + modem_ver = modem.getDevFwVersion() + imei = modem.getDevImei() + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(modem_ver,imei) + response = request.get(url) + print(url) + data = response.json() + if(data['UptoDate'] == False): + print("Need update python application") + fota_obj = fota() # 创建Fota对象 + print("httpDownload...") + srcurl = data['url'] + #差分升级方式 + # res = fota_obj.httpDownload(url1="http://www.example.com/fota.bin",callback=result) + # mini fota方式 + print("{},{}".format("{}/dfota_1.bin".format(srcurl),"{}/dfota_2.bin".format(srcurl))) + res = fota_obj.httpDownload(url1="{}/dfota_1.bin".format(srcurl),url2="{}/dfota_2.bin".format(srcurl),callback=result) + #差分升级FTP方式 + #res = fota_obj.httpDownload(url1="ftp://user:password@ip:port/fota.bin",callback=result) #其中user,password,ip,port需要填写具体使用的FTP服务器信息 + if res != 0: + print("httpDownload error") + return + print("wait httpDownload update...") + else: + print("No need update python application") + +def do_app_update_internal(app_type): + fota = app_fota.new() + imei = modem.getDevImei() + pythonversion=get_version_from_json_config(app_type) + url = "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver={0}&imei={1}".format(pythonversion,imei) + try: + response = request.get(url) + print(url) + data = response.json() + if data['UptoDate'] == False: + print("Need update python application {}".format(data["appcount"])) + for app_update in data["apps"]: + srcurl = app_update['url'] + print("run start...") + targetpyname = app_update['OtaPackageName'] + version = app_update['OtaPackageVersion'] + tmpfile_path = "/usr/.updater/{}".format(targetpyname) + targetfile_path = "/usr/{}".format(targetpyname) + print("download {0} to {1}".format(srcurl,targetfile_path)) + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + ret = fota.download(srcurl,targetpyname) + if ret == 0 : + try: + ql_fs.file_copy(targetfile_path, tmpfile_path) + set_version_to_json_config(app_type,version) + print("ota success") + if ql_fs.path_exists(tmpfile_path): + try: + uos.remove(tmpfile_path) + except Exception as e: + print("update remove出错 {}".format(e)) + except Exception as e: + print("ota failed!") + else: + print("ota failed") + # 升级后重启 + Power.powerRestart() + else: + print("No need update python application") + except Exception as e: + print("nonetwork:{}".format(e)) + +if __name__ == '__main__': + print("check ota start!!!!!!!!!!") + set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + stage, state = checkNet.waitNetworkReady(1) + if stage == 3 and state == 1: + print('Network connection successful.') + do_app_update_internal("pyota") + # check_fota() + else: + print('Network connection failed, stage={}, state={}'.format(stage, state)) + +# res = uos.statvfs("/usr") +# res = list(res) +# print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024))) \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_ai_regulation.py b/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_ai_regulation.py new file mode 100644 index 000000000..9cd4bf9a8 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_ai_regulation.py @@ -0,0 +1,416 @@ +#AI 纳管对接文件 +import modem +import request +import utime +import osTimer +import ql_fs +from machine import RTC +from misc import Power +import uos +import ujson +import urandom +from usr.EventMesh import eventMesh +HEARBEAT_REPORT_TIMER_CONFIG = 60*60*12#60*60*12 #心跳上报时间间隔12小时可更改做测试 +REALY_TIME_COUNT = 60*60# #开启1小时实时定时器 +HEART_REPORT_ERROR_TIMER = 60 #心率上报错误定时器检测 按照1分钟检查 +PRODUCTID = "1927646275585744898" #产品ID +PRODUCTKEY = "iijgiGiTolCblSFE" #产品KEY 平台创建产品是生成的 +HEART_REPORT_ERR_MAX_NUM = 30 #连续上报错误次数最大值 30 网络异常或者哪里报错了 重启设备 可根据实际的用户的需求更改次数 +REPORT_MODE = 1 #上报方式 1 24小时内一定上报一次 2 12小时后上报一次 +class AIRegulation: + #定义全局变量 + def __init__(self): + self.timerStart = osTimer() + self.timerStartReportHr = osTimer() + self.productId = PRODUCTID + self.productKey = PRODUCTKEY + self.deviceId = "" #设备ID + self.deviceSecret = "" #设备私钥 + self.config_data = {} + self.getDevInforErrCount = 0 #获取设备信息错误次数累计 + self.report_state = 0 #超过24小时清0 + self.TimeSec = 0 #上报的时间戳 + self.startTimerState = 0 + self.software_version = "" + self.imei_new = "" + self.init_flag = 0 + self.net_work_state = 0 + self.dev_mac = "" + eventMesh.subscribe("get_dev_version",self.get_dev_version) + eventMesh.subscribe("set_dev_version",self.set_dev_version) + eventMesh.subscribe("get_dev_mac",self.get_dev_mac) + eventMesh.subscribe("set_dev_mac",self.set_dev_mac) + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + self.report_err_count = 0 #上报错误次数 30次 + + def set_network_state(self,event,msg): + self.net_work_state=int(msg) + + def get_network_state(self,event,msg): + return self.net_work_state + + def set_dev_version(self,event,msg): + self.software_version=str(msg) + + def get_dev_version(self,event,msg): + return self.software_version + def get_dev_mac(self,event,msg): + return self.dev_mac + def set_dev_mac(self,event,msg): + self.dev_mac = str(msg) + #要或者设备的mac 和设备的固件版本号 + + #读取存储设备的设备参数 包含设备imei 设备ID和设备私钥 同一个设备设备ID和设备私钥不变 + def read_dev_storage_param(self): + + IMEI = modem.getDevImei() #获取IMEI号 + result_ok = 0 #返回结果状态 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") # + if IFEXIST == True: #文件存在 + fileSize = ql_fs.path_getsize('usr/cm_ai_regulation.json') + if fileSize == 0: + result_ok = 0 + print("设备信息配置文件不存在\r\n") + return result_ok + else: + try: + with open("/usr/cm_ai_regulation.json","r",encoding='utf-8') as fd: + try: + self.config_data = ujson.load(fd) #转换成json格式 + if len(self.config_data) != 0: + if "deviceId" in self.config_data:# + self.deviceId = str(self.config_data["deviceId"]) #设备ID + + #存在 + if "deviceSecret" in self.config_data: + self.deviceSecret = str(self.config_data["deviceSecret"]) + #存在 + if "TimeSec" in self.config_data: + self.TimeSec = self.config_data["TimeSec"] + if "IMEI" in self.config_data: + self.imei_new = self.config_data["IMEI"] + if str(self.imei_new) != str(IMEI): #设备IMEI不一样也要重新获取 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + result_ok = 0 + return result_ok + + if len(str(self.deviceId)) != 0 or len(str(self.deviceSecret)) != 0: + result_ok = 1 + else: #m没有存储数据 需要从平台上获取设备信息 + result_ok = 0 + except Exception as error: + print("配置文件的内容不是json格式 保存数据的时候格式不对\r\n") + result_ok = 0 + except Exception as error: + print("打开配置文件失败\r\n") + result_ok = 0 + else: + print("配置文件不存在!!!!\r\n") + result_ok = 0 + + print("cm_ai_regulation result_ok: {} self.config_data:{}\r\n".format(result_ok,self.config_data)) + return result_ok + #写文件信息 + def write_config_msg_file(self,msg): + + print("cm_ai_regulation msg:{}\r\n".format(msg)) + with open("/usr/cm_ai_regulation.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + def get_dev_info(self): #是否需要获取设备信息 + request_result = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + request_result = 0 + return request_result + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/secret/info" + #获取设备ID和设备私钥 + get_dev_storage = self.read_dev_storage_param() #返回1说明已经获取过设备信息 不需要再重新获取了只有 + if get_dev_storage == 0: #还没有获取设备信息需要获取一遍 + #获取设备设备信息地址 + IMEI = modem.getDevImei() #获取IMEI号 + + headers_T ={"Content-Type":"application/json"} + config_data ={ + "deviceNoType":"IMEI", + "deviceNo":str(IMEI), + "productKey":str(self.productKey), + "productId":str(self.productId), + } + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + + result_json = "" + response = 0 + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: + if "data" in result_json: + data_json = result_json["data"] + if "deviceId" in data_json: + self.deviceId = data_json["deviceId"] + if "deviceSecret" in data_json: + self.deviceSecret = data_json["deviceSecret"] + + if len(self.deviceId) != 0 or len(self.deviceSecret) != 0: #获取设备信息成功 保存数据 用做心跳上报 + request_result = 1 + self.config_data["deviceId"] = str(self.deviceId) + self.config_data["deviceSecret"] = str(self.deviceSecret) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "deviceNo":"xxx", + # "productId":"xxx", + # "deviceSecret":"xxx" + # } + # } + else: + request_result = 0 + print("后台返回数据json字段里面没有data字段\r\n") + else: + request_result = 0 + print("后台返回数据失败 可能是设备没有加入产品或者产品私钥或者产品ID对不上\r\n") + except Exception as e: #不是json格式 + print("not json data:{}".format(e)) + request_result = 0 + else: + print("未响应 或者网络异常连接不上后台\r\n") + request_result = 0 + except Exception as e: + print("response error:{}".format(e)) + request_result = 0 + else: + request_result = 1 + return request_result + + #上报心跳数据 + def report_hr_data(self): #设备ID 设备私钥不为空才可以上报 + result_s = 0 + netWorkState = eventMesh.publish("get_network_state") + if netWorkState == 0: #网络异常 + result_s = 0 + return result_s + if len(str(self.deviceId)) != 0 and len(str(self.deviceSecret)) != 0: + + ######################################################### + # { + # "deviceId":"1927659130106658817", + # "deviceSecret":"xmvlRHbEaKPtCqHt", + # "productId":"1927646275585744898", + # "productKey":"iijgiGiTolCblSFE", + # "params": { + # "innerIp": [ + # "127.0.0.1" + # ], + # "netSpeed": "0Mbps", + # "netType": "4G", + # "platform": "RTOS", + # "sdkVersion": "ai_http_1.0", + # "firmwareVersion": "0.0.5.2", + # "imei": "860132060564184", + # "cmei": "", + # "mac": "" + # } + # } + IMEI = modem.getDevImei() #获取IMEI号 + tmp_mac = "" + if len(self.dev_mac) != 0: + tmp_mac = self.dev_mac.replace(':', '-') #将传过来的字符里面的:转换成- + #数据格式内容 + data_json = { + "deviceId":str(self.deviceId), #设备ID + "deviceSecret":str(self.deviceSecret), #设备私钥 + "productId":str(self.productId), #产品ID + "productKey":str(self.productKey), #产品私钥 + "params": { + "innerIp": [ + "127.0.0.1" + ], + "netSpeed": "0Mbps", + "netType": "4G", + "platform": "RTOS", + "sdkVersion": "ai_http_1.0", + "firmwareVersion":str(self.software_version), #设备固件版本号 + "imei": str(IMEI), #设备IMEI号 + "cmei": "", + "mac": str(tmp_mac) #设备MAC地址 + } + } + url = "https://ivs.chinamobiledevice.com:11443/v2/customer/device/report" #post请求上报数据心跳地址 + #获取设备ID和设备私钥 + try: + headers_T ={"Content-Type":"application/json"} #应用是json格式 + response = request.post(url, data=ujson.dumps(data_json),headers =headers_T) #post请求数据 + if response.status_code == 200: #服务器响应成功并返回数据 + try: + content = response.content + c = next(content) + result_json = ujson.loads(c) #将字符串转换成json格式 + print("response.json:{}".format(result_json)) + code = "" + message = "" + success = False + if "code" in result_json: + code = result_json["code"] + if "message" in result_json: + message = result_json["message"] + if "success" in result_json: + success = result_json["success"] + if code == "200" and message == "成功" and success == True: #上报成功返回 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) #获取当前时间戳 用于下次时间判断上报心跳数据 + print("date_tmp :{} time_tmp:{}\r\n".format(date_tmp,time_tmp)) + self.report_state = 1 #表示上报成功 置标志1 12小时之内不清0 12小时之后再次上报清零 + self.TimeSec = str(time_tmp) + self.config_data["TimeSec"] = str(time_tmp) + IMEI = modem.getDevImei() #获取IMEI号 + self.config_data["IMEI"] = str(IMEI) + self.write_config_msg_file(self.config_data) + # { + # "code":"200", + # "message":"成功", + # "success": true, + # "data":{ + # "deviceId":"xxx", + # "protocolTypeTime":"xxx" + # } + # } + result_s = 1 + else: + result_s = 0 + except Exception as e: #不是json格式 + print("response:{}".format(e)) + result_s = 0 + else: + result_s = 0 + except Exception as e: + print("response:{}".format(e)) + result_s = 0 + if REPORT_MODE == 1: #上报方式1 + if result_s == 1: #当前上报数据成功 开启下一个上报心跳数据定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #两个时间戳相减大于24小时啧清0 + timerStart_init = HEARBEAT_REPORT_TIMER_CONFIG*1000+random_integer*1000*60 + print("timerStart_init {} random_integer:{}\r\n".format(timerStart_init,random_integer)) + self.timerStartReportHr.start(timerStart_init,0,self.timerStartReportHrCbOne)#重新开始 单次定时器 + else: #上报方式2 + if self.startTimerState == 0: + self.startTimerState = 1 + self.open_report_start_timer() + else: + result_s = 2 + self.AIRegulation_init() #重新初始化 + return result_s + return result_s + def timerStartReportHrCbOne(self,*argc): + reportStatus = self.report_hr_data() #上报心跳数据接口函数 + print("timerStartReportHrCbOne {}\r\n".format(reportStatus)) + if reportStatus == 0: #当前上报失败 开启1分钟的定时器检测 + self.timerStart.stop() + self.report_err_count = 0 + self.timerStart.start(HEART_REPORT_ERROR_TIMER*1000,1,self.oneMinTimerStartCb)#重新开始 + else: + self.timerStart.stop() + + def oneMinTimerStartCb(self,*argc): + reportStatus = self.report_hr_data() + print("oneMinTimerStartCb {}\r\n".format(reportStatus)) + if reportStatus != 0: # + self.timerStart.stop() + else: + self.report_err_count+=1 + if self.report_err_count >= HEART_REPORT_ERR_MAX_NUM: + self.report_err_count = 0 + self.timerStart.stop() + Power.powerRestart() #重启设备 可能网络异常或者哪里出错了 + + def timerStartReportHrCb(self,*argc): #上报心跳定时器回调 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + random_integer = urandom.randint(-15, 15) #-15 - +15上报时间随机值分钟单位 *60*1000 + data = RTC().datetime() + year = data[0] + month = data[1] + day = data[2] + + if self.report_state == 1: #上报过一次 就等下一个12小时再上报一次 + #当前时间大于上次记录时间加上12小时就上报一次 + next_alarm_time = utime.localtime(int(self.TimeSec)) + old_month = next_alarm_time[1] + old_day = next_alarm_time[2] + old_year = next_alarm_time[0] + # if 1: + # if old_year != year or old_month != month or old_day != day: + # self.report_state = 0 + # self.report_hr_data() + + # else: + if (time_tmp >= self.TimeSec + HEARBEAT_REPORT_TIMER_CONFIG*1000 + random_integer*60*1000) or (old_year != year or old_month != month or old_day != day): #or old_year != year or old_month != month or old_day != day: #上次上报时间戳+12小时时间戳 大于当前时间戳 上报一次 或者年 月 日不一致也上报一次 + self.report_state = 0 + self.report_hr_data() + else: #确保12小时之内上报一次 每一个小时上 + self.report_hr_data()#上报一次心跳数据 + + def open_report_start_timer(self): #1小时的定时器 + self.timerStartReportHr.start(REALY_TIME_COUNT*1000,1,self.timerStartReportHrCb)#1小时定时 + + def timerStartCb(self,*argc):#获取设备信息定时器回调 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:# + self.getDevInforErrCount+=1 + if self.getDevInforErrCount >= 20: + self.getDevInforErrCount = 0 + self.timerStart.stop() + else: + self.getDevInforErrCount = 0 + self.timerStart.stop() + self.report_hr_data()#上报一次心跳数据 + + def AIRegulation_init(self):#AI 纳管 初始化 获取完设备数据后立马上报心跳数据 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") + if IFEXIST == True: + uos.remove("/usr/cm_ai_regulation.json") + self.init_flag = 1 + self.report_state = 0 + self.getDevInforErrCount = 0 + self.report_err_count = 0 + self.timerStartReportHr.stop() + + self.startTimerState = 0 + getDevInfoState = self.get_dev_info() + if getDevInfoState == 0:#开机获取失败了再等30s重新获取 获取二十次都失败就等下次重启设备获取 + self.timerStart.stop() + self.timerStart.start(30*1000,1,self.timerStartCb)#重新开始 开机10分钟内没有获取到设备信息就不获取了需要手动重启设备 + else: #设备开机获取设备信息成功 立马上报一次心跳数据 + self.report_hr_data()#上报一次心跳数据 + +aiRegulation = AIRegulation() + diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_dmp.py b/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_dmp.py new file mode 100644 index 000000000..45962cc11 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/china_mobile_dmp.py @@ -0,0 +1,759 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from ucryptolib import aes +import hashlib +from usr.EventMesh import eventMesh +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") +import modem +import base64 +import request +import ujson +BLOCK_SIZE = 16 +NEED_SAVE_CONFIG_FILE = 0 #是否需要保存上报次数 异常重试次数 时间戳到配置文件 0不保存 1保存 +#中国移动入库 +class chinamobile: + def __init__(self): + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + self.config_data = {} + + self.__net_connected = 0 + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mac_data ="" + self.address = "a.fxltsbl.com" + + self.new_address = "a.fxltsbl.com" + + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + self.init_flag = 0#初始化状态指初始化一次 + self.retryTimer = osTimer()#异常重试定时器 + self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发 + self.heartreportTimer = osTimer()#心跳上报定时器 + + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息 + eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息 + + eventMesh.subscribe("set_dmp_cm_address",self.set_dmp_cm_address)#订阅消息 + eventMesh.subscribe("get_dmp_cm_address",self.get_dmp_cm_address)#订阅消息 + + pass + + def set_dmp_cm_address(self,event,msg):#设置网络是否正常 + self.address = str(msg) + self.new_address = str(msg) + + def get_dmp_cm_address(self,event,msg):#获取网络是否正常 + return self.address + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def set_dev_mac(self,event,msg):#设置BLE MAC地址 + self.mac_data = str(msg) + + def get_dev_mac(self,event,msg):#获取BLE MAC地址 + return self.mac_data + + def sha256_encode(self,key,data):#对数据进行AES256加密 + h = hashlib.sha256() + h.update(key) + crypto_key = h.digest() + #IV是偏移量 默认16个十六进制00 + IV = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + crypto = aes(crypto_key, 2, IV) + + #进行PKCS7Padding填充。 + block_num = len(data) // BLOCK_SIZE+1 + k = len(data) % BLOCK_SIZE + j = len(data) // BLOCK_SIZE + padding = BLOCK_SIZE - k + i = 0 + szDataIn = bytearray(data) + # print(szDataIn) + szDataIn = szDataIn+bytearray(block_num * BLOCK_SIZE -len(data)) + # print(szDataIn) + + for i in range(padding): + szDataIn[j * BLOCK_SIZE + k + i] = padding + # print("szDataIn:{} {} {}\r\n".format(szDataIn,j * BLOCK_SIZE + k + i,padding)) + + indata = bytes(szDataIn) + enc = crypto.encrypt(indata) + #最后将加密AES256的数据转换成base64的编码格式 + msg_tmp = base64.b64encode(enc) + data_encode = msg_tmp.decode('ascii')#转换成字符串 + return data_encode + + #写文件信息 + def write_config_msg_file(self,msg): + + print("write_config_msg_file msg:{}\r\n".format(msg)) + with open("/usr/china_mobie_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(msg,fd) + #读文件信息 + def read_config_msg_file(self): + IFEXIST = ql_fs.path_exists("/usr/china_mobie_config.json") #不存在 + if IFEXIST == True: + with open("/usr/china_mobie_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("read_config_msg_file self.config_data:{}\r\n".format(self.config_data)) + + def china_mobile_first_get_config(self,url): + ##############第一步#######获取采集规则配置####### + brand = "Watch"#品牌 + + model = "Watch"#型号 + appKey = "M100001131"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = "autoRegist"#自注册填autoRegist 心跳配置传输 keepAlive + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + + + #配置拉取数据格式 + config_data = {"endpoint":"{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,preField1,preField2,preField3),"configType":"{}".format(configType)} + + #配置拉取数据上报地址 + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + headers_T ={"Content-Type":"application/json"} + print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data))) + request_result = 0 + result_json = "" + try: + response = request.post(url, data=ujson.dumps(config_data),headers =headers_T) + request_result = 1 + if response.status_code == 200:#服务器响应成功并返回数据 + content = response.content + c = next(content) + result_json = ujson.loads(c) + print("response.json:{}".format(ujson.loads(c))) + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + + if request_result == 0: #请求出错了 + return "" + + + return result_json + + + def first_get_config_json(self):#开机上电获取配置信息 + getresult = 0 + print("first_get_config_json false",self.__net_connected) + if self.__net_connected != 1:#网络不正常 + return getresult + url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address) + result_json = self.china_mobile_first_get_config(url) + if result_json == "": + return 0 + # { + # "reportTime":1440, + # "reportNum":8, + # "heartBeatTime":1440, + # "retryInterval":10, + # "retryNum":1 + # }#默认采集规则配置 + #默认参数 + + retryInterval = self.retryInterval + heartBeatTime = self.heartBeatTime + reportTime = self.reportTime + reportNum = self.reportNum + retryNum = self.retryNum + new_address = self.address + print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,new_address)) + if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档 + rspCode = result_json["rspCode"] + rspCode_zh = result_json["rspMsg"] + if rspCode == "0000" or rspCode_zh == "成功": + getresult = 1 + if "result" in result_json: + msg_data = result_json["result"] #采集规则配置信息 + if "ruleConfig" in msg_data:#不存在就是空 + msg_data = msg_data["ruleConfig"] + msg_data = ujson.loads(msg_data)#转换成json格式 + if "reportTime" in msg_data: + self.reportTime = int(msg_data["reportTime"]) + if "heartBeatTime" in msg_data: + self.heartBeatTime = int(msg_data["heartBeatTime"]) + if "reportNum" in msg_data: + self.reportNum = int(msg_data["reportNum"]) + if "retryInterval" in msg_data: + self.retryInterval = int(msg_data["retryInterval"]) + if "retryNum" in msg_data: + self.retryNum = int(msg_data["retryNum"]) + if "address" in msg_data: + self.address = str(msg_data["address"]) + print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum,self.address)) + + print("true") + else: + print("false") + + if getresult == 1:#请求配置文件成功 + if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or\ + (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != new_address): + #重新走注册流程 清空报错次数 记录当前时间戳 + print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致 + self.config_data["reportTime"] = self.reportTime + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportNum"] = self.reportNum + self.config_data["retryNum"] = self.retryNum + self.config_data["retryInterval"] = self.retryInterval + # self.config_data["address"] = str(self.address) + if new_address != self.address : #服务器下发和本地不一致需要用服务器下发的最新的IP 并把这个IP发送到BLE保存 + eventMesh.publish("send_dmp_cm_address_toBLE",str(self.address)) + + self.write_config_msg_file(self.config_data) #保存新的配置文件 + return 2 + return getresult #1 获取成功 0 获取失败 + + + def china_mobile_autoregist_infor(self,url,configType_data): + #########################第二步############自注册上报################### + #设备自注册上报 + dev_autoregist_result = 0 #默认是1成功 0是失败 + if self.__net_connected != 1:#网络不正常 + return dev_autoregist_result + #密钥 + key = "f74c005251dc40c4b64a283827da3812" + + brand = "{}".format("XXX")#品牌 + + model = "Watch"#型号 + appKey = "M100001131"#不需要就填***appKey 厂商标识 + sdkVersion = "***"#非SDK传输 + apiVersion = "4.0.1"#接口定义 固定4.0.1 + apiType = "I"#非Android + templateId = "TY000014"#根据产品分类在平台查询 + IMEI = modem.getDevImei() + imei1 = IMEI#IMEI1或者CMEI + imei2 = "***" + configType = configType_data#自注册填autoRegist 心跳配置传输 keepAlive 暂时不用 + preField1 = "***"#预留字段1 + preField2 = "***"#预留字段2 + preField3 = "***"#预留字段3 + + #不需要加密 #||分隔符不能超过11个 否则平台会解析出错 + config_data = "{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,configType,preField1,preField2) + + #需要加密的数据明文 + if (len(self.mac_data) == 0):#获取失败了 + self.mac_data = "***" + + MAC = self.mac_data + # base64_MAC = sha256_encode(key,MAC) + RAM = "32MB" + # base64_RAM = sha256_encode(key,RAM) + ROM = "144MB" + # base64_ROM = sha256_encode(key,ROM) + CPU = "YH601S" + # base64_CPU = sha256_encode(key,CPU) + sysVersion = "OpenHarmony 3.2" + # base64_sysVersion = sha256_encode(key,sysVersion) + if (len(self.software_version) == 0):#获取失败了 + self.software_version = "Watch V1.0" + softwareVer = self.software_version + # base64_softwareVer = sha256_encode(key,softwareVer) + softwareName ="Watch" + # base64_softwareName = sha256_encode(key,softwareName) + volte="0" #0:开;1:关;-1:不支持 + # base64_volte = sha256_encode(key,volte) + netType="4G" + # base64_netType = sha256_encode(key,netType) + + resolution="466*466" + # base64_resolution = sha256_encode(key,resolution) + + screenSize = "1.43" + # base64_screenSize = sha256_encode(key,screenSize) + wearingStatus ="-1" + # base64_wearingStatus = sha256_encode(key,wearingStatus) + + networkStatus ="1"#1:连接;0:未连接;-1:不支持 + + routerMac = "***" + + wifiMac = "***" + # base64_networkStatus = sha256_encode(key,networkStatus) + encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus,routerMac,wifiMac] + print(len(encyr_data)) + encyr_new_data=[] + for i in range(len(encyr_data)): + tmp_data = self.sha256_encode(key,encyr_data[i]) + encyr_new_data.append(tmp_data) + + # deviceInfo_tmp = { + # "bluetoothMac":"{}".format(base64_MAC),#mac地址可填可不填 + # "ram":"{}".format(base64_RAM),#ram信息 + # "rom":"{}".format(base64_ROM),#rom信息 + # "cpu":"{}".format(base64_CPU),#cpu信息 + # "sysVersion":"{}".format(base64_sysVersion),#操作系统版本号 + # "softwareVer":"{}".format(base64_softwareVer),#固件版本号 + # "softwareName":"{}".format(base64_softwareName),#固件名称 + # "volte":"{}".format(base64_volte),#volte开关 默认是开 + # "netType":"{}".format(base64_netType),#当前网络类型4G + # "resolution":"{}".format(base64_resolution),#屏幕分辨率466*466 + # "screenSize":"{}".format(base64_screenSize),#屏幕尺寸默认1.43 + # "wearingStatus":"{}".format(base64_wearingStatus),#佩戴状态不支持 + # "networkStatus":"{}".format(base64_networkStatus)#网络状态 + + # } + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]) #wifi mac + } + json_data = ujson.dumps(deviceInfo_tmp)#需要转义的字符串 + + send_autoregist = { + "endpoint":config_data, + "deviceInfo":"{}".format(json_data) + } + + test_data = ujson.dumps(send_autoregist)#需要转义的字符串 + print("test_data:{}".format(test_data)) + headers_T ={"Content-Type":"application/json"} + request_result = 0 + print("shangbao address:{}\r\n".format(url)) + try: + response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T) + request_result = 1 + result_json = "" + print("response success:response.status_code{}\r\n".format(response.status_code)) + if response.status_code == 200: + dev_autoregist_result = 1 + content = response.content + c = next(content) + result_json = ujson.loads(c)#解析成json格式 + else: + dev_autoregist_result = 0 + + + if "rspCode" in result_json: + rspCode = result_json["rspCode"] + rspMsg = result_json["rspMsg"] + print("response success:rspCode{} {}\r\n".format(rspMsg,rspCode)) + if rspCode == "0000" or rspMsg == "成功": + dev_autoregist_result = 1 + else: + dev_autoregist_result = 0 + else: + dev_autoregist_result = 0 + print("response success:\r\n") + return dev_autoregist_result + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + + if request_result == 0:#请求出错了 + dev_autoregist_result = 0 + return dev_autoregist_result + + + def read_config_file(self):#获取配置文件,一开机是没有配置文件的 + + self.read_config_msg_file()#读文件信息 + if self.config_data != {}: + if "retryInterval" in self.config_data: + self.retryInterval = int(self.config_data["retryInterval"]) + if "retryNum" in self.config_data: + self.retryNum = int(self.config_data["retryNum"]) + if "heartBeatTime" in self.config_data: + self.heartBeatTime = int(self.config_data["heartBeatTime"]) + if "reportTime" in self.config_data: + self.reportTime = int(self.config_data["reportTime"]) + if "reportNum" in self.config_data: + self.reportNum = int(self.config_data["reportNum"]) + if "address" in self.config_data: + self.address = str(self.config_data["address"]) + + #终端本地需要保存本地的数据 + # self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + # self.report_Num_old = 0#保存本地 + # self.retryNum_old = 3#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + if "reportTime_Sec" in self.config_data: + self.reportTime_Sec = int(self.config_data["reportTime_Sec"]) + if "report_Num_old" in self.config_data: + self.report_Num_old = int(self.config_data["report_Num_old"]) + if "retryNum_old" in self.config_data: + self.retryNum_old = int(self.config_data["retryNum_old"]) + + print("read_config_file self.config_data:{} ".format(self.config_data)) + def retryTimerCb(self,*argc):#异常重试机制定时器回调 + #保存本地 + self.retryNum_old+=1 #1 self.reportNum = 1 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["retryNum_old"] = self.retryNum_old + self.write_config_msg_file(self.config_data) + print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old)) + self.search_report_num_step() + pass + def reportTimerIntervalError(self): + self.retryNum_old = 0#保存 + self.report_Num_old = 0#保存 定时清空数据 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.search_report_num_step()#重新查询 + pass + def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤 + print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{} self.reportTime:{}\r\n".format(self.retryNum_old,self.retryNum,self.reportTime)) + + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#self.retryNum_old > 10#结束HTPP下一个最大频率周期时间间隔流程 + print("error_retryNum_step:self.retryNum_old >= self.retryNum\r\n") + self.reportTimerIntervalError() + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalError)#重新开始 需要清空数据 + else: + get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端 + if get_result == 0:#获取失败或者没有网络 走异常重试机制 + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step:self.retryTimer.start :{} {} {}\r\n".format(self.retryInterval,self.report_Num_old,self.reportNum)) + self.checkMaxReportNum()#检查上报最大次数 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + pass + else:# + + #第一步触发自注册 + if get_result == 2:#请求的配置文件和本地不一致重启 + self.retryNum_old = 0#保存本地 配置文件不同重启模组 清空异常重试的报错次数 + # self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + # if NEED_SAVE_CONFIG_FILE == 1: + # self.config_data["report_Num_old"] = self.report_Num_old + # self.config_data["retryNum_old"] = self.retryNum_old + # self.write_config_msg_file(self.config_data) + + self.china_mobile_init_param()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件 + self.search_report_num_step() + return + + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("error_retryNum_step self.report_Num_old:{}\r\n".format(self.report_Num_old)) + if self.checkMaxReportNum() == 1:#检查上报最大次数 + self.search_report_num_step()#重新查询 + return + report_result = self.onself_regist_report_cb()#注册 + + #第二步触发心跳上报次数 + if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳 + self.heartreportTimer.stop() + self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb) + + def heartreportTimerCb(self,*argc): + self.heart_report_cb() + + def retpoertTimerClear(self): + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.retpoertTimerC.stop()#关闭定时器 + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + pass + def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + # + date_tmp = utime.localtime() + currentTime = utime.mktime(date_tmp)#获取时间戳 + reportTime = self.reportTime_Sec + print("check_current_time:time_tmp - self.reportTime_Sec:{} currentTime:{} self.reportTime*60:{}".format(reportTime, currentTime,self.reportTime*60)) + if currentTime >= reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据 + #在规定时间内上报次数大于8次就要等下一个10分钟 或者1440分了开个定时器 + print("currentTime >= reportTime:\r\n") + self.retpoertTimerClear() + else:#否则次数置零,记录一下(当前时间+reportTime)时间 + time_count = (reportTime - currentTime) #self.reportTime_Sec永远比time_tmp大 + print("time_count:{}".format(time_count)) + print("currentTime < reportTime:\r\n") + self.retpoertTimerC.start(time_count*1000,0,self.retpoertTimerCB) + + + # 第一次请求的时候,记录一下(当前时间+reportTime)时间与次数,如果次数小于最大次数,直接返回true。 + # 如果次数大于最大次数,则判断一下当前时间是否超过上次设置的时间,如果超过了,则表示超过最大次数;否则次数置零,记录一下(当前时间+reportTime)时间。 + def retpoertTimerCB(self,*argc):#按照剩余的时间做定时器 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + + + def search_report_num_step(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + def search_report_num_step_init(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.reportTime_Sec == 0: + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + + def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器 要清空数据 + print("reportTimerIntervalCb\r\n") + self.search_report_num_step()#重新查询 + + def onself_regist_report_cb(self):#自注册上报信息 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("onself_regist_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + self.report_Num_old+=1 ##保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + #设备自注册上报信息 + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址 + confing_type = "autoRegist"#上报传输配置 + result = self.china_mobile_autoregist_infor(url,confing_type) + + + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum()#检查上报最大次数 + if self.checkMaxRetryNum() == 1: + print("retryTimerCb timer22")#异常重试过多重新间隔reportTime注册流程 关闭所有的定时器 + self.search_report_num_step()#重新查询 + return 0 + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return 0 + else: + if self.checkMaxReportNum() == 1: + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) + return 0 + else: + return 1 + def checkMaxReportNum(self):#检查上报次数最大值 + print("checkMaxReportNum :self.reportNum :{} self.report_Num_old:{}\r\n".format(self.reportNum,self.report_Num_old)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + return 1 + else: + return 0 + + def checkMaxRetryNum(self):#检查上报错误次数 + print("checkMaxRetryNum :self.retryNum:{} self.retryNum_old:{}\r\n".format(self.retryNum_old,self.retryNum)) + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程 + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop()#关闭心跳定时器 + return 1 + else: + return 0 + + def heart_report_cb(self):#心跳上报信息 + + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.report_Num_old+=1#保存本地 + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + print("heart_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime,self.reportTime_Sec)) + + url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址 + confing_type = "keepAlive"#上报传输配置 + result = self.china_mobile_autoregist_infor(url,confing_type) + if result != 1: + #触发异常重试进制 + self.checkMaxReportNum() + if self.checkMaxRetryNum() == 1:#异常重试过多重新间隔reportTime注册流程 + self.search_report_num_step()#重新查询 + return + self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) + return + if self.checkMaxReportNum() == 1:#上报次数大于8次 + self.search_report_num_step()#重新查询 + return + + def china_mobile_init_param(self):#初始化 + + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + print("get_factory_status:{}\r\n".format(status)) + if status == 0:#恢复出厂或者新的机器需要清空不必要的数据 + if self.init_flag == 0:#只初始化一次 + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + #先清空再写入默认参数 + self.init_flag = 1 + self.retryInterval = 10 + self.retryNum = 1#异常重试最大次数 + self.heartBeatTime = 1440#心跳上报频率 单位分钟 + self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数 + self.reportNum = 8 #最大上报次数 + + self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用 + self.report_Num_old = 0#保存本地 + self.retryNum_old = 0#保存本地 + get_address = eventMesh.publish("get_dmp_cm_address") + if get_address == None:#获取出来地址是空的使用适配地址 + self.address = "a.fxltsbl.com"#默认 + else: #恢复出厂使用BLE传送过来的地址 + self.address = str(eventMesh.publish("get_dmp_cm_address")) + + self.config_data["retryInterval"] = self.retryInterval + self.config_data["retryNum"] = self.retryNum + self.config_data["heartBeatTime"] = self.heartBeatTime + self.config_data["reportTime"] = self.reportTime + self.config_data["reportNum"] = self.reportNum + # self.config_data["address"] = self.address + if NEED_SAVE_CONFIG_FILE == 1: + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["report_Num_old"] = self.report_Num_old + self.config_data["retryNum_old"] = self.retryNum_old + + self.write_config_msg_file(self.config_data) + #读配置文件 + self.read_config_file()#只读一下配置文件 + + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + def china_mobile_init(self): + self.china_mobile_init_param() + #查询上报总数流程 + self.search_report_num_step_init() + + + + +chinamobileCb = chinamobile() + + + + + + + + + + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/httpota.py b/code/sdk/files/w9/fs/user/system/cat1ota/httpota.py new file mode 100644 index 000000000..1f7ff897c --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/httpota.py @@ -0,0 +1,43 @@ +#远程升级 + +import fota +import utime +import log +import checkNet + +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys + +#远程升级 +import uos + + +# 设置日志输出级别 + +class httpota: + def __init__(self): + print("httpota init") + + + def run(url_1,url_2): + print("httpDownload...{}".format(url_1)) + print("httpDownload...{}".format(url_2)) + # format(str(url_2))) + fota_obj = fota() # 创建Fota对象 + # res = fota_obj.httpDownload(str(url_1),str(url_2)) + res = fota_obj.httpDownload(url1="{}".format(url_1),url2="{}".format(url_2)) + if res != 0: + print.error("httpDownload error") + return + print("wait httpDownload update...") + utime.sleep(2) + # Power.powerRestart() + +# httpota = httpota() +# httpota.run("http://snicker.com.cn:8089/FD230/V18-V19OTA") \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/main.py b/code/sdk/files/w9/fs/user/system/cat1ota/main.py new file mode 100644 index 000000000..3d70c7cac --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/main.py @@ -0,0 +1,15 @@ +import example +main_flag = 1 +try: + from usr.slipService import slipservice + from usr.tcpService import TcpService + import usr.checkota + example.exec('/usr/main_init.py') + print("启动成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + print("启动失败!!!!!\r\n".format(e)) + + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/main_init.py b/code/sdk/files/w9/fs/user/system/cat1ota/main_init.py new file mode 100644 index 000000000..9ed74f7ce --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/main_init.py @@ -0,0 +1,77 @@ +import example +import osTimer +import ql_fs +import log +import sms +from misc import Power +ota_flag = 0 +try: + from usr.EventMesh import eventMesh + from usr.telecom_dmp import telecomDmpCb + from usr.china_mobile_dmp import chinamobileCb + from usr.cat1Service import cat1service + ota_flag = 1 + print("检测文件成功!!!!!!!\r\n") +except Exception as e: + print("检测文件失败!!!!!!!{}\r\n".format(e)) + ota_flag = 0 +tmp_dir = ql_fs.path_exists("/usr/TmpPyFile") #临时存放的文件夹 +if tmp_dir == True: + try: + ql_fs.rmdirs("/usr/TmpPyFile") + print("移除 TmpPyFile 成功!!!!!!!\r\n") + except Exception as e: + print("移除 TmpPyFile 失败!!!!!!!{}\r\n".format(e)) + +sms_get = sms.getSaveLoc() +if(sms_get != -1): + sms_lacv = sms_get[0][0] + if sms_lacv != 'SM': #每次开机设置一下短信的存储位置 + sms.setSaveLoc('SM', 'SM', 'SM') + +PROJECT_VERSION = "PY_MAIN_V3" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pymain" + + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +cat1service_log = log.getLogger("pymain") + + +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V2" + elif (app_type == "pysrv"): + return "PY_SRV_V2" + +#如果没有configfile则创建它 +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + cat1service_log.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue)) + cat1service_log.info("{}".format(config_data)) + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +def checkota_cb(arg): + print("start checkota!!") + example.exec('/usr/checkota.py') +# 创建os定时器 + +timer = osTimer() +# 启动定时器,参数依次为时间、是否循环、回调函数 定时器超时的时间(单位ms) +# 开机delay 20秒后执行一次ota升级 +timer.start(20000,0,checkota_cb) +print("checkota py end!!") diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/slipService.py b/code/sdk/files/w9/fs/user/system/cat1ota/slipService.py new file mode 100644 index 000000000..eddba83fb --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/slipService.py @@ -0,0 +1,20 @@ + +import log +import slip +from machine import UART +class slipServiceInit: + AP = 0 # SLIP_INNER + STA = 1 # SLIP_OUTER + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + slip.destroy() + print('slip uart={0}'.format (self.__uart)) + + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + print('slip netif construct fail') + else: + print('slip netif construct success') + +slipservice = slipServiceInit() \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/system/cat1ota/telecom_dmp.py b/code/sdk/files/w9/fs/user/system/cat1ota/telecom_dmp.py new file mode 100644 index 000000000..28c8dc69c --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1ota/telecom_dmp.py @@ -0,0 +1,432 @@ +import app_fota +from misc import Power +import modem +import ujson +import request +import ql_fs +import checkNet +import sys +import sim + +from queue import Queue +import usys +import _thread +import fota +import utime +import log +import uos +import osTimer +import net +import ql_fs +from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") +import modem +import base64 +import request +import ujson +REGIST_MAX_NUM=10 #自注册的最大次数 现在是默认是10次 +REGIST_INTERVAL_TIMER=60*60 #自注册失败的间隔时间 1小时 +REGIST_POWER_ON_TIME=5*60 #开机5分钟内就必须自注册触发 +MULTI_DAY_RESEND_T = 30*24*60*60-12*60*60#多日重发的机制的周期T 30天 +MULTI_DAY_RESEND_t = 12*60*60#多日重发的机制的周期t 0.5天 +def get_report_url_website(mode = None):#获取上报网址 + url = "http://zzhc.vnet.cn:9998/"#上报网址 + return url + +class telecomDmp: + def __init__(self): + self.config_data = {} + self.check_timer = osTimer()#1小时定时器 + self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制 + self.telecomTimer = osTimer() + self.multimer_count = 0#多日重发机制周期Count + self.multimer_init = 0 + self.power_on_multiflag = 0 + self.timer_count = 0 + self.timerPowerNum = 0 + self.telecom_init_state = 0#初始化状态开机检查标识 + self.isRegistOk = 0#注册成功 + eventMesh.subscribe("get_telecom_init_state",self.get_telecom_init_state) + eventMesh.subscribe("set_telecom_init_state",self.set_telecom_init_state) + + eventMesh.subscribe("set_dmp_power_num",self.set_dmp_power_num) + eventMesh.subscribe("get_dmp_power_num",self.get_dmp_power_num) + + eventMesh.subscribe("get_dmp_power_timer_count",self.get_dmp_power_timer_count) + + self.regist_queue = Queue() + _thread.stack_size(10*1024) + _thread.start_new_thread(self.regist_queue_thread, ()) + _thread.stack_size(8*1024) + + eventMesh.subscribe("publish_message_event_registinfor",self.publish_message_event_registinfor) + self.__net_connected = 0 + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("save_iccid_data",self.save_iccid_data)#订阅消息 保存ICCID + eventMesh.subscribe("get_iccid_data",self.get_iccid_data)#订阅消息 保存ICCID + + eventMesh.subscribe("set_regist_time",self.set_regist_time)#订阅消息 保存ICCID + eventMesh.subscribe("get_regist_time",self.get_regist_time)#订阅消息 保存ICCID + + self.regist_timeSec = 0 + self.iccid_data = "" + self.software_version = "" + self.mulit_day_timesec = 0#多日重发的开始的时间戳 + pass + def regist_queue_thread(self): + while True: + data = self.regist_queue.get() + #EventMesh.debug_log("regist_queue:data = {}".format(data)) + if data != None: + try: + data["func"](data["data"]) + except Exception as e: + print("regist_queue:ERROR:{}".format(e)) + usys.print_exception(e) + def publish_message_event_registinfor(self,event,msg): + self.regist_queue.put(msg) + + def publish_regist_event_cb(self, *args, **kwargs): + eventMesh.publish("publish_message_event_registinfor",{"func":self.timer_cb,"data":0}) + + def set_network_state(self,event,msg):#设置网络是否正常 + self.__net_connected = int(msg) + + def get_network_state(self,event,msg):#获取网络是否正常 + return self.__net_connected + + def set_dev_version(self,event,msg):#获取固件版本号 + self.software_version = str(msg) + + def get_dev_version(self,event,msg):#获取固件版本号 + return self.software_version + + def save_iccid_data(self,event,msg): + self.iccid_data = str(msg)[6:]#ICCID: + print("write_config_msg_file msg:{}\r\n".format(msg)) + self.config_data["ICCID"]=self.iccid_data + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + #读文件信息 + def get_iccid_data(self,event,msg): + + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_iccid_data self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "ICCID" in self.config_data: + value = self.config_data["ICCID"] + self.iccid_data = str(value) + else: + self.iccid_data = "" + print("get_iccid_data self.config_data end:{}\r\n".format(self.config_data)) + return self.iccid_data + + def set_regist_time(self,event,msg):# + self.regist_timeSec = str(msg)[7:]#REGIST: + print("set_regist_time msg:{}\r\n".format(msg)) + self.config_data["REGIST"]=self.regist_timeSec + with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd: + ujson.dump(self.config_data,fd) + + def get_regist_time(self,event,msg):# + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + with open("/usr/telecom_config.json","r",encoding='utf-8') as fd: + self.config_data = ujson.load(fd) + print("get_regist_time self.config_data:{}\r\n".format(self.config_data)) + if self.config_data != {}: + if "REGIST" in self.config_data: + value = self.config_data["REGIST"] + self.regist_timeSec = int(value) + else: + self.regist_timeSec = 0 + return self.regist_timeSec + + + def get_sim_state(self):#获取sim状态 不为1是sim异常 + return sim.getStatus() + + def get_sim_iccid(self):#获取sim的iccid + return sim.getIccid() + + def get_sim_imsi(self):#获取sim的imsi + return sim.getImsi() + def get_dev_imei(self):#获取设备的imei号 + return modem.getDevImei() + + def telecom_regeist_infor(self):#自注册信息 可变更 + network_state = eventMesh.publish("get_network_state") + print("telecom_regeist_infor :",network_state,self.isRegistOk,REGIST_INTERVAL_TIMER,MULTI_DAY_RESEND_T,MULTI_DAY_RESEND_t,REGIST_POWER_ON_TIME) + if network_state == 0:# 第一次进入网络不正常就需要开启1小时定时器 等待下一个周期判断网络是否正常 需要判断网络是否正常 不正常就不去触发自注册了 就等待下一次 如果10次都不成功 就等一下次开机再去自注册 + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + return + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + + print("iccid!!!!!!!!!!iccid {} read_iccid:{}".format(iccid,read_iccid)) + if read_iccid != "": + if str(read_iccid) == str(iccid):#两者相同 并且本地有保存 不再自注册了 说明已经自注册过了 + print("already registed!!!!!!") #已自注册过 + self.isRegistOk = 1 + + if self.isRegistOk == 1: + print("multiple_day_resend!!!!!!\r\n") + self.multiple_day_resend() + return + self.telecom_regist_infor_init()#自注册初始化函数 + if self.isRegistOk == 0: + self.timer_count+=1 + print("self.timer_count:{}".format(self.timer_count)) + if self.timer_count < REGIST_MAX_NUM:#总共是10次 10次结束还没有自注册成功就等下一次开机自注册 + self.check_timer.start(REGIST_INTERVAL_TIMER*1000,0,self.publish_regist_event_cb)#不需要循环定时器 + else: + self.multiple_day_resend() + + def telecom_regist_infor_init(self):#自注册的数据部分 + iccid = self.get_sim_iccid() + read_iccid = eventMesh.publish("get_iccid_data") + if read_iccid == None: + read_iccid = "" + url = get_report_url_website(None)#上报网址 根据需要更改上报网址 + if iccid == -1: + iccid = str("FF")#为空就填写FF + + IMSI = self.get_sim_imsi() + if IMSI == -1:#没有卡 则填FF + IMSI = str("FF") + imei = self.get_dev_imei() + if imei == -1: + imei = str("FF") + + data_tmp = net.getCellInfo() #会适当卡个3-5s + i = 0 + cell_data = 0 + if(len(data_tmp) >= 1): + for cell in data_tmp: + if i == 2:#在list里面最多就三个元素 最后一个是LTE的数据 + if cell != []: + for tup in cell: + print("tup:{}".format(tup)) + if tup[0] == 0 and len(tup) > 0:#第0个代表当前服务的小区CELLID 7位16进制数 + cell_data = tup[1]#这个是十进制数需要自行转换成十六进制数 + print(cell_data) + break + i+=1 + # cell_data = 0 + cell_data = "%07x"%(cell_data)#7位16进制数不够前面补0 + print(cell_data) + sendCellid = "{}".format(cell_data) + REGVER = "12.0"#当前数据域协议版本号 + MODEL = "TXB-Watch Soar"#机型字段 -前面是厂商名 -后面是设备名 + get_dev_version = eventMesh.publish("get_dev_version")#订阅消息 + if get_dev_version == None: + get_dev_version = "" + SWVER = get_dev_version #软件版本号 + UETYPE = "12"#终端类型 12是智能手表 11是儿童手表 + SIM1ICCID = iccid + SIM1LTEIMSI = IMSI + MACID = ""#可用WALN的地址 终端布支持WLAN 就是不可上网 + OSVER = "RTOS"#操作系统版本号 + IMEI1 = imei#"876226002021717"#imei + SIM1CELLID = sendCellid#下发的小区ID + data = { + "REGVER":REGVER, + "MODEL":MODEL, + "SWVER":SWVER, + "UETYPE":UETYPE, + "SIM1ICCID":SIM1ICCID, + "SIM1LTEIMSI":IMSI, + "MACID":MACID, + "OSVER":OSVER, + "IMEI1":IMEI1, + "SIM1CELLID":SIM1CELLID, + "NETWORKTYPE":4 + } + data_infor=ujson.dumps(data)#将字典转换成json格式 + json_bytes = bytes(data_infor, 'utf-8')#转换成字节数 + data_encode = base64.b64encode(json_bytes)#再转换成base64的编码格式 密文 + print("data_infor:{} data:{}".format(data_encode,data)) + headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写 + request_result = 0 + try: + response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T) + request_result = 1 + if response.status_code == 200 : #返回状态码 200服务器正常解析数据 + content = response.content#后台返回的结果 + c = next(content) + + jsload_data = ujson.loads(c) + print("jsload_data:{}".format(ujson.loads(c))) #{"resultCode": "0","resultDesc": "Success"} + if "resultCode" in jsload_data or "resultDesc" in jsload_data:#返回结果码值 + resultCode = jsload_data["resultCode"]#结果解析 "0" 成功 "1" 解码错误 "2" 校验错误 + resultDesc = jsload_data["resultDesc"]#Success 表示自注册成功 + + if resultCode == "0" or resultDesc == "Success":#注册成功退出当前注册 保存当前的ICCID 不在进行自注册了 + iccid = self.get_sim_iccid()#获取当前SIM的ICCID + if iccid != -1:#读到ICCID + self.timer_count = 0 + self.check_timer.stop() + self.isRegistOk = 1#已完成自注册的标识 + iccid_buf =str("ICCID:")+str(str(iccid)) + eventMesh.publish("save_iccid_data",iccid_buf) + self.multiple_day_resend() + #上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域 + print("regist success:!!!!!") + return 1 + if resultCode == "1": + print("Decode error")#解码错误 设备编码不正确 + return 0 + + if resultCode == "2":# + print("Check error")#校验错误 设备里面数据不正确 有些数据不应该为空 + return 0 + + except Exception as e: + print("response:{}".format(e)) + request_result = 0 + return 0 + + def timer_cb(self,data):#定时器回调 + self.telecom_regeist_infor()#重新进行自注册 + pass + # 多日重发功能要求: + # 1) 多日重发是指:在重发周期 T 内,如果没有功能性触发数据域自注册(触发发送且发送成功), + # 则终端应根据当前终端实时信息组织数据域自注册(不能直接拿上一周期的内容不变而重发)内容 + # 并发送的过程; + # 2) 多日重发的时间间隔周期 T 设置为 30 天; + # 3) 多日重发的过程应设置为:功能性(比如换卡等)触发数据域自注册后,立即启动定时器 t(t + # 的初始值应设为 0.5 天)开始重发计时,以后每当 t 时间等于 T 的整数倍(t=N*T)时,终端就进 + # 行数据域自注册发送,发送后 t 不要清零不要初始化,只有当功能性触发数据域自注册后,t 才初 + # 始化,t 的初始化值为 0.5 天。 + # Multiple day resend + def multiple_day_resend(self):#多日重发机制函数 没有发送数据域或者发送成功 + + t = 12 #计时周期 按照0.5天 也就是12小时来计算 + T = 30*24 #周期为30天 计算30天的总共小时数 + # t = N*T#只有t为T的整数倍就需要重发数据域自注册 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.multimer_init == 1:#已注册过或者开机5分钟之内没有注册 或者注册成功就开始出发多日重发机制 + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t#初始值多加12小时 #初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + return + self.multimer_init = 1 + #设置开始时间戳 + get_timesec = eventMesh.publish("get_regist_time")#一开机初始化为0 没有保存过数据 如果保存过就用保存的时间 + if get_timesec == 0: + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + else: + self.mulit_day_timesec = get_timesec + self.multiDayResend_timer.start(60*60*1000,1,self.multiDayResendTimer_Cb)#一分钟计时 + + def multiDayResendTimer_Cb(self,*argc):#多日重发机制定时器回调函数 + T = 30*24*60*60 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)+MULTI_DAY_RESEND_t#获取时间戳 + + if time_tmp < self.mulit_day_timesec:#如果当前时间戳小于保存的时间戳 + self.mulit_day_timesec = time_tmp + print("time_tmp: self.mulit_day_timesec:\r\n",time_tmp,self.mulit_day_timesec) + + if time_tmp - self.mulit_day_timesec >= MULTI_DAY_RESEND_T:#一个周期的时间到了重发注册一次 + network_state = eventMesh.publish("get_network_state") + print("get_network_state:\r\n",network_state) + if network_state == 0:#网络不正常就不需要重发了等下一个周期 + return + result = self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t + if result == 0: #上报出错了 + return + self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天 + REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec) + eventMesh.publish("set_regist_time",REGIST_buf) + + + def set_telecom_init_state(self,event,msg):#开机5分钟内检查是否有联网 有一次联网就关闭检查 + self.telecom_init_state = msg + + def get_telecom_init_state(self,event,msg): + return self.telecom_init_state + + def get_dmp_power_timer_count(self,event,msg):#开机后限定5分钟内完成自注册 + return REGIST_POWER_ON_TIME + + def get_dmp_power_num(self,event,msg):#开机限定次数最多十次 十次不成功就等下一次开机 或者多日重发机制 + print("get_dmp_power_num:{}".format(self.timerPowerNum)) + return self.timerPowerNum + + def set_dmp_power_num(self,event,msg): + print("set_dmp_power_num:{}".format(msg)) + self.timerPowerNum = msg + def clear_storage_data(self): + IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在 + if IFEXIST == True: + uos.remove("/usr/telecom_config.json") + isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 + if isStorage == True: + uos.remove("/usr/china_mobie_config.json") + print("clear_storage_data;{} {}".format(IFEXIST,isStorage)) + + + def telecom_dmp_power_on_init(self):#开机初始化一次检测 + if eventMesh.publish("get_telecom_init_state") == 1:#发送消息获取对应的值 + return + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#开机检查 + if eventMesh.publish("get_telecom_init_state") == 0:#开机初始化一次 + status = eventMesh.publish("get_factory_status") + if status == None: + status = 0 + if status == 0:#恢复出厂过需要清空存储数据 + self.clear_storage_data() + pass + self.telecomTimer.start(1*1000,0,self.fun_cb) + eventMesh.publish("set_telecom_init_state",1) + + def fun_cb(self,*argc): + self.telecom_regeist_infor()#开机初始一次自注册信息 + pass + def telecom_dmp_power_on_count(self):#开机计时判断最多十次 + if eventMesh.publish("get_telecom_init_state") != 1:#在开机五分钟之内只要一次联网正常就不需要再检查是否网络正常去自注册了 + if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#10+1 + num = eventMesh.publish("get_dmp_power_num") #开机计时 如果开机5分钟内没有一次网络正常的话 当前开机自注册不生效 等待下一次开机自注册触发 或者触发多日重发机制 + num+=1 + eventMesh.publish("set_dmp_power_num",num)#次数累计加一 + else: + if self.power_on_multiflag == 1: + return + self.power_on_multiflag = 1 + self.multiple_day_resend() + pass + +telecomDmpCb = telecomDmp() + + + + + + + + + + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/cat1Service.py b/code/sdk/files/w9/fs/user/system/cat1otaudp/cat1Service.py new file mode 100644 index 000000000..f0d46dc3b --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1otaudp/cat1Service.py @@ -0,0 +1,682 @@ +import usocket +import log +import utime +import slip +import audio +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import dataCall +import voiceCall +import net +import osTimer +import sim +import modem +import utime +import checkNet +import atcmd +import ql_fs +import pm +import sms + +from usr.EventMesh import eventMesh + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +CAT1_SERVICE_HEAD = 'FE' +PROJECT_NAME = "Cat1SlipUDPService" +PROJECT_VERSION = "PY_SRV_V17" +CONFIG_JSON="/usr/system_config.json" +CURRENT_APP_TYPE="pysrv" + +voiceCall.setVolume(10) +lpm_fd = pm.create_wakelock("system_lock", len("system_lock")) +pm.wakelock_lock(lpm_fd) +telecomTimerCount = 0 +def get_versionkeyname_by_py(app_type): + return str("{}version".format(app_type)) + +def get_default_versionvalue_by_py(app_type): + if (app_type == "pymain"): + return "PY_MAIN_V2" + elif (app_type == "pyota"): + return "PY_OTA_V14" + elif (app_type == "pysrv"): + return "PY_SRV_V16" + +if not ql_fs.path_exists(CONFIG_JSON): + data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)} + ql_fs.touch(CONFIG_JSON,data) + +def set_version_to_json_config(app_type,keyvalue): + try : + config_data = ql_fs.read_json(CONFIG_JSON) + config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue}) + ql_fs.touch(CONFIG_JSON, config_data) + except Exception as e: + clog.error("set_version_to_json_config") + +def get_version_from_json_config(app_type): + config_data = ql_fs.read_json(CONFIG_JSON) + keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type)) + return keyvalue + +set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION) + + +audio.set_qdai_cfg(1,0,0,1,0,0,1,1) +def ExtIntfun(args): + if args[1] == 0: + pm.wakelock_lock(lpm_fd) + elif args[1] == 1: + pm.wakelock_unlock(lpm_fd) +extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun) +extint.enable() + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) + +UDP_CMD_GET_CAT1VER = '0' +UDP_CMD_DIAL_NUMB = '1' +UDP_CMD_HUNGUP = '2' +UDP_CMD_ANSWER = '3' +UDP_CMD_CAT1_OTA_UPDATE = '4' +UDP_CMD_SEND_SMS = '5' +UDP_CMD_GET_TIME = '6' +UDP_CMD_GET_RECV_NETWORKSTAT = '7' +UDP_MSG_SMS = '8' +UDP_CMD_ATCMD = '9' +UDP_MSG_CALL_CONNECTED = 'A' +UDP_MSG_CALL_DISCONNECTED = 'B' +UDP_MSG_COMMING_CALL = 'C' +UDP_MSG_REPLY = 'F' + +class Cat1Service: + AP = 0 + STA = 1 + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.__message = '' + self.__err = 0 + self.__net_connected = 0 + self.__wait_resp = 0 + self.__waiting_netstat = 0 + slip.destroy() + ret = slip.construct(self.__uart, self.__mode, 0) + if ret != 0: + return None + self.__sock = self.__socket_init() + self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ()) + self.telecom_init_flag = 0 + self.telecomTimer = osTimer() + eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble) + eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble) + self.iccid_data = "" + self.software_version = "" + self.deletSmsTimer = osTimer() + self.volte_switch = 1 + eventMesh.subscribe("set_dmp_change_mode",self.set_dmp_change_mode) + eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode) + eventMesh.subscribe("delete_sms_event",self.delete_sms_event) + eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb) + eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble) + eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) + eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle) + eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data) + eventMesh.subscribe("get_factory_status",self.get_factory_status) + eventMesh.subscribe("set_factory_status",self.set_factory_status) + eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE) + eventMesh.subscribe("set_volte_switch",self.set_volte_switch) + eventMesh.subscribe("get_volte_switch",self.get_volte_switch) + eventMesh.publish("delete_sms_event") + self.telecom_dmp_switch = 0 + self.send_data = [] + self.code_old = 0 + self.code_old_num = 1 + self.tmp_data = [] + self.total_num = 0 + self.msg_nums = 0 + self.msg_nums_old = 0 + self.china_mobile_init = 0 + self.factory_status = 0 + self.send_data_q = Queue(100) + self.ack_sem=0 + _thread.start_new_thread(self.Socket_SEND_Thread,()) + return None + + def __socket_init(self): + sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT) + sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5000) + sock.bind(bind_addr) + sock.settimeout(None) + return sock + + def __socket_reinit(self): + return self.__socket_init() + + def bootup_msg_to_bt(self): + modem_ver = modem.getDevFwVersion() + self.reply_cmd('0F',"BOOTUP@pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume())) + + def btmcu_cmd_handler(self,cmd,parm): + if cmd == "00": + modem_ver = modem.getDevFwVersion() + self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver)) + elif cmd == "01": + if eventMesh.publish("get_volte_switch") == 1: + ret = voiceCall.callStart(str(parm)) + if ret != 0: + self.reply_cmd('0F',"callcmd_fail") + else: + self.reply_cmd('0F',"callcmd_success") + else: + self.reply_cmd('0F',"callcmd_fail") + elif cmd == "02": + ret = voiceCall.callEnd() + if ret != 0: + ret = voiceCall.callEnd() + if ret != 0: + self.reply_cmd('0F',"callend_fail") + else: + self.reply_cmd('0F',"callend_success") + elif cmd == "03": + ret = voiceCall.callAnswer() + if ret != 0: + ret = voiceCall.callAnswer() + if ret != 0: + self.reply_cmd('0F',"callanswer_fail") + else: + self.reply_cmd('0F',"callanswer_success") + elif cmd == "06": + time=utime.localtime() + zone=utime.getTimeZone() + self.reply_cmd('06',"{0}@{1}".format(time,zone)) + elif cmd == "07": + simstat = sim.getStatus() + imei = modem.getDevImei() + netstat = "0,10,0,10" + netstat_ = net.getState() + if netstat_ != -1 : + netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3]) + operator = net.operatorName() + signal = net.csqQueryPoll() + self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat)) + elif cmd == "09": + resp=bytearray(50) + ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10) + if ret == 0: + self.reply_cmd('09',"{}".format(resp.decode())) + else: + self.reply_cmd('09',"{}".format("at error")) + + elif cmd == "10" or cmd == "12" or cmd == "14": + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + self.telecom_recv_cmd(cmd,parm) + else: + pass + + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + pass + elif cmd == "13": + on = int(parm) + eventMesh.publish("set_dmp_change_mode",on) + elif cmd == "16": + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + self.china_mobile_recv_cmd(cmd,parm) + else: + pass + elif cmd == "17": + eventMesh.publish("set_factory_status",int(parm)) + elif cmd == "18": + eventMesh.publish("set_dmp_cm_address",str(parm)) + elif cmd == "19": + voiceCall.startDtmf(str(parm),100) + elif cmd == "1A": + eventMesh.publish("set_volte_switch",int(parm)) + elif cmd == "AC": + if self.ack_sem==1: + self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "12": + pass + elif cmd == "14":# + pass + pass + + def set_volte_switch(self,event,msg): + self.volte_switch = int(msg) + + def get_volte_switch(self,event,msg): + return self.volte_switch + + def china_mobile_recv_cmd(self,cmd,parm): + if cmd == "10": + self.software_version = str(parm) + eventMesh.publish("set_dev_version",self.software_version) + elif cmd == "16": + eventMesh.publish("set_dev_mac",str(parm)) + pass + def get_factory_status(self,event,msg): + return self.factory_status + def set_factory_status(self,event,msg): + self.factory_status = int(msg) + if self.factory_status == 0: #只有为的时候才设置进去 1不再设置 + self.reply_cmd('17',"{}".format(1)) + + def send_dmp_cm_address_toBLE(self,event,msg): + buf_tmp = "address:"+str(msg) + self.reply_cmd('18',"{}".format(buf_tmp)) + + def set_dmp_change_mode(self,event,msg): + self.telecom_dmp_switch = msg + def delete_sms_single_data(self,event,msg): #删除单条信息 + sms.deleteMsg(int(msg)) + + def get_dmp_change_mode(self,event,msg): + return self.telecom_dmp_switch + def delete_sms_event(self,event,msg): + self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb) + def delete_sms_cb(self,*argc): + eventMesh.publish_async("remove_all_sms_cb","",1*1024) + def remove_all_sms_cb(self, event, msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + if sms_max >= msg_nums and sms_max > 0: + sms.deleteMsg(1,4) + + def send_singal_data_toBle(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + message=self.sms_get_message_info(int(msg)) + if message == -1: + return + message_pdu = sms.decodePdu(message[5],20) + if message_pdu != -1: + message_ref = message[0] + message_total_num = message[1] + message_seq = message[2] + data = message[5] + data_len = len(data) + msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5]) + self.reply_cmd('15',msg_total) + + eventMesh.publish("delete_sms_single_data",int(msg)) + + def sms_deal_phone_number(self,args): + data=enumerate(args) + data_str1="" + data_str2="" + data_str3="" + for index,value in data: + if index % 2 == 0: + data_str1=data_str1+value + else: + data_str2=data_str2+value + for i in range(0,len(data_str1)): + data_str3=data_str3+data_str2[i] + data_str3=data_str3+data_str1[i] + return data_str3 + def sms_get_message_info(self,index): + message0=sms.searchPduMsg(index) + if message0 == -1: + return -1 + + sca_num = int(message0[0:2],16) - 1 + data_len = 2 + addr_type= message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + sca = message0[data_len:data_len+sca_num*2] + sca = self.sms_deal_phone_number(sca) + data_len = data_len+sca_num*2 + + pdu_tye = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + + oa_num = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + oa_addr_type = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + + if oa_num % 2 == 1: + oa_num_t = int((oa_num + 1)/2) + else: + oa_num_t = int((oa_num )/2) + + oa = message0[data_len:data_len+oa_num_t*2] + oa = self.sms_deal_phone_number(oa) + data_len = data_len+oa_num_t*2 + pid = message0[data_len:data_len+1*2] + + data_len = data_len+1*2 + dcs = message0[data_len:data_len+1*2] + data_len = data_len+1*2 + scts = message0[data_len:data_len+7*2] + data_len = data_len+7*2 + sub_message_len = int(message0[data_len:data_len+1*2],16) + data_len = data_len+1*2 + sub_message_head = message0[data_len:data_len+6*2] + data_len = data_len+6*2 + sub_message_data = message0[data_len:data_len+sub_message_len*2] + + if ((pdu_tye & 0x40 ) >> 6) == 1: + message_ref = int(sub_message_head[6:8],16) + message_total_num = int(sub_message_head[8:10],16) + message_seq = int(sub_message_head[10:12],16) + return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0] + else: + return [0,1,1,pdu_tye,sub_message_len,message0] + + + + def send_sms_max_to_Ble(self,event,msg): + msg_nums = sms.getMsgNums() + if msg_nums == -1: + msg_nums = 0 + sms_data = sms.getSaveLoc() + if sms_data != -1: + sms_max = sms_data[0][2] + self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums)) + pass + + def get_all_sms_data(self,event,msg): + msg_total = "" + SMS_lis={} + SMS_lis_count = 0 + sms_data = sms.getSaveLoc() + if sms_data == -1: + return + sms_max = sms_data[0][2] + self.msg_nums = sms.getMsgNums() + if self.msg_nums_old != self.msg_nums: + self.send_data = [] + self.msg_nums_old = self.msg_nums + if self.send_data == [] : + for i in range(self.msg_nums): + phonenum = "" + data ="" + time = "" + data_len = 0 + message=self.sms_get_message_info(self.msg_nums-i-1) + if message == -1: + break + data = message[5] + sms_data = [] + code = message[0] + num = message[1] + curren_num = message[2] + data_len = message[4] + sms_data.append(code) + sms_data.append(num) + sms_data.append(curren_num) + sms_data.append(data) + sms_data.append(data_len) + self.send_data.append(sms_data) + count = len(self.send_data) + for i in range(count): + text = self.send_data[i] + msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3]) + self.reply_cmd('17',msg_total) + + def notifyIncomingcall(self, incomming_numb): + self.clear_remain() + __head = '0C' + __message = str(incomming_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyConnecteCall(self, phone_numb): + self.clear_remain() + __head = '0A' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def notifyDisconnectCall(self, phone_numb): + self.clear_remain() + __head = '0B' + __message = str(phone_numb) + self.__Socket_UDP(__head, __message) + return 0 + + def wait_network_ready(self): + if(self.__waiting_netstat == 1): + return 0 + self.__waiting_netstat = 1 + stage, state = checkNet.waitNetworkReady(30) + pm.wakelock_unlock(lpm_fd) + if stage == 3 and state == 1: + self.set_network_config() + self.__net_connected = 1 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return 0 + else: + self.reset_network_config() + self.__net_connected = 0 + eventMesh.publish("set_network_state",self.__net_connected) + self.__waiting_netstat = 0 + return -1 + + def timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP('0D', message) + return 0 + + def reply_timesync(self,_timesync): + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply('0D', message) + return 0 + + def reply_cmd(self,cmd,_timesync): + try : + self.clear_remain() + message = str(_timesync) + self.__Socket_UDP_noreply(cmd, message) + except: + clog.info('reply_cmd') + return 0 + + def clear_remain(self): + self.__err = 0 + def router_add(self, ip='192.168.4.1', mask='255.255.255.0'): + self.ip = ip + self.mask = mask + return slip.router_add(self.ip, self.mask) + + def ipconfig(self): + return slip.ipconfig() + + def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'): + self.pri_dns = pri_dns + self.sec_dns = sec_dns + return slip.set_dns(self.pri_dns,self.sec_dns) + + def set_default_NIC(self, ip_str): + self.ip_str = ip_str + return slip.set_default_netif(self.ip_str) + + def reset_network_config(self): + if (self.__net_connected == 0): + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.4.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + + def set_network_config(self): + if (self.__net_connected == 1) : + return 0 + Info = dataCall.getInfo(1,0) + default_NIC_ip = Info[2][2] + segment_ip = '172.16.1.0' + mask = '255.255.255.0' + cat1service.set_default_NIC(default_NIC_ip) + cat1service.router_add(segment_ip, mask) + + pri_dns = '8.8.8.8' + sec_dns = '114.114.114.114' + cat1service.set_dns(pri_dns, sec_dns) + cat1service.ipconfig() + if eventMesh.publish("get_dmp_change_mode") == 0: + return + if 1: + if eventMesh.publish("get_dmp_change_mode") == 1: + eventMesh.publish("set_network_state",1) + if 1: + if eventMesh.publish("get_dmp_change_mode") > 1: + eventMesh.publish("set_network_state",1) + if self.china_mobile_init == 1: + return + self.china_mobile_init = 1 + + def cat1_reply_iccid_to_ble(self,event,msg): + ICCID_DATA = str("ICCID:")+str(msg) + self.reply_cmd('11',"{}".format(ICCID_DATA)) + pass + def cat1_reply_timesec_to_ble(self,event,msg): + + self.reply_cmd('14',"REGIST_TIME:{}".format(msg)) + pass + + def stop(self): + slip.destroy() + return 0 + + def __pack_tlv_format(self, head, content): + if len(content) == 0 or len(content) > 9999 or len(head) != 2: + return -1 + len_str ='%04d' % len(content) + tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content + return tlv_pack + + def __unpack_tlv_format(self, msg): + self.msg = str(msg)[2:] + tag = self.msg[0:2] + length = self.msg[2:6] + value = self.msg[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + def __Socket_UDP(self, head, content): + self.send_data_q.put([head,content]) + def Socket_SEND_Thread(self): + while True: + try: + data=self.send_data_q.get() + self.ack_sem=1 + self.__Socket_UDP_write( data[0], data[1]) + count=20 + + while count & self.ack_sem : + utime.sleep_ms(1) + count=count-1 + self.__Socket_UDP_write( data[0], data[1]) + except Exception : + clog.error("sned Socket >>>") + + def __Socket_UDP_write(self, head, content): + try: + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head, content) + server_addr = ('172.16.1.5',1000) + self.__err = 0 + self.__sock.sendto(msg,server_addr) + self.__wait_resp = 1 + self.__wait_resp = 0 + return 1 + except Exception as error: + clog.error(error) + return 0 + + def __Socket_UDP_noreply(self, head, content): + self.send_data_q.put([head,content]) + + def __Socket_Thread(self): + while True: + try: + data=self.__sock.recv(1024) + if data: + value = self.__unpack_tlv_format(data.decode()) + if value != -1: + if value[1] == 'FF': + self.btmcu_cmd_handler(value[0],value[2]) + else: + self.btmcu_cmd_handler(value[0],value[2]) + else: + clog.error("data error!!") + except Exception as recverr: + if "110" in str(recverr): + self.__err = 1 + else: + utime.sleep(1) + self.__sock = self.__socket_reinit() +cat1service = Cat1Service() + +def voice_callback(args): + if args[0] == 10: + if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能 + voiceCall.callEnd() + else: + cat1service.notifyIncomingcall(args[6]) + elif args[0] == 11: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyConnecteCall(args[6]) + elif args[0] == 12: + if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能 + cat1service.notifyDisconnectCall(args[6]) +voiceCall.setCallback(voice_callback) +def checknet_cb(arg): + _thread.start_new_thread(cat1service.wait_network_ready, ()) +timer = osTimer() +timer.start(30000,1,checknet_cb) + +def bootupmsg_cb(arg): + cat1service.bootup_msg_to_bt() + +delaybootupmsg_timer = osTimer() +delaybootupmsg_timer.start(1000,0,bootupmsg_cb) + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/china_mobile_dmp.py b/code/sdk/files/w9/fs/user/system/cat1otaudp/china_mobile_dmp.py new file mode 100644 index 000000000..632476ec2 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1otaudp/china_mobile_dmp.py @@ -0,0 +1,17 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("china_mobile") + + + + + + + + + + + + diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/is_need_updata.txt b/code/sdk/files/w9/fs/user/system/cat1otaudp/is_need_updata.txt new file mode 100644 index 000000000..e69de29bb diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/main.py b/code/sdk/files/w9/fs/user/system/cat1otaudp/main.py new file mode 100644 index 000000000..ab14d8bf5 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1otaudp/main.py @@ -0,0 +1,27 @@ +import example +import log +from machine import UART + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +# 设置输出到debug口 +uart = UART(UART.UART0, 115200, 8, 0, 1, 0) +log.set_output(uart) +clog = log.getLogger("cat1") + +main_flag = 1 + + +try: + example.exec('/usr/main_init.py') + clog.info("启动main_init成功!!!!!\r\n") +except Exception as e: + main_flag = 0 + clog.error("启动失败!!!!!\r\n".format(e)) + +try: + example.exec('/usr/tcpserver.py') + clog.info("启动tcpserver成功!!!!!\r\n") +except Exception as e: + clog.error("启动失败!!!!!\r\n".format(e)) + diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/tcpserver.py b/code/sdk/files/w9/fs/user/system/cat1otaudp/tcpserver.py new file mode 100644 index 000000000..afe23b2c1 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1otaudp/tcpserver.py @@ -0,0 +1,602 @@ +from misc import Power +import usocket +import log +import utime +from machine import UART +import _thread +from queue import Queue +from machine import Pin +from machine import ExtInt +import osTimer +import utime +import ql_fs +import binascii +import ujson +import uos + + +log.basicConfig(level=log.INFO) +clog = log.getLogger("cat1") + +USR_FILE_PATH = "/usr" # +BAK_FILE_PATH = "{}/TmpPyFile".format(USR_FILE_PATH) +BAK_FILE_TMP = "_bak" +CAT1_SERVICE_HEAD = "FE" +CAT1_FILE_DATA_HEAD = "FF" +CAT1_REPLAY_STATE="00" +CAT1_CREAT_DIR_FAILE= "01" +CAT1_CREAT_DIR_OK= "02" +CAT1_NO_REPLAY_OTA_OK= "03" +CAT1_WRITE_FILE_SUCC= "04" +CAT1_WRITE_FILE_ERROR = "05" +CAT1_CRC_ERROR = "06" +CAT1_SEND_HEAD_ERR = "07" +CAT1_OTA_TIMEOUT_BLE_NO_REPLAY = "08" +CAT1_CREAT_FILE_ERROR = "09" +CAT1_CREAT_FILE_SUCC = "0A" +CAT1_ALLPY_FILE_TRANSFER_END = "0B" +CAT1_REPLAY_OTA_SUCC = "0C" +CAT1_REPLAY_OTA_FALIE = "0D" +CAT1_REPLAY_FILE_SIZE_OK = "0E" +CAT1_REPLAY_FILE_SIZE_ERR = "0F" +CAT1_REPLAY_OTA_END_FAILE = "10" +CAT1_NEED_UPDATE_OTA = "11" +CAT1_TCP_STOP_OTA = 0 +CAT1_TCP_START_OTA = 1 +CAT1_TCP_START_SEND_SINGLE_FILE_INFO= 2 +CAT1_TCP_START_SEND_FILE_DATA= 3 +CAT1_TCP_START_OTA_FAILE = 4 +CAT1_TCP_START_OTA_SUCC = 5 +CAT1_TCP_START_SEND_ALLFILE_FINESH = 6 +CAT1_TCP_SEND_SINGLE_FINESH = 7 +CAT1_TCP_START_ERROR_INFO = 255 + +gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1) +gpioWakeBT.set_dir(Pin.OUT) +gpioWakeBT.write(0) +FILE_TRANSFER_TIMEOUT=60 +class TcpServiceInit: + AP = 0 + STA = 1 + + def __init__(self, uart=UART.UART4, mode=AP): + self.__uart = uart + self.__mode = mode + self.Cat1FileState = 0 + self.Cat1FileReplayBle = 0 + self.Cat1TimeCount = 0 + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer = osTimer() + self.Cat1OtaTimeOut = osTimer() + self.crc_err = 0 + self.allPyRecvFlag = 0 + self.ota_state =0 + self.ota_bstate =0 + self.fileNameTmp = "" + self.fileNameList = [] + self.fileSizeList = [] + self.fileSize = 0 + self.updateTimer = osTimer() + self.updateTimerCount = 0 + self.updateTimerFlag = 0 + self.sock = None + self.bakFlag = "0" + self.conn= None + self.__sock_file = None + self.__sock_file = self.__socket_file_init() + self.__thread_file = _thread.start_new_thread(self.__Socket_File_Thread, ()) + self.conn_thread=_thread.start_new_thread(self._client_conn_proc, ()) + + def __pack_tlv_format(self, head, content): + head1 = head + content1 = content + if len(content1) == 0 or len(content1) > 9999 or len(head1) != 2: + return -1 + len_str ='%04d' % len(content1) + tlv_pack = CAT1_SERVICE_HEAD+head1+len_str+content1 + return tlv_pack + + def __unpack_tlv_format(self, msg): + msg_tmp = str(msg)[2:] + tag = msg_tmp[0:2] + length = msg_tmp[2:6] + value = msg_tmp[6:] + len_str ='%04d' % len(value) + if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != msg_tmp[2:6]: + return -1 + unpack = (tag,length,value) + return unpack + + def __socket_file_init(self): + self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP_SER) + self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1) + bind_addr = ('172.16.1.2', 5001) + self.sock.bind(bind_addr) + self.sock.listen(10) + return self.sock + + def __Socket_TCP_file_noreply(self, head, content): + head1 = head + content1 = content + gpioWakeBT.write(1) + utime.sleep_ms(2) + gpioWakeBT.write(0) + utime.sleep_ms(20) + msg = self.__pack_tlv_format(head1,content1) + if msg == -1: + return 0 + try: + self.conn.send(msg) + except Exception as e: + clog.info("self.__sock_file error {}".format(e)) + return 0 + + def _client_conn_proc(self): + while True: + if self.conn==None: + utime.sleep_ms(20) + continue + try: + data = self.conn.recv(1024) + if not data: + clog.info("__Socket_File_Thread data null:\r\n") + else: + self.src_data(data.decode('uft-8')) + except: + self.conn.close() + break + + def __Socket_File_Thread(self): + while True: + try : + cli_conn, cli_ip_addr, cli_port = self.__sock_file.accept() + self.conn=cli_conn + clog.info('[serveice] accept a client: %s, %s' % (cli_ip_addr, cli_port)) + except : + utime.sleep_ms(20) + + def cat1FileTimerCb(self,*argc): + clog.info("timer test\r\n") + if self.Cat1PyFileTimout > 0: + self.Cat1PyFileTimout-=1 + if self.Cat1PyFileTimout == 0: + self.Cat1PyFileTimout = 0 + self.Cat1FileState = 0 + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_OTA_TIMEOUT_BLE_NO_REPLAY,"ota error") #结束文件接收不完整的 + self.Cat1FileTransTimer.stop() + pass + + def crc_cal(self,msg): + bytes_data = msg.encode('utf-8') + hex_data = binascii.hexlify(bytes_data) + hex_data = hex_data.decode() + data = hex_data + crcValue = 0 + j = 0 + i = 0 + json_state = 0 + crcbuf = 0 + data_len = len(str(data)) + try: + if data_len % 2 != 0: + json_state = 0 + return [json_state,crcbuf] + except Exception as e: + json_state = 0 + for i in range(data_len): + if j >= data_len: + break + try: + decimal_number = int(str(data[j:j+2]), 16) + crcValue=crcValue+decimal_number + crcValue = crcValue&0xff + except Exception as e: + clog.info("crc_cal") + j+=2 + crcbuf = crcValue%256 + crcbuf = 256-crcbuf + crcbuf = crcbuf%256 + return [json_state,"%02x"%(crcbuf)] + def deleteTmpFile(self): + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + ql_fs.rmdirs(BAK_FILE_PATH) + + def deleteUsrTmpFile(self): + return + + def src_data(self,data): + if self.updateTimerFlag == 0: + self.updateTimerFlag = 1 + self.updateTimer.stop() + msg = "" + json_state = 0 + try: + msg = ujson.loads(data) + json_state = 1 + except Exception as e: + json_state = 0 + if json_state == 0: + value = self.__unpack_tlv_format(data) + self.cmd_data(value[0],value[2]) + return + else: + self.file_data(msg) + pass + def cmd_data(self,cmd,parm): + if cmd == "01": + self.bakFlag = str(parm) + pass + def file_data(self,msg): + if "Code" in msg: + Code = int(msg["Code"]) + if Code == CAT1_TCP_STOP_OTA: + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_OTA: + self.ota_state =0 + self.ota_bstate =0 + self.allPyRecvFlag = 0 + self.fileNameList = [] + self.fileSizeList = [] + self.allPyRecvFlag = 0 + self.Cat1FileState = 0 + self.deleteUsrTmpFile() + self.Cat1OtaTimeOut.stop() + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + mk_dir_state = 0 + if check_dir == True: + try: + self.deleteTmpFile() + except Exception as e: + clog.info("移除失败\r\n") + check_dir = ql_fs.path_exists(BAK_FILE_PATH) + if check_dir == False: + try: + ql_fs.mkdirs(BAK_FILE_PATH) + mk_dir_state = 1 + except Exception as e: + mk_dir_state = 0 + else: + mk_dir_state = 1 + if mk_dir_state == 0: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat dir error!") + else: + self.Cat1FileState = 1 + self.fileNameList = [] + self.fileSizeList = [] + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.Cat1FileTransTimer.stop() + self.Cat1FileTransTimer.start(1000,1,self.cat1FileTimerCb) + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_OK,"creat dir success!") + + elif Code == CAT1_TCP_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + self.fileNameTmp = str(msg["fileName"]) + self.fileSize = msg["fileSize"] + self.fileNameList = msg["fileNameList"] + path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + check_touch = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if check_touch == True: + try: + uos.remove("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + except Exception as e: + clog.info("移除文件失败\r\n") + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"1creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"1creat file or dir err!") + else: + try: + with open(path,"w+") as fd: + fd.write("") + fd.close() + self.crc_err = 0 + + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"2creat file or dir success!") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"2creat file or dir err!") + + + elif Code == CAT1_TCP_START_SEND_FILE_DATA and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + if len(self.fileNameTmp) == 0: + return + data = msg["data"] + if len(data) == 0: + return + tmpdata = str(data) + head = tmpdata[0:2] + if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8: + clog.info("head {}\r\n".format(head)) + self.__Socket_TCP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!") + return + datalen = str(tmpdata[2:6]) + datalen = int("0x" + datalen, 16) + data_buf = tmpdata[6:] + data_buf = data_buf[:-2] + crc = tmpdata[-2:] + if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"crc error or data null!") + return + data = str(data_buf) + path = "{}/{}".format(BAK_FILE_PATH,str(self.fileNameTmp)) + try: + with open(path,"a") as fd: + fd.write(data) + fd.close() + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_SUCC,"write file success!") + + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"write file error!") + + elif Code == CAT1_TCP_START_OTA_FAILE and self.Cat1FileState == 1: + self.allPyRecvFlag = 0 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"OTA FAILE") + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteTmpFile() + self.deleteUsrTmpFile() + pass + elif Code == CAT1_TCP_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1: + if self.bakFlag == "0": + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + try: + copy_state = 1 + compare_flag = 1 + copy_flag = 0 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("copy file \r\n") + else: + compare_flag = 0 + break + except Exception as e: + clog.info("copy file \r\n") + + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_state = 1 + self.allPyRecvFlag = 1 + self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_state == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_START_OTA_SUCC and self.Cat1FileState == 1: + if self.bakFlag == "0": + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + if self.allPyRecvFlag == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + if self.allPyRecvFlag == 0: + self.deleteTmpFile() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + filenamesList = uos.listdir(BAK_FILE_PATH) + list1 = sorted(filenamesList) + list2 = sorted(self.fileNameList) + if list1 != list2: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + return + + try: + copy_state = 1 + compare_flag = 1 + filenamesList = uos.listdir(BAK_FILE_PATH) + for tmp in filenamesList: + dst_path = "{}/{}".format(USR_FILE_PATH,tmp) + src_path = "{}/{}".format(BAK_FILE_PATH,tmp) + ret = False + file_size = 0 + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + compare_flag = 0 + break + else: + try: + compare_flag = 1 + uos.remove(src_path) + filenamesList = uos.listdir(BAK_FILE_PATH) + except Exception as e: + clog.info("file\r\n") + else: + compare_flag = 0 + break + + except Exception as e: + clog.info("file\r\n") + if copy_state == 0 or compare_flag == 0 : + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") + return + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.Cat1OtaTimeOut.stop() + self.Cat1TimeCount = 0 + self.ota_bstate = 1 + self.conn.close() + self.Cat1OtaTimeOut.start(10000,0,self.otaTimeOut) + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") + self.deleteUsrTmpFile() + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + else: + if self.ota_bstate == 1: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") + pass + else: + self.deleteTmpFile() + self.Cat1FileState = 0 + self.Cat1FileTransTimer.stop() + self.deleteUsrTmpFile() + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") + + elif Code == CAT1_TCP_SEND_SINGLE_FINESH and self.Cat1FileState == 1: + self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT + tmp_dir = ql_fs.path_exists(BAK_FILE_PATH) + if tmp_dir == True: + tmp_file = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if tmp_file == True: + file_size = ql_fs.path_getsize("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)) + if self.fileSize != file_size: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + else: + if self.bakFlag == "0": + dst_path = "{}/{}".format(USR_FILE_PATH,self.fileNameTmp) + src_path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) + ret = False + try: + ret = ql_fs.file_copy(dst_path,src_path) + if ret == True: + dstfile_size = ql_fs.path_getsize(dst_path) + srcfile_size = ql_fs.path_getsize(src_path) + if dstfile_size != srcfile_size: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错 yichu!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") + return + else: + src_file = ql_fs.path_exists(src_path) + if src_file == True: + try: + uos.remove(src_path) + except Exception as e: + clog.info("copy 文件异常出错!!!!!!!!!!{}:\r\n".format(e)) + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok") + return + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + except Exception as e: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") + else: + self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file copy ok") + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"creat file or dir err!") + pass + else: + self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat file or dir error!") + pass + else: + if self.Cat1FileState == 0: + if self.Cat1FileReplayBle == 1: + return + self.Cat1FileReplayBle = 1 + self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!") + self.Cat1FileState == 0 + self.Cat1FileTransTimer.stop() + self.Cat1PyFileTimout = 0 + self.fileNameList=[] + self.deleteTmpFile() + self.deleteUsrTmpFile() + + def otaTimeOut(self,*argc): + clog.info("重启成功!!!!!!!!\r\n") + +TcpService = TcpServiceInit() + + diff --git a/code/sdk/files/w9/fs/user/system/cat1otaudp/telecom_dmp.py b/code/sdk/files/w9/fs/user/system/cat1otaudp/telecom_dmp.py new file mode 100644 index 000000000..f60e74899 --- /dev/null +++ b/code/sdk/files/w9/fs/user/system/cat1otaudp/telecom_dmp.py @@ -0,0 +1,5 @@ +import log + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +fota_log = log.getLogger("telecom_dmp") diff --git a/code/sdk/files/w9/fs/user/update/test2.txt b/code/sdk/files/w9/fs/user/update/test2.txt new file mode 100644 index 000000000..69ead2249 --- /dev/null +++ b/code/sdk/files/w9/fs/user/update/test2.txt @@ -0,0 +1 @@ +this is test2 file \ No newline at end of file diff --git a/code/sdk/files/w9/fs/user/userdata/readme.txt b/code/sdk/files/w9/fs/user/userdata/readme.txt new file mode 100644 index 000000000..c41b29b3a --- /dev/null +++ b/code/sdk/files/w9/fs/user/userdata/readme.txt @@ -0,0 +1 @@ +Óû§Êý¾Ý·¾¶ \ No newline at end of file