删除u8中cat1的脚本 1607/1 1607/head 1609/target/1
authorSnickerSun <snickersun@163.com>
Wed, 8 Jan 2025 06:47:00 +0000 (14:47 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 8 Jan 2025 06:47:00 +0000 (14:47 +0800)
code/sdk/files/.gitignore [new file with mode: 0644]
code/sdk/files/u8/fs/user/fileschecksum.txt [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/Cat1pyVersion.txt [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/EventMesh.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/cat1Service.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/checkota.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/china_mobile_dmp.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/main.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/main_init.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/slipService.py [deleted file]
code/sdk/files/u8/fs/user/system/cat1ota/telecom_dmp.py [deleted file]

diff --git a/code/sdk/files/.gitignore b/code/sdk/files/.gitignore
new file mode 100644 (file)
index 0000000..38eaa92
--- /dev/null
@@ -0,0 +1 @@
+fileschecksum.txt
diff --git a/code/sdk/files/u8/fs/user/fileschecksum.txt b/code/sdk/files/u8/fs/user/fileschecksum.txt
deleted file mode 100644 (file)
index 8cbb407..0000000
+++ /dev/null
@@ -1,1320 +0,0 @@
-/user/update/test2.txt,18,2b7e3d3eea6b93477fc4aaa04f44d576
-/user/userdata/readme.txt,12,e6f84f95923a777fc5a56f6a6898d9e1
-/user/music/test3.txt,18,6a084ec7cb1b63663b07c2feedc406d8
-/user/music/ring/calling.mp3,49363,72524e8458431ce8f3e5799386e09b6d
-/user/music/ring/findwatch.mp3,28047,4f18ee3d6bd9cee54a24e7023516206a
-/user/music/ring/ring.mp3,523621,8c0b93aae3b2ee12e6cf58336a092c43
-/user/music/ring/alarm.mp3,119162,a54dfe316aa2ca35c95efc3ca275dc8f
-/user/dial/res_dial/dawninsight.bin,330175,f169a053a6981f5a42d180d69b19abc8
-/user/dial/res_dial/classic.bin,198208,9326c546f7d08167eaf78c03437d11d7
-/user/dial/res_dial/satellite.bin,1316038,5b6ff054cc152efac54e4d1398a33caa
-/user/dial/res_dial/mirrorvoyager.bin,300109,5b06af7011cb6c869e629f06683559c6
-/user/dial/res_dial/obsidianrhythm.bin,1688324,5ef2c8343e8589bbda8c9610d1c57d7d
-/user/dial/res_dial/birdie.bin,1523474,1c2ca5c6d08c0134d4dfe65e97517902
-/user/system/KUMI_LOGO.bin,894728,c673d4c089fa2324b97f89a64206519f
-/user/system/OTAUpdataRecover.bin,671048,86d085235b5e293cabb8b4ce4500c6d2
-/user/system/OTAUpdata.bin,146040,75f249d36bfe30e7012ea26a53d811c9
-/user/system/cat1ota/main_init.py,2409,fc3524fe4b618d208df5bacc2134690a
-/user/system/cat1ota/checkota.py,5771,1889740efa122cd1081f7432a6ab1d28
-/user/system/cat1ota/slipService.py,524,22427acf85fe110d92f9e81520990258
-/user/system/cat1ota/Cat1pyVersion.txt,2,c74d97b01eae257e44aa9d5bade97baf
-/user/system/cat1ota/telecom_dmp.py,20487,ea840d786dd8ffebfae484f9eac53fc8
-/user/system/cat1ota/EventMesh.py,2307,184dbea302ebcd9c6bbf4271c0f77fa7
-/user/system/cat1ota/main.py,311,7e7b35756325cf852abbce8b3d813d78
-/user/system/cat1ota/china_mobile_dmp.py,37062,34bdb00344a4dfe8e169e452feda2403
-/user/system/cat1ota/cat1Service.py,41344,dfb3aa927f5b56e080a14c37cac6da3b
-/user/res/ALIPAY_PAY_ICON_GREY.bin,216,55cfe0069acb32af44e124cd7a4a291e
-/user/res/ALIPAY_PAY_ICON_WHITE.bin,216,796bc0870a587658dad5f978242bb28f
-/user/res/BLUETOOTH_IMAGE_02.bin,21656,be4781c5c48bfd36a7da737032dd559e
-/user/res/SYSTEM_CheckOff.bin,6824,d5ee709de0c93cdf2a654d359c094f20
-/user/res/BLUETOOTH_IMAGE_08.bin,21656,ef41f2ed1b22074d243dcd40152b097b
-/user/res/DELETE.bin,16952,2fbdb54b536989d23adafc05b591e2e9
-/user/res/BLUETOOTH_IMAGE_10.bin,14136,1a94ce0649a8b92e17492ae14aff6aca
-/user/res/BLUETOOTH_IMAGE_15.bin,14136,1edc795d60137fdeb9f5443d71fcb2db
-/user/res/VolumeControlVector.bin,1144,f99ccae0d67d5bf2679d12187377029d
-/user/res/BLUETOOTH_IMAGE_03.bin,21656,340069fe05aa224067e5a5391e2ea289
-/user/res/BLUETOOTH_IMAGE_12.bin,14136,401b099c9f19e9c828f0d5f015bcad05
-/user/res/TRUE_ADD.bin,16952,a439105710d35a6570019421e6d2a160
-/user/res/CHECKBOX_OFF.bin,1144,d0fcf47c8ceba8b43bb0a73c3becd735
-/user/res/BLUETOOTHEAR.bin,14136,f04432fff2115d808ab7bd7c8e73e0d9
-/user/res/TOGGLEBUTTON_OFF.bin,3560,aa2ddea1c27d9e1ee58fbb66067faece
-/user/res/BLUETOOTH_IMAGE_14.bin,14136,195ef1964108e0ed2e86732b400afdfb
-/user/res/lowpower.bin,4392,6c4538c24356931b3401d08cf8c19fa6
-/user/res/ALIPAY_LIST_PAY.bin,2264,9f412d25340b71d8545d683c860a2c00
-/user/res/BLUETOOTH_IMAGE_07.bin,21656,fcf01008f105a7143a6f0c06e6c93818
-/user/res/BLUETOOTH_IMAGE_04.bin,21656,896eafc74b30c1fb44b32291b1c2473e
-/user/res/SELECTION_BOX.bin,13464,544051ffded03e6a71773fb5726ada49
-/user/res/RIGHT.bin,16952,8ab4ceefe8ecf9a7f42da1cadae001ff
-/user/res/Ellipse_37.bin,31128,b1e75fd2be82ecef727a79033d6883a1
-/user/res/BringhtnessContuolVector.bin,1144,523e15300d15e5e77f1d5a42a6ca7d1d
-/user/res/BLUETOOTH_IMAGE_11.bin,14136,11eab2d622e6598e87b0a97053ad6531
-/user/res/solar-energy_1.bin,2424,79cf4afcdd514fa053b8824b768632ac
-/user/res/RING_CLOCK.bin,15224,4de1e72f5f5785d82a3657787f374f3a
-/user/res/Vector.bin,600,ae7dd8b1514cadd9090ce3ddd7d0e12c
-/user/res/BLUETOOTH_IMAGE_09.bin,14136,adee5a592745fb7d19506c1ce7235140
-/user/res/ALIPAY_LIST_SETTING.bin,2264,1927ab4aacb79620640c8d5e0084c7b7
-/user/res/BLUETOOTH_IMAGE_05.bin,21656,0f261d8950097faa11212a3526118bf3
-/user/res/SETTING_BACKGROUND.bin,25624,fdf8670ba8ac295a220886e904a970b5
-/user/res/BLUETOOTH_IMAGE_16.bin,14136,16fef480efe612949a059f459bb7f03c
-/user/res/SETTING_NEXT.bin,360,3cdc54a6cc58b683428df192fe3612da
-/user/res/HarmonyOS_Sans_SC_Regular.ttf,8261060,c9785d7508e9bd8637945bc470447ffa
-/user/res/BLUETOOTH_TITLE.bin,3976,1c06fd662f58c8648bc8c8b20be87875
-/user/res/Attention.bin,4504,15fa377941b297738d4dddde270f2b22
-/user/res/ALIPAY_LIST_HELP.bin,1560,498561d88d14e51bec05437f016bbef7
-/user/res/COMPASS_CALIBRATE_IMAGE.bin,24984,550305fcce310b9ad017d2f714f271e7
-/user/res/BLUETOOTH_IMAGE_01.bin,21656,572def74e42862d4b32e4ba11ed9eb26
-/user/res/ALIPAY_LIST_TRANS.bin,2264,3e7820b343bda6acd64f6632483b24aa
-/user/res/CLOSE_RING_CLOCK.bin,25112,8234e8e8c7791b40a1df162f9a754165
-/user/res/BLUETOOTH_IMAGE_13.bin,14136,939050b22511ab18286ab247aed21aea
-/user/res/BLUE_ADD.bin,16952,3773975f8861fad9ed16108a74d5962f
-/user/res/TOGGLEBUTTON_ON.bin,3560,e7a0a02fbccd8d5d3843e36c72af7ec9
-/user/res/POP_UP_CLOCK.bin,15512,64712ea61a476ea6bff35e2cefecc262
-/user/res/line_cj.brk,47264,e00858c07d41ac3fee017dcf528fbeb7
-/user/res/BLUETOOTH_IMAGE_06.bin,21656,5efb26c57a07677e9dfa9324e7b644cd
-/user/res/OK.bin,4504,1797c7a05c6f1a57ca8d90501e81d127
-/user/res/466x100button.bin,31224,fbf646229c6464787e5e5a3257eef784
-/user/res/SYSTEM_CheckOn.bin,6824,6fd689a03cecc7e2bd7b574b9b922cf2
-/user/res/CHECKBOX_ON.bin,1144,53fcadd5fa19baf470eb2bbe620e7fd2
-/user/res/ALIPAY_BIND_FAILURE.bin,8536,43d3eb2374034cca701af69b65aee227
-/user/res/ALIPAY_BIND_SUCCESS.bin,8536,a1cbb75ffebe13094eb6db86c127a2ed
-/user/res/RespiratoryTraining/RTCVector.bin,1896,42615f3cbd387e9ec868674318bd3ee6
-/user/res/RespiratoryTraining/RespiratoryTraining.bin,38424,4fada3b3a76d1a6432a5c09a6a87c04a
-/user/res/RespiratoryTraining/RTCGroupList.bin,4776,37718329b816faba577763906ca83091
-/user/res/RespiratoryTraining/RespiratoryTraining_BG.bin,38424,bb7cb387871eb2f2d87d528b16abd1d3
-/user/res/Training/icon_80x80/Jumprope_80.bin,4504,b488f9c8495183e760c4853567524fc4
-/user/res/Training/icon_80x80/Pingpong_80.bin,4504,a51e7a98d4445c02a30e3a7ddd86fdeb
-/user/res/Training/icon_80x80/Mountaineering_80.bin,4504,5b4759bb71c034de722d129fb1c73feb
-/user/res/Training/icon_80x80/Riding_80.bin,4504,fef6f279e56166cd7c3c769dbb96caac
-/user/res/Training/training_GIF/win/20.bin,9624,e618203334ccd8b788d2961668413830
-/user/res/Training/training_GIF/win/91.bin,9624,84f22b33eb17a94d60745c5187c61d3e
-/user/res/Training/training_GIF/win/76.bin,9624,07c354c8876465967ba7f14de9858563
-/user/res/Training/training_GIF/win/4.bin,9624,dd22e9636deaed076c519455557de64f
-/user/res/Training/training_GIF/win/8.bin,9624,5fff0307a6e689fe4bcf0be70f695053
-/user/res/Training/training_GIF/win/75.bin,9624,d193ed7bb318a04e87788f9a593fc941
-/user/res/Training/training_GIF/win/44.bin,9624,9ca08a47a7cbcb5ef4597ba5e5308a55
-/user/res/Training/training_GIF/win/65.bin,9624,cc3ea76d7b9fe50d356e705cfeaece07
-/user/res/Training/training_GIF/win/42.bin,9624,03e12d7605b42cdc5b0945e9fb546844
-/user/res/Training/training_GIF/win/35.bin,9624,8d0d3f778b4b5078c85edf73cad1351a
-/user/res/Training/training_GIF/win/58.bin,9624,47fee9519c6f296eb70009dd5350350f
-/user/res/Training/training_GIF/win/6.bin,9624,71fefaf3e8f9a6e44d7ae48accc3192c
-/user/res/Training/training_GIF/win/14.bin,9624,1f83a9c203313ed9013675c65a342de4
-/user/res/Training/training_GIF/win/18.bin,9624,dfaf05d2db64f264f59db72b5733e3d8
-/user/res/Training/training_GIF/win/9.bin,9624,321008796c2710c1f1d580d4eaf1f93e
-/user/res/Training/training_GIF/win/89.bin,9624,aecd40731ba509b34b0c789835f6221e
-/user/res/Training/training_GIF/win/49.bin,9624,9e38386fa748a21d1229a8bf4fd1a373
-/user/res/Training/training_GIF/win/50.bin,9624,881cb06316c9df90583acc1e15916509
-/user/res/Training/training_GIF/win/1.bin,9624,dfc8cf3a8631b3f050e403b339f9f1d6
-/user/res/Training/training_GIF/win/80.bin,9624,08ff7f901e83baa7b62153b6adf6fe4a
-/user/res/Training/training_GIF/win/25.bin,9624,d8cb0af83a76b1f0265123cd23807f00
-/user/res/Training/training_GIF/win/55.bin,9624,b81df84fae537f53cca44a5c922c5ca5
-/user/res/Training/training_GIF/win/51.bin,9624,d7c83583cd73414f6565d868b975e87f
-/user/res/Training/training_GIF/win/31.bin,9624,e8a5bb0bcc7beb9ed6d673c4f3625b27
-/user/res/Training/training_GIF/win/77.bin,9624,7a53c86178a9a86fddb6ebabd6021ce9
-/user/res/Training/training_GIF/win/30.bin,9624,df6b304405671276b4db3835baab118e
-/user/res/Training/training_GIF/win/19.bin,9624,ea3763ab82c0410a307c0a811d77e44f
-/user/res/Training/training_GIF/win/86.bin,9624,de469327c27ace1021997baa48bc33f6
-/user/res/Training/training_GIF/win/63.bin,9624,559f1f96ae47b7bf60e76f5573fd123d
-/user/res/Training/training_GIF/win/82.bin,9624,7116b4f572d34b45fc81fd58c284e518
-/user/res/Training/training_GIF/win/52.bin,9624,322c9949f215ada4f770590dc23c129d
-/user/res/Training/training_GIF/win/40.bin,9624,145015a9f0ac0165d6293e8de9696357
-/user/res/Training/training_GIF/win/16.bin,9624,5e15a2a0f9a049700fef79d768fc9e84
-/user/res/Training/training_GIF/win/68.bin,9624,9d69b2dad9a2c1304d9a2ee2310f9548
-/user/res/Training/training_GIF/win/13.bin,9624,53ed5d0a555807d26c3258d2e5a387a7
-/user/res/Training/training_GIF/win/53.bin,9624,18fd03296bcbc073cccfaeb64da55f74
-/user/res/Training/training_GIF/win/90.bin,9624,36b8b7785664ae22879f4889aedb78fa
-/user/res/Training/training_GIF/win/69.bin,9624,024f85c56c68d4df614a085a0bb5c739
-/user/res/Training/training_GIF/win/12.bin,9624,34fa71bbec36869285d410e92f7d2ee2
-/user/res/Training/training_GIF/win/47.bin,9624,f3defc8792f5ef2312f25ff2227d4eab
-/user/res/Training/training_GIF/win/79.bin,9624,dd7f372ede76d315c4d424820d545635
-/user/res/Training/training_GIF/win/15.bin,9624,22f6a0029f279fc683e39c69d30a865f
-/user/res/Training/training_GIF/win/60.bin,9624,dd307c55bc558f040f3a92dd4e75265d
-/user/res/Training/training_GIF/win/29.bin,9624,886ff32904369536ce134028d183fd6e
-/user/res/Training/training_GIF/win/84.bin,9624,c25626726e83d1d967a0945a34ddd53f
-/user/res/Training/training_GIF/win/38.bin,9624,3e146926785637525cf90cc3cdedc820
-/user/res/Training/training_GIF/win/39.bin,9624,50498725837e8f6081d8c705df8aa468
-/user/res/Training/training_GIF/win/23.bin,9624,a3ab27eb6e9f693c09d7509e23cd9791
-/user/res/Training/training_GIF/win/70.bin,9624,f8f0ca30bd1021ced3bfde6236e0eefe
-/user/res/Training/training_GIF/win/59.bin,9624,bb1d572bb7e34aa5588e49e822b38662
-/user/res/Training/training_GIF/win/32.bin,9624,c5345ce00e4cc688f093c8e00b83fad8
-/user/res/Training/training_GIF/win/3.bin,9624,14d1f18961f5de2f9c020fe87a57954e
-/user/res/Training/training_GIF/win/93.bin,9624,e92ae4c86ca3bf6a01b1466b30af9572
-/user/res/Training/training_GIF/win/28.bin,9624,d5ab980dc9dfacb931080cddff031192
-/user/res/Training/training_GIF/win/10.bin,9624,aa91c696ab197b464064e5e9bfde9460
-/user/res/Training/training_GIF/win/88.bin,9624,7f4fc5aa6a6a98151f8f88b854ba1e63
-/user/res/Training/training_GIF/win/41.bin,9624,4307b3ec0471cdb18338302ee21f32e0
-/user/res/Training/training_GIF/win/34.bin,9624,050d0e107e88ed5daeb0d63e33c4e45c
-/user/res/Training/training_GIF/win/48.bin,9624,11006c6374908391b07bb873ff9910b5
-/user/res/Training/training_GIF/win/22.bin,9624,06c86ce3bb34f49a5ebdad1a7b7e35b9
-/user/res/Training/training_GIF/win/27.bin,9624,af360c78ede45e38b3e694130f3e9eed
-/user/res/Training/training_GIF/win/7.bin,9624,f27246bb768affe153c6255686e9af41
-/user/res/Training/training_GIF/win/83.bin,9624,caf2f15e78fa22992198b3f79d29c4ad
-/user/res/Training/training_GIF/win/78.bin,9624,1dcfd3552544e752ca34ffecfdb05d4a
-/user/res/Training/training_GIF/win/17.bin,9624,8bd6b8735983f69de3bc2149935c2fe7
-/user/res/Training/training_GIF/win/5.bin,9624,454df7ddea67d6b12b45124f967b811c
-/user/res/Training/training_GIF/win/2.bin,9624,7afed439c75a596e3c605d363571faea
-/user/res/Training/training_GIF/win/36.bin,9624,8341b99b8bde8baf8cd0dc59b4c86d9b
-/user/res/Training/training_GIF/win/66.bin,9624,468ec8f786c4bef9fb22b48f2dd96245
-/user/res/Training/training_GIF/win/67.bin,9624,9f883a9d25261d0d75dc6c74f6794b96
-/user/res/Training/training_GIF/win/85.bin,9624,777a07dcc16a00b68e71dab408587ca5
-/user/res/Training/training_GIF/win/11.bin,9624,074177f7a5f3325e468c9fc685629b16
-/user/res/Training/training_GIF/win/57.bin,9624,174c782ce5d003a1a617942ea4842525
-/user/res/Training/training_GIF/win/87.bin,9624,a224724222975d5e52c6ad007bbcf3d0
-/user/res/Training/training_GIF/win/26.bin,9624,e045085531cf6eb4201a2335b31ad1e0
-/user/res/Training/training_GIF/win/72.bin,9624,53f622d615a6564e88faa1637e1cc418
-/user/res/Training/training_GIF/win/33.bin,9624,1693f45e1c57a5f056e5cea85cf06d95
-/user/res/Training/training_GIF/win/54.bin,9624,08620aa505f910919aa8b47bcc05c41d
-/user/res/Training/training_GIF/win/62.bin,9624,1696c627112facc5deffa4997b09f223
-/user/res/Training/training_GIF/win/43.bin,9624,03cfdccc22ef09e375640f6f79201f5b
-/user/res/Training/training_GIF/win/46.bin,9624,c18c38f95fa6733a1b1b46aa85ff45ff
-/user/res/Training/training_GIF/win/24.bin,9624,e84883bfe496863cd577c6c7c1119538
-/user/res/Training/training_GIF/win/37.bin,9624,81559e07bd437cd8037ff377d438005e
-/user/res/Training/training_GIF/win/21.bin,9624,c7b56f391132e48fb5c34ea4b0e9d0c0
-/user/res/Training/training_GIF/win/74.bin,9624,3c956bd2bc8e0d21f3e4b3fbe4dac372
-/user/res/Training/training_GIF/win/81.bin,9624,96b44d7761f10037ba81910f0260ad84
-/user/res/Training/training_GIF/win/71.bin,9624,d2088bae636ff40f45673241c78a6182
-/user/res/Training/training_GIF/win/94.bin,9624,11e2cc23be15548a9506e278432cd38e
-/user/res/Training/training_GIF/win/56.bin,9624,b22b9e8ac2f4940897e759ba04a474e1
-/user/res/Training/training_GIF/win/73.bin,9624,41e888df3384e65c6c89e96fd25ae664
-/user/res/Training/training_GIF/win/64.bin,9624,f7b0dec2fd1b6ad6d35bc76a071991ea
-/user/res/Training/training_GIF/win/61.bin,9624,5cf5e514ec84cf85f7dacdb71d605550
-/user/res/Training/training_GIF/win/92.bin,9624,b3b20d80ce65156c9a5d1bd62a4dbca9
-/user/res/Training/training_GIF/win/45.bin,9624,7d488e9a033423ac838cd5adad181a3d
-/user/res/Training/modules/Buttonground2.bin,13464,f7d2612503b75dfadf77a57fc58e561c
-/user/res/Training/modules/Sport_stop.bin,8536,4f68765a2b82538d0a2e44c9ace35ef5
-/user/res/Training/modules/Go_2.bin,27224,140fd7aad97c4f32ae5996bee78e13fc
-/user/res/Training/modules/No.bin,6824,d5ee709de0c93cdf2a654d359c094f20
-/user/res/Training/modules/Point_yellow.bin,584,addc69d32cf17aef03e100e710417255
-/user/res/Training/modules/Point_green.bin,584,bdf6f6efd8277d95916918f517e3577b
-/user/res/Training/modules/GPS_2.bin,1144,04433547a337f9d3d6144827c67336d1
-/user/res/Training/modules/Time.bin,888,3660d1d77e922abfc8534afbc1239210
-/user/res/Training/modules/Step_30.bin,664,a00373ead91dffd0c4fb075a18ada396
-/user/res/Training/modules/Heartrate_2.bin,1144,9508bb5e49a602f3d923ae0ad46efb7d
-/user/res/Training/modules/Sport_continue.bin,8536,8fd71a2c562fe16c76fa9d19c3a05916
-/user/res/Training/modules/More_icon.bin,504,14c33e6f0809afc49631001ebf1c78d7
-/user/res/Training/modules/Line.bin,4776,37718329b816faba577763906ca83091
-/user/res/Training/modules/Sport_pause.bin,8536,643ccf583ef7cefde4461897477c4fce
-/user/res/Training/modules/Note.bin,584,729dc944cd6d7af3b6af8c3d0beb7696
-/user/res/Training/modules/Calories.bin,888,cac5f04a997d2d987f8db1fc87c47661
-/user/res/Training/modules/Color_Progress.bin,125688,690e2291bab21013de51db0b650dc0ff
-/user/res/Training/modules/Point_orange.bin,584,6712d243a51bc556e12bdfdfe60c9952
-/user/res/Training/modules/Heartrate.bin,408,ae8d5d971d446c33cb58584e6643a54d
-/user/res/Training/modules/MoreView.bin,146040,4c68b948baecc9023618d4dd014319b0
-/user/res/Training/modules/Buttonok.bin,31224,9be5363a6a8579f6bac05fe6febb652e
-/user/res/Training/modules/Yes.bin,6824,6fd689a03cecc7e2bd7b574b9b922cf2
-/user/res/Training/modules/Piont_bubble.bin,344,25e821b8e612ccefd0a2e798348b4cd7
-/user/res/Training/modules/Point_black.bin,664,f6733b084281d641e7a35639bbb055cd
-/user/res/Training/modules/Control_point.bin,1144,66c17d1df80ed8d0e7e3d98872e99f1d
-/user/res/Training/modules/Back.bin,4504,7a9e33f60192c68720f70f039a9e465d
-/user/res/Training/modules/Line_2.bin,344,af3754cd809ffd2f38a085bd5b16fa77
-/user/res/Training/modules/Walking_54.bin,2904,88b2ea6f4ea233f67566b178ea7c3540
-/user/res/Training/modules/Path.bin,44392,994030a13c886245d1d1e1550294008a
-/user/res/Training/modules/Heartrate_30.bin,664,be7e2221f3231483fb15fb48ba596218
-/user/res/Training/modules/Bouttonground.bin,13464,5f93f786e2c9647036c4742a80221d8a
-/user/res/Training/modules/Data_point.bin,1144,4f53a637dd703d154d4a572940e68f4a
-/user/res/Training/modules/Line_1.bin,1272,883a6e4ecabfd6baf483868529c747bc
-/user/res/Training/modules/Icon.bin,360,3cdc54a6cc58b683428df192fe3612da
-/user/res/Training/modules/Mileage.bin,888,673e4c6c285ecc51dafbaf719cbb09b7
-/user/res/Training/modules/Arrows.bin,216,5d0cb94c08eeb3017a5aa5d9547237a2
-/user/res/Training/modules/Mileage_30.bin,664,96b67229d160578a49752374bf0927eb
-/user/res/Training/modules/Heartrate_1.bin,1144,c2c46abb6d965b15929f0c10c7a7f841
-/user/res/Training/modules/Bubble.bin,2712,867edfb19608ece4c19b065d250a84c1
-/user/res/Training/modules/Calories_30.bin,664,481aa3e41284b9dca23ac4bd8ac7c62f
-/user/res/Training/modules/Norecord.bin,9624,257cf0ecf696ac1e2fb229925467a454
-/user/res/Training/modules/Point_bule.bin,584,8cf38b0329eb9a4cd794ec3b65516a11
-/user/res/Training/modules/sport_heartrate.bin,1896,43a1c96a339da9ba43e8aa8ca2bfa127
-/user/res/Training/modules/More.bin,13464,21128c7ea9eb8fdb6f83aeefe668fddf
-/user/res/Training/modules/Inco_up_40.bin,1144,48952f79999755f3ec98f84d8b0cf15d
-/user/res/Training/modules/Warning.bin,4504,540bd42b8b4a9a0e08a6daf98c14b098
-/user/res/Training/modules/Sport_strength.bin,3624,6a04d51f256ad90c1b2c4f3796fbbdd7
-/user/res/Training/modules/Inco_up.bin,168,612bafb2f7cb017842ca5bd715d9fb1e
-/user/res/Training/modules/GPS_1.bin,1144,7b91418255e781d2d2d15a622fc18a6d
-/user/res/Training/modules/Go.bin,27224,a3be97299acf9e4f85a97a5fe28c737e
-/user/res/Training/modules/Progress.bin,118824,dfd2525104a4e0877e6c1b95e6b59003
-/user/res/Training/icon_36x36/Jumprope.bin,888,7f86bc0e73105843be4dafcbff4c1c8f
-/user/res/Training/icon_36x36/FreeTraining_60.bin,2424,19a3d4c6fc810bb07d5ececff86abd52
-/user/res/Training/icon_36x36/Walking.bin,888,2b483fd929e2102432fc66e42dfc3a07
-/user/res/Training/icon_36x36/Mountaineering.bin,888,682a393d5bea1030a1f27a1f478448c4
-/user/res/Training/icon_36x36/Fitness.bin,888,df22129767ab261c0e6b2cad40ad95ae
-/user/res/Training/icon_36x36/Other.bin,888,57a8c8dae821aca1a655274b6e52617b
-/user/res/Training/icon_36x36/Running.bin,888,000dd37e5be263475a5f2e568450a409
-/user/res/Training/icon_36x36/Running_60.bin,2424,8c86fae56d1fb54f3bb361ae988b98c2
-/user/res/Training/icon_36x36/Rest.bin,888,1c49c99fcf74a7df652e493468d9c14f
-/user/res/Training/icon_36x36/Limit.bin,888,bf21e22db330c4089ec41aab6edd29d2
-/user/res/Training/icon_36x36/Dance.bin,888,01ef02e18a0738d8c6ae3d392f74c9d9
-/user/res/Training/icon_36x36/Ball.bin,888,b43334ecd9ce7f941a6d9883fd48e50b
-/user/res/Training/icon_36x36/Riding_60.bin,2424,0eef3d02a84e83638f75ae864a5b65a5
-/user/res/Training/icon_36x36/Ice.bin,888,a0fcc831d369682ee6332be2857b8eb2
-/user/res/Training/icon_36x36/Swimming.bin,888,d8449d270c9089c84f869a1a55e60637
-/user/res/Training/icon_36x36/Riding.bin,888,9dbff70a75d402099a2c1517ca4a014f
-/user/res/Training/icon_36x36/Pingpong.bin,888,b216c236f175bb223c0e8088844d4fbb
-/user/res/Training/icon_36x36/walking_60.bin,2424,6bdf4b962061972d8471b1aed9183757
-/user/res/Training/icon_60x60/FreeTraining_60.bin,2424,19a3d4c6fc810bb07d5ececff86abd52
-/user/res/Training/icon_60x60/riding.bin,2424,4b9ecebc75ab5ee4f92b5e7312c0f045
-/user/res/Training/icon_60x60/Running_60.bin,2424,8c86fae56d1fb54f3bb361ae988b98c2
-/user/res/Training/icon_60x60/running.bin,2424,866c4e865117da4c8ab329950b46af58
-/user/res/Training/icon_60x60/walking.bin,2424,7d4d355cca088d2de24f5c0754446540
-/user/res/Training/icon_60x60/Riding_60.bin,2424,0eef3d02a84e83638f75ae864a5b65a5
-/user/res/Training/icon_60x60/walking_60.bin,2424,6bdf4b962061972d8471b1aed9183757
-/user/res/Training/icon_54x79/Dance_54.bin,2904,db165dbc499719ca94c331e7b11915c8
-/user/res/Training/icon_54x79/Swimming_54.bin,2904,4c44e390d1a3866a88e270af858d88e5
-/user/res/Training/icon_54x79/Ice_54.bin,2904,f5ed564365a9e462d1e91ce73662b9eb
-/user/res/Training/icon_54x79/Ball_54.bin,2904,a1c27005121be383bdd7ab226e5f4ee8
-/user/res/Training/icon_54x79/Walking_54.bin,2904,0f558504badb3ba052707f71b146d44f
-/user/res/Training/icon_54x79/Limit_54.bin,2904,0bee7cc06ac8276acfbc8ea8394e9571
-/user/res/Training/icon_54x79/Rest_54.bin,2904,3763b6b41cce04805d933fb4603e135c
-/user/res/Training/icon_54x79/Fitness_54.bin,2904,2c26455e0530da0775fa101754a60356
-/user/res/Training/icon_54x79/Other_54.bin,2904,3681bdfc4eb4e956a96c7f51682cb77a
-/user/res/flashlight/color_4.bin,6824,b71a456fb67e65885787953f05f61303
-/user/res/flashlight/color_1.bin,6824,1f6cf0d836651a7c3d2d4f59fda52424
-/user/res/flashlight/color_6.bin,4504,7e061912b747146a848a4080772435be
-/user/res/flashlight/flahing_setting.bin,17304,f28879cdd73017692566ad23abacf553
-/user/res/flashlight/color_selected.bin,9624,f223175ea9f517c72d786ab129441ef3
-/user/res/flashlight/color_2.bin,6824,573b1f7aa415764a31d8d874cd306bdc
-/user/res/flashlight/color_custom_selected.bin,3480,3842b9ca454c573bb374815235ff60ed
-/user/res/flashlight/up_arrow.bin,792,24d4392f48236e60b85808d469dadba5
-/user/res/flashlight/color_5.bin,4504,78f13325b398520721303ce5737ec1d5
-/user/res/flashlight/color_3.bin,6824,c0d8f7ab5f7bac2888f35d78a7687491
-/user/res/flashlight/color_custom_bg.bin,146040,7975ec6ef7da9525a90ada1631a376fc
-/user/res/flashlight/color_0.bin,6824,c628486da620085644f17f625fdc6573
-/user/res/flashlight/Flashlight.bin,2376,fba1df2a3449c2f8270346df75f51247
-/user/res/flashlight/color_setting.bin,17304,71953a4457437bcdd399c4a8d6562a15
-/user/res/Battery/Battery_Black.bin,1048,bb6062285494d6ae94f1dd4315e38fb1
-/user/res/Battery/Battery_White.bin,1048,0bd3ca1e1c320eef755a78bf3ccbb665
-/user/res/Battery/Icon.bin,360,e94340b5449d0c2f6f4dc49a812d2cb0
-/user/res/font_library/Anuphan-VariableFont_wght.ttf,219608,97d4e28d2c892ef0fee8a4c6f918f3fa
-/user/res/font_library/Handjet.ttf,277648,d22f147c89c1f8e8769be5f119415fa9
-/user/res/font_library/Gilroy_Bold.ttf,80528,05d29b241b821092e1060a329065d6f9
-/user/res/font_library/Audiowide_Regular.ttf,47676,b32da0c186225df40f7e9dc2d5bccc38
-/user/res/font_library/hindi.ttf,605484,6a26d803510248ea4839b2987b0f651f
-/user/res/font_library/Sheeping_Cats.ttf,24604,6cd7aa5218326e7c99410444c0442869
-/user/res/font_library/HarmonyOS_Sans_Naskh_Arabic_Regular.ttf,119876,2d09dc1b1647df12a5baaab9bba3e4bb
-/user/res/font_library/DejaVuSans.ttf,720012,eccb7a74720fc377b60d6b2110530fd9
-/user/res/font_library/Orbit-Regular.ttf,778300,1732938d7a0612d6c34e4116364ef5ec
-/user/res/font/pl.lang,17102,e6447a5865753aa6549be9af6d62f930
-/user/res/font/he.lang,19815,32c274e6e7ca5a1ed753749457e2fdb7
-/user/res/font/vi.lang,19647,47538b8dc64d0ced43d6f5b307ef3c9f
-/user/res/font/zh.lang,13965,a976027cba1bb79aedb566e4d058ffb2
-/user/res/font/it.lang,17008,0f5e7daedeedc4d4146cf9e9f69f1b4e
-/user/res/font/de.lang,17050,e3e186d748e234020e629c9592ccea83
-/user/res/font/ru.lang,27953,713570f9f393ec5dea7d77568c297384
-/user/res/font/nl.lang,15777,606f2a5b633f39a4fd8a14d7da13e949
-/user/res/font/es.lang,17333,cf81c957897e9581b8dcc2b7f0abec18
-/user/res/font/fr.lang,17787,3704a685fb0ec5460082908e63ebf9bb
-/user/res/font/ro.lang,16977,70d5add89cd9bfd7dcc30fca0a273699
-/user/res/font/en.lang,15985,216c88079d2a0e7ad29257cfa1a152cc
-/user/res/font/id.lang,15626,c3d80613c608b80bce6bbff7724f80a5
-/user/res/font/fa.lang,24373,45ece0ed654f1232809640bc62a5db64
-/user/res/font/hr.lang,16178,d23c09bd47d5c55838455b6121cb13ab
-/user/res/font/el.lang,28721,b2d8cf5a5ad45ff6d78c8973740541df
-/user/res/font/ui_resource_string.h,20688,52c385b1a744ae2930ff27432168092b
-/user/res/font/pt.lang,16829,63ae64ce0e5d1a3cc454869367272508
-/user/res/font/az.lang,17619,d9b3fa54d6017989103dfd6a1e319cb8
-/user/res/font/th.lang,34174,8ce3bd890c46130a7d2c2b2a52a37448
-/user/res/font/sv.lang,15339,b78df6fa922b77b79877833175b8a066
-/user/res/font/uz.lang,16327,865215f8fbd20401b224fcecc971fbfa
-/user/res/font/ja.lang,19856,2fbaeec7fc0eba7b5f31934d60cd63c4
-/user/res/font/ar.lang,23429,d2a28faa7ae7c211e2c9f19ad9a3d729
-/user/res/font/hi.lang,33915,f47f860f47adf8e63a59e76971fb96bc
-/user/res/font/tr.lang,16025,d5610977fa9deb406ae29082d46e209e
-/user/res/font/ko.lang,16763,7796f5c1f55ab7ee3b987ad3a334aaa9
-/user/res/font/fi.lang,15922,fc096d8b01d69b270a5124ac097ae800
-/user/res/font/uk.lang,27017,ffd65125cb48176503eee15b4c9348cd
-/user/res/font/cs.lang,16641,10f42c320cf5236994bc2e60f4f06c66
-/user/res/font/ms.lang,16102,188f116714eef85dd0689da4ca150735
-/user/res/heart_chart/background.bin,52024,77b7be8fab25907c0bc0566343a354d2
-/user/res/heart_chart/buttomicon.bin,280,6ccdd5af47445efa3d1b214cd1fd0e24
-/user/res/heart_chart/topicon.bin,280,43fbf671471b513e7d383c7ce4f55473
-/user/res/heart_chart/hearticon.bin,1896,0b2cb2ddecb48f6ad96ac6ecff4c88b9
-/user/res/heart_chart/hearticon/HEARTICON_04.bin,1896,2d89eb44b105316eb11845a5c293d5b1
-/user/res/heart_chart/hearticon/HEARTICON_20.bin,1896,2e45f33b929a711d7efe51eb21ed19da
-/user/res/heart_chart/hearticon/HEARTICON_12.bin,1896,1349e5c6a7cc6cdd240b7db068b84dce
-/user/res/heart_chart/hearticon/HEARTICON_15.bin,1896,7ad0c719986257e6aadb08466cf1dcba
-/user/res/heart_chart/hearticon/HEARTICON_09.bin,1896,ae3162563a812dc627b06e53d55ecff8
-/user/res/heart_chart/hearticon/HEARTICON_11.bin,1896,187bf5242688bc5bae2631979ed67cd2
-/user/res/heart_chart/hearticon/HEARTICON_14.bin,1896,09c063d8162df690fce25c8cf27a8bc2
-/user/res/heart_chart/hearticon/HEARTICON_08.bin,1896,d327d81e0ee9fbfffb50c160eca7de85
-/user/res/heart_chart/hearticon/HEARTICON_03.bin,1896,0269ec34640d5cfb415b631e9150981f
-/user/res/heart_chart/hearticon/HEARTICON_05.bin,1896,e2391e7136896257f765b532fbe94f4b
-/user/res/heart_chart/hearticon/HEARTICON_13.bin,1896,f31c4f647a677b3c884e9ff76871dc0a
-/user/res/heart_chart/hearticon/HEARTICON_07.bin,1896,5706b1033341c8b118de04057d1332fc
-/user/res/heart_chart/hearticon/HEARTICON_16.bin,1896,c88b5fa99c7a45ff08cc9f4de35b346e
-/user/res/heart_chart/hearticon/HEARTICON_06.bin,1896,62a6d65db3c0f6fb0d1c413a8c74f54a
-/user/res/heart_chart/hearticon/HEARTICON_18.bin,1896,8498b44a0f6de0b7656b861f247dc107
-/user/res/heart_chart/hearticon/HEARTICON_10.bin,1896,92856cb6f28d20e3d347bd4e74ea92f4
-/user/res/heart_chart/hearticon/HEARTICON_19.bin,1896,6bad66c87622a5ecc8d197344dd8b0fa
-/user/res/heart_chart/hearticon/HEARTICON_17.bin,1896,aa472b659a98189d6513b5d33e6829c0
-/user/res/heart_chart/hearticon/HEARTICON_01.bin,1896,afabf35bfb6d0e1570161b973ad24c6d
-/user/res/heart_chart/hearticon/HEARTICON_21.bin,1896,afabf35bfb6d0e1570161b973ad24c6d
-/user/res/heart_chart/hearticon/HEARTICON_02.bin,1896,105aaf482a0c65a35b4ec6d802ae0526
-/user/res/assistant/assistant.bin,29704,c78f624067adc5111f91f1e37a80fdf6
-/user/res/assistant/assistant_gif/assistant_25.bin,46488,5abf89b866220424583d8942d8395b2a
-/user/res/assistant/assistant_gif/assistant_28.bin,46488,5feca3d4f0af50614f747d9d8af30ed5
-/user/res/assistant/assistant_gif/assistant_16.bin,46488,c703f182f72e9fb8e2df2ae559096b94
-/user/res/assistant/assistant_gif/assistant_03.bin,46488,ee61b8d0740e0b4973b265e0f93f9d70
-/user/res/assistant/assistant_gif/assistant_30.bin,46488,d8b2a1926fa99090de4586f67125ea0d
-/user/res/assistant/assistant_gif/assistant_23.bin,46488,930cb52923c24226bc5f4633068fd92d
-/user/res/assistant/assistant_gif/assistant_09.bin,46488,a20e0f6f6f2f81106d9e8bcb05ba3b5f
-/user/res/assistant/assistant_gif/assistant_31.bin,46488,b328c186afe9fb1e94a9f473b4f7c6ed
-/user/res/assistant/assistant_gif/assistant_27.bin,46488,48deb93707b65367ab27db067e376ffd
-/user/res/assistant/assistant_gif/assistant_18.bin,46488,c5f258c6e421caa78e3d9cd2b1521f57
-/user/res/assistant/assistant_gif/assistant_21.bin,46488,ea98593fc45dc69a4dd68fe7198e7367
-/user/res/assistant/assistant_gif/assistant_02.bin,46488,45b82559a05b00bf6f25bcec877ecf67
-/user/res/assistant/assistant_gif/assistant_08.bin,46488,ef0dc2a9fcb182246fb545907def4c20
-/user/res/assistant/assistant_gif/assistant_15.bin,46488,5388c56702b852a0de452a18c94445ef
-/user/res/assistant/assistant_gif/assistant_05.bin,46488,a7e18fb7a5be0c6fed84928e1a5b94ed
-/user/res/assistant/assistant_gif/assistant_06.bin,46488,5c5af6c0b16de45dda9269a069ecb120
-/user/res/assistant/assistant_gif/assistant_19.bin,46488,7577d24b4ada0ce599a63ee10aaebe8e
-/user/res/assistant/assistant_gif/assistant_10.bin,46488,ac906067957af2f7231ce764a8f16696
-/user/res/assistant/assistant_gif/assistant_07.bin,46488,3ae39dc39350f1cd306ec44d3a204f32
-/user/res/assistant/assistant_gif/assistant_24.bin,46488,038b4d11a5a7a15907a07280ac8b68e8
-/user/res/assistant/assistant_gif/assistant_26.bin,46488,484c8b3b43026e9bdf0467fed3b5f25d
-/user/res/assistant/assistant_gif/assistant_12.bin,46488,6bc3f0b53864bac7f11efe92040281e0
-/user/res/assistant/assistant_gif/assistant_04.bin,46488,e3aee167aaaf1b53fe91629c7fe8d7a2
-/user/res/assistant/assistant_gif/assistant_11.bin,46488,1f9c4bf8e294276b5b7f3856bcc7e747
-/user/res/assistant/assistant_gif/assistant_22.bin,46488,73f8143ed8e7f545537cebe3ba7c63b5
-/user/res/assistant/assistant_gif/assistant_13.bin,46488,431b2c3878c6f70072cf1c6f51a58aed
-/user/res/assistant/assistant_gif/assistant_20.bin,46488,68bf652a2923ebe613900968a9464ead
-/user/res/assistant/assistant_gif/assistant_01.bin,46488,6983e5f93221b8344b2a1f3c166f25d5
-/user/res/assistant/assistant_gif/assistant_17.bin,46488,1f75b68568e2d8fd311d413145194b79
-/user/res/assistant/assistant_gif/assistant_29.bin,46488,6a1d9922145421f5c6ced3ff7f254f52
-/user/res/assistant/assistant_gif/assistant_14.bin,46488,cf5d83136eef0b01d444d643dabb20f3
-/user/res/Alarm/alarm_prompt.bin,6824,5a72789fafd58faeefda12033c25f1b1
-/user/res/Alarm/alarm_delete.bin,6824,ce52b5b042764a3a075568fd7047542f
-/user/res/takephotos/cream/20.bin,13464,1e2ff9955a01e9b2dbb4a56ec8004b91
-/user/res/takephotos/cream/4.bin,13464,af58e349314a6e970a977678dd3013b7
-/user/res/takephotos/cream/8.bin,13464,c5be86f7c4aa820335e3a8f3250a96d9
-/user/res/takephotos/cream/44.bin,13464,7f769f03f33644ee9701c762985ed7cd
-/user/res/takephotos/cream/42.bin,13464,f98635666f50850a285b6c265cc60056
-/user/res/takephotos/cream/35.bin,13464,99dce7f8d533edace6c77118565b5f3e
-/user/res/takephotos/cream/6.bin,13464,6baf696b7f9fe2552e5227f5d2c3128c
-/user/res/takephotos/cream/14.bin,13464,a93e2b057dfd8f2df6dab3cda56fcb34
-/user/res/takephotos/cream/18.bin,13464,d8ca9721e3841c8d8d4a0ee3de8ad40f
-/user/res/takephotos/cream/9.bin,13464,fc66cec58471669d68bdbe522814da45
-/user/res/takephotos/cream/49.bin,13464,25fce8eedf9503f152c05fc3b95e4a96
-/user/res/takephotos/cream/50.bin,13464,25fce8eedf9503f152c05fc3b95e4a96
-/user/res/takephotos/cream/1.bin,13464,25fce8eedf9503f152c05fc3b95e4a96
-/user/res/takephotos/cream/25.bin,13464,9d0cbe30f48d7b3ea31f97f0604d3f8a
-/user/res/takephotos/cream/31.bin,13464,e22fe55aa300e7aade33d977cf95cd16
-/user/res/takephotos/cream/30.bin,13464,4634a5f8a9fe2ba43cf6ab28666c4bca
-/user/res/takephotos/cream/19.bin,13464,36d50b11663e9e4bb45a3be25ea36300
-/user/res/takephotos/cream/40.bin,13464,dc2c3eae54ea1a7c8e929532990f97d7
-/user/res/takephotos/cream/16.bin,13464,1aced51d81a1f89a87d2000d96de957a
-/user/res/takephotos/cream/13.bin,13464,296a41124bc027f6d4e0b975eabd2388
-/user/res/takephotos/cream/12.bin,13464,e28ddc12b9d496f00af1b4a9f9d41790
-/user/res/takephotos/cream/47.bin,13464,e6257c4bc4caf07210735fe94213752a
-/user/res/takephotos/cream/15.bin,13464,3adf7a93b2ecf9494564f6ad4bd9bf85
-/user/res/takephotos/cream/29.bin,13464,2f6c4776cded3dcae453d96eb2ebca84
-/user/res/takephotos/cream/38.bin,13464,f2714fcd6e4103e2c0dc1b257de56663
-/user/res/takephotos/cream/39.bin,13464,0292bcbd85320df1bcc6d4433fedd0f3
-/user/res/takephotos/cream/23.bin,13464,be45d65ef0ce85dd385407d87cd35fb2
-/user/res/takephotos/cream/32.bin,13464,a7a0445cec58696063cbb0248aee65fb
-/user/res/takephotos/cream/3.bin,13464,074b33c09d54053791e7f7643e41b784
-/user/res/takephotos/cream/28.bin,13464,bc14e7d029a901b19a0ba290a22828e4
-/user/res/takephotos/cream/10.bin,13464,90664fdebdb58c12159b0a8587c67036
-/user/res/takephotos/cream/41.bin,13464,d3f8f8656ffcfd2b41edee7aaf326797
-/user/res/takephotos/cream/34.bin,13464,dc51028894bc26c0d68df22f04d4bb45
-/user/res/takephotos/cream/48.bin,13464,25fce8eedf9503f152c05fc3b95e4a96
-/user/res/takephotos/cream/22.bin,13464,36920d04efa6b59d876a97359d6a3f98
-/user/res/takephotos/cream/27.bin,13464,bd91c5b2cb4cb09fcf4b33527e9f43a1
-/user/res/takephotos/cream/7.bin,13464,3cf2b9955812bca9f3a1c70773e3a7de
-/user/res/takephotos/cream/17.bin,13464,13e665724359087fa31d523df2ef3bee
-/user/res/takephotos/cream/5.bin,13464,bfe82ac6c8b67841f12a548d41053f64
-/user/res/takephotos/cream/2.bin,13464,af9fb860244e1ef3919722e499045c41
-/user/res/takephotos/cream/36.bin,13464,c22f349f5b9d4fd9a61dfab00864f68b
-/user/res/takephotos/cream/11.bin,13464,b7f4d2d9c5731e6515cdc07cbdf0a2db
-/user/res/takephotos/cream/26.bin,13464,38b261f504c3cfb70e45a80e87fe5683
-/user/res/takephotos/cream/33.bin,13464,46b5649b895e5cccc1a180903e177c69
-/user/res/takephotos/cream/43.bin,13464,08660d13116a8a4f95ca050e440a77f9
-/user/res/takephotos/cream/46.bin,13464,6b7fcb95c84e926d4fec98c66906ac0b
-/user/res/takephotos/cream/24.bin,13464,e004d4d4846167a3f4aeb7d4a16f8346
-/user/res/takephotos/cream/37.bin,13464,d57fd73c756238a99f8110f2ec64e7c7
-/user/res/takephotos/cream/21.bin,13464,ceab4165cfa95a2a63e06b50eb3c9a52
-/user/res/takephotos/cream/45.bin,13464,9c05faaa6d46007e58c45b5796e957e1
-/user/res/takephotos/smile/20.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/4.bin,13464,6f5d4a96203971bf02e36c070ac47590
-/user/res/takephotos/smile/8.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/6.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/14.bin,13464,a7dbef92a80e242345996df8e747590c
-/user/res/takephotos/smile/18.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/9.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/1.bin,13464,955b4e6b69b7706a6aaf7a47996b9e9d
-/user/res/takephotos/smile/25.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/19.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/16.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/13.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/12.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/15.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/23.bin,13464,5aa04b4ee0e58e76475ae8439888a3da
-/user/res/takephotos/smile/3.bin,13464,30c6fc4a9d3dad1c345a9a4ed08cd2e3
-/user/res/takephotos/smile/28.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/10.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/22.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/27.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/7.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/17.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/5.bin,13464,32aade88eca34b3e95c04e565b3b1247
-/user/res/takephotos/smile/2.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/11.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/26.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/24.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/takephotos/smile/21.bin,13464,2a0f2122922977a87db1057626d7a8f7
-/user/res/add_card/button_no.bin,8664,bf480c9a4b395f218aac62f1dc8b650e
-/user/res/add_card/button_ok.bin,8664,7f146cc1529c62a5394485e3ac4fd3d0
-/user/res/Sleep/room.bin,4728,c59776e5b508996949d2bdd08521cf1f
-/user/res/Sleep/sunny.bin,17304,cb054e97bc339bdb318b2b73e206f037
-/user/res/Sleep/line.bin,392,85b7d48df4e2bef5747529d3e40fd270
-/user/res/Sleep/transverse_line.bin,1272,ba02355f50ab6fb1c8eb3536a9820d7f
-/user/res/Sleep/up.bin,1144,48952f79999755f3ec98f84d8b0cf15d
-/user/res/Sleep/goodmorning.bin,146040,8626ce4f45a2be2589d02db0d415037d
-/user/res/Sleep/alarmicon.bin,664,80f48823d4a6ea22397ef0e1cdfcc91c
-/user/res/Sleep/back.bin,98280,ac277c723faee57cb312e0ab2425c917
-/user/res/Blood/boutton.bin,31224,d8b91cc3cf0a4c8ea2fdfd4fc2dfe947
-/user/res/Blood/beijing.bin,146040,64b6f90c8170d62b54ed06890b9c39ad
-/user/res/Blood/Vector.bin,584,9fa68efaa14f82be3af56ae2676121ec
-/user/res/Blood/Error.bin,4504,15fa377941b297738d4dddde270f2b22
-/user/res/Blood/SaO2.bin,40584,b5dc5ea3dec65e87f49b545af73cde31
-/user/res/Blood/spo2_gif/spo2_28.bin,21624,5a90505d5f25681317a02ba64258c8c2
-/user/res/Blood/spo2_gif/spo2_04.bin,21624,b397e6d287d2af3276c6e94208150b4f
-/user/res/Blood/spo2_gif/spo2_11.bin,21624,c7687e5dfb7e69415338dfd88c263b60
-/user/res/Blood/spo2_gif/spo2_03.bin,21624,632f45b65923e88b46f3a23ff4e94f08
-/user/res/Blood/spo2_gif/spo2_22.bin,21624,ca95c857b5dfd0ab7b5b4fdc2fb3fff5
-/user/res/Blood/spo2_gif/spo2_16.bin,21624,4bee00a04c70d2df9cbb4ec567e4cb13
-/user/res/Blood/spo2_gif/spo2_24.bin,21624,0d62eb381c7880798e53109a0006a541
-/user/res/Blood/spo2_gif/spo2_29.bin,21624,20d146b6c5e7aadcc3dc29ebccccb913
-/user/res/Blood/spo2_gif/spo2_07.bin,21624,3a7d7b532b0d7fad0de3bee540a5dc70
-/user/res/Blood/spo2_gif/spo2_06.bin,21624,29c34589a07113797aa6efdac91ce869
-/user/res/Blood/spo2_gif/spo2_02.bin,21624,751874c7abe29a4a5a2eabd3a27b3389
-/user/res/Blood/spo2_gif/spo2_17.bin,21624,8c53da92fc777ebd41b17d27f38ead95
-/user/res/Blood/spo2_gif/spo2_14.bin,21624,5e578f3a945ad56d2d70462f22f396f7
-/user/res/Blood/spo2_gif/spo2_10.bin,21624,55579fd19534d6a6271a4a53369cc9e3
-/user/res/Blood/spo2_gif/spo2_18.bin,21624,0b086ebdd5b186d6f8526a9e68735fc8
-/user/res/Blood/spo2_gif/spo2_13.bin,21624,1ecc52b4273f5de32aa485d2c229a24f
-/user/res/Blood/spo2_gif/spo2_12.bin,21624,af657c034f376ac1d2153bba3ab89ae4
-/user/res/Blood/spo2_gif/spo2_27.bin,21624,a98c1377ba1b22d72887aa926a20a4dd
-/user/res/Blood/spo2_gif/spo2_08.bin,21624,0aabd674cc67fce215ac1d35e44d6d51
-/user/res/Blood/spo2_gif/spo2_09.bin,21624,46c690e87b4d621f9e2625f5b7f7305c
-/user/res/Blood/spo2_gif/spo2_30.bin,21624,9317afbd9e338a5d1ad99d861be08bd5
-/user/res/Blood/spo2_gif/spo2_05.bin,21624,4aff0135d318d004bb1917d26edacf75
-/user/res/Blood/spo2_gif/spo2_20.bin,21624,4e30c387ce435601a7f2e192844e850c
-/user/res/Blood/spo2_gif/spo2_01.bin,21624,79a87276b5e2c1e40317edaf8a0756a9
-/user/res/Blood/spo2_gif/spo2_21.bin,21624,89f1bff096be475e8d324b3707f50d14
-/user/res/Blood/spo2_gif/spo2_23.bin,21624,aeeb785e6fdbd4c5eea410c3c95e3cad
-/user/res/Blood/spo2_gif/spo2_15.bin,21624,a98f43583ad30403f8b4258344922307
-/user/res/Blood/spo2_gif/spo2_25.bin,21624,8e67b367bcfe58faf9eba978dbd318cf
-/user/res/Blood/spo2_gif/spo2_26.bin,21624,70bef01360c12eb9867ac6d78c47dcb1
-/user/res/Blood/spo2_gif/spo2_19.bin,21624,eade2e2ff755c283342689b30eadc46f
-/user/res/drinkReminder/DrinkReminder.bin,4504,dd58aea8114e56995ea4853910199c03
-/user/res/stopwatch/STOPWATH_RESET1.bin,6824,175816793ebc6743903861b6ecc3f5d2
-/user/res/stopwatch/STOPWATCH_LINE.bin,984,7ac01bbe6fd5de470d5aa99608c6a072
-/user/res/stopwatch/STOPWATCH_MARK.bin,6824,68af5bcb40e95a6d05c4d89e25a2026a
-/user/res/stopwatch/STOPWATH_RESET2.bin,6824,3cf807229b2537fee66979f53c366e6b
-/user/res/applist_icon/message.bin,6824,b6bd4e49c1052ddb3f07c26cfaf27d72
-/user/res/applist_icon/Bluetooth.bin,6824,bd07336d50a9f7e296f6259f97de9991
-/user/res/applist_icon/flashlight.bin,6824,47d4d4a8cf989c81ee982d34c4f75b91
-/user/res/applist_icon/findphone.bin,6824,38cfdf3f4c72dc90bedde9e65c59236b
-/user/res/applist_icon/recording.bin,6824,fb18f067fdfa1cb100c16f3d1b7711f7
-/user/res/applist_icon/aivoice.bin,6824,13f94cf4a80cb5b267ca01f868be36a3
-/user/res/applist_icon/sleeping.bin,6824,cbd285b41ae86cc3a7001b46300f95c1
-/user/res/applist_icon/music.bin,6824,4b9d67c95db4b904f5f81e6ed59df5c3
-/user/res/applist_icon/calendar.bin,6824,193523078bdce703fe1ecc0e7b97ac72
-/user/res/applist_icon/training.bin,6824,4ff2fe33919c9a2b5accd9e42362d4f4
-/user/res/applist_icon/breathe.bin,6824,c89b3e8784f98395f0257a6f44d5dbeb
-/user/res/applist_icon/clock.bin,6824,444303c3a61f423c502684edbd3883c6
-/user/res/applist_icon/save.bin,6824,0239e697d0a71b5534a44f598144edd5
-/user/res/applist_icon/booldoxygen.bin,6824,7d42a5b025dd1b31d9a816f29c441a58
-/user/res/applist_icon/sport.bin,6824,a4bddec70bab70ce74eee87f77c77d33
-/user/res/applist_icon/disturb.bin,6824,de25b1cedf49cfe3b1f5c29924423a9b
-/user/res/applist_icon/weather.bin,6824,b48130d4b9232fe124ab8524de3f152b
-/user/res/applist_icon/countdown.bin,6824,21991a7caaf21c525ef9d48b345c8eec
-/user/res/applist_icon/heart.bin,6824,8ed66f570c35c38d7ea8e53169140900
-/user/res/applist_icon/phonebook.bin,6824,b7f8767a2db6101915feef7bad3d221c
-/user/res/applist_icon/alarm.bin,6824,55b7f42858bffb79ac9f8b1c2cd86ed8
-/user/res/applist_icon/compass.bin,6824,aefbb07e2198ceef94fff8beb79cc43c
-/user/res/applist_icon/schedule.bin,6824,dd9d3c7e2dc4f2cb977830b9b702670b
-/user/res/applist_icon/setting.bin,6824,a549b139049677f8422ebdba3f875110
-/user/res/applist_icon/record.bin,6824,ae2004fb7e59700e22dfd84ecbf86042
-/user/res/applist_icon/theme.bin,6824,42e3649a5435994395d7444dd17177fd
-/user/res/applist_icon/smart.bin,6824,86a425a2491375045c6bd96b745a3d91
-/user/res/applist_icon/voice.bin,6824,f65f713257314477c5e71367960b49f1
-/user/res/applist_icon/alipay.bin,6824,bd3431dea801a3c883c30b061508709b
-/user/res/applist_icon/lighting.bin,6824,1fbe700b2664deb41554e983bde07245
-/user/res/applist_icon/assistant.bin,6824,28e1f532b9435bcd15a9209dfb5e4bfc
-/user/res/applist_icon/information.bin,6824,d1f9f5a61fc403df8443d68046a3d98e
-/user/res/applist_icon/phone.bin,6824,d24b0d4ec7e35573f04d86f92bbc7399
-/user/res/applist_icon/cardsetting.bin,6824,0fbacb76ae04d4303d991944733a853a
-/user/res/applist_icon/changedial.bin,6824,dc8b07d6e2cc401d2633963cf81366ad
-/user/res/applist_icon/applist_big_icon/message.bin,25896,a78d095898f92fa13ec58c30c53cfceb
-/user/res/applist_icon/applist_big_icon/Bluetooth.bin,25896,773c9c5f3a1223b7ea476313801e8ff8
-/user/res/applist_icon/applist_big_icon/flashlight.bin,25896,4508d9db35282ad0299747a8f7943ca5
-/user/res/applist_icon/applist_big_icon/findphone.bin,25896,c163c70383181e25ae40b167a539d2a4
-/user/res/applist_icon/applist_big_icon/recording.bin,25896,da1a8a095143c1f3d036ae68068d3029
-/user/res/applist_icon/applist_big_icon/aivoice.bin,25896,1ea6a55d7ba65ae1832cde2f1f86bd00
-/user/res/applist_icon/applist_big_icon/sleeping.bin,25896,c872de17c86915f814ed9c381957a425
-/user/res/applist_icon/applist_big_icon/music.bin,25896,3d97d85ebf4973ddf78f0beaeddb8cae
-/user/res/applist_icon/applist_big_icon/calendar.bin,25896,16a0b6419ad1a4e6d7b5453bfac4da49
-/user/res/applist_icon/applist_big_icon/training.bin,25896,37c445f10914f2ba784ae852a4ac2030
-/user/res/applist_icon/applist_big_icon/breathe.bin,25896,1a44b074d3176fc2d7eda6cafb16e5b9
-/user/res/applist_icon/applist_big_icon/clock.bin,25896,577f1a4eedf838951c69eb6b91124ae8
-/user/res/applist_icon/applist_big_icon/save.bin,25896,c7dab2ace7205abd97b25c85f8fff393
-/user/res/applist_icon/applist_big_icon/booldoxygen.bin,25896,a430d20d959f4b2314483e69ab0336ba
-/user/res/applist_icon/applist_big_icon/sport.bin,25896,b97e330169ccc37f3c96990a3de19811
-/user/res/applist_icon/applist_big_icon/disturb.bin,25896,6558386c6417931dcf5a17374da46e38
-/user/res/applist_icon/applist_big_icon/weather.bin,25896,a75570ff60850944a394c214b7a7ad8c
-/user/res/applist_icon/applist_big_icon/countdown.bin,25896,dd08341f791a70f96e1484114b1a2191
-/user/res/applist_icon/applist_big_icon/heart.bin,25896,052942d08350e773dd5e4812451b6b7f
-/user/res/applist_icon/applist_big_icon/phonebook.bin,25896,c2522e6aff1b50339623403a37763de8
-/user/res/applist_icon/applist_big_icon/alarm.bin,25896,1f0d4e41f8e2f31bb6fc2fc0bf47d22f
-/user/res/applist_icon/applist_big_icon/compass.bin,25896,9d7e13a2c30f140c6c699bf01792e532
-/user/res/applist_icon/applist_big_icon/schedule.bin,25896,6b1c0d5ccfbab60e773a5051af6d1bd3
-/user/res/applist_icon/applist_big_icon/setting.bin,25896,3a2b7c2179d82ac60c3418592ede7c2c
-/user/res/applist_icon/applist_big_icon/record.bin,25896,093173ef35caa6fd044d5e10ed0d8c70
-/user/res/applist_icon/applist_big_icon/theme.bin,25896,03ec883bad2aacbad266be22c3d4ea69
-/user/res/applist_icon/applist_big_icon/smart.bin,25896,e2f4dc88c0d8591c5c849fc1af706f5d
-/user/res/applist_icon/applist_big_icon/voice.bin,25896,fb69b295a189fc19dcd50bc67d893be4
-/user/res/applist_icon/applist_big_icon/alipay.bin,25896,f4833da1013a7fb4567158ef7fed78ec
-/user/res/applist_icon/applist_big_icon/lighting.bin,25896,dc967d0a0710eaa9d9c73cdde7d66c04
-/user/res/applist_icon/applist_big_icon/assistant.bin,25896,9145f2789ea810839cef3bd2a989ef8d
-/user/res/applist_icon/applist_big_icon/information.bin,25896,d293cf1c360f3402a8bbe9dd88c585af
-/user/res/applist_icon/applist_big_icon/phone.bin,25896,fbbc4b9cb9fd3d385d75a180c4c062b6
-/user/res/applist_icon/applist_big_icon/cardsetting.bin,25896,63eaeac0cfd3e0cff9c1af7e5d014267
-/user/res/applist_icon/applist_big_icon/changedial.bin,25896,09eb7df6ee9c72e8b1566a844d38e2e5
-/user/res/Phone/call.bin,5208,5bc97aa4589dccdd428c46a1f18d79f9
-/user/res/Phone/Phone_Call.bin,13464,89ea4a0d673027328f6d48d0856de97c
-/user/res/Phone/4.bin,5208,e9a045d802760a8774f7309f994050f9
-/user/res/Phone/8.bin,5208,93070e743cd384149dc21888ce2fa66b
-/user/res/Phone/6.bin,5208,502f0204d6e7a86fba68960876768794
-/user/res/Phone/phone-call.bin,1896,91e824cd1e4214f5f418ee55d905b4f0
-/user/res/Phone/9.bin,5208,c6e39d60e2edbc66764cbd42856fbe8a
-/user/res/Phone/callhangup.bin,1896,99d8c910840451a502929dad05719669
-/user/res/Phone/0.bin,5208,4c6787b5d78cdc0a8b5d0e20077f2dd2
-/user/res/Phone/1.bin,5208,de178a2938944e4c776e9add02c28d07
-/user/res/Phone/phone-off-round.bin,5544,6949b9ecc74d391656d7501be346a6b6
-/user/res/Phone/boy.bin,15224,987143d059b0cf9d2081a2961bd538fa
-/user/res/Phone/phone-call1.bin,1896,b4dd1a4db8a756a8f438854fe22fedd1
-/user/res/Phone/phone-off.bin,1896,99d8c910840451a502929dad05719669
-/user/res/Phone/Phone_Ring.bin,13464,244a30d6ff8267e911ea28d93632d10a
-/user/res/Phone/girl.bin,15224,e90fda9715d3eaab2d9a71556c99c41f
-/user/res/Phone/no_sim.bin,4504,57c8442aa23b181354891a1f289e94ca
-/user/res/Phone/del.bin,5208,c6f7ee68db5fca1ec2ddb12659612839
-/user/res/Phone/microphone.bin,1896,cea931a256b112decc53b7e9c5ba5d66
-/user/res/Phone/3.bin,5208,481d511ca8e3f23d9e737045ebdb35b3
-/user/res/Phone/little-girl.bin,2424,ffb2e0c4f54555ef848399c89deede02
-/user/res/Phone/little-boy.bin,2424,4b203a7427fad2d5ccdbd577f059d486
-/user/res/Phone/7.bin,5208,4299b75a58d8d19e67e473af3a14360c
-/user/res/Phone/phonedir.bin,15224,48cf1eac9c9fc253f979044d11ac9d83
-/user/res/Phone/5.bin,5208,edef62eba126b6b579c221b5aba6c17e
-/user/res/Phone/voice.bin,1896,c2892dcccd79e41ccbee698ad2269eb6
-/user/res/Phone/2.bin,5208,5af9c8bd8ea25facfdb3496f75f74d17
-/user/res/Phone/microphone-no.bin,1896,11b4eae239f17fe704d99b37cf9dec8f
-/user/res/Phone/callanswer.bin,1144,719fa83d45b7e62eac8cadab32c00086
-/user/res/Phone/voice-no.bin,1896,839505ab297d3cd6fdc898c11f9ad691
-/user/res/Phone/Telephone/calllogdelete.bin,6824,ce52b5b042764a3a075568fd7047542f
-/user/res/Phone/Telephone/watch.bin,408,b98ae45c577a85748f9a186806cf7037
-/user/res/Phone/Telephone/FrequentlyContacted.bin,1944,f068b6ad39874ba4fcff4f0bd9bf1f7e
-/user/res/Phone/Telephone/DialingMethod.bin,1944,951102f0b5c240e5062de0fe4fd2a395
-/user/res/Phone/Telephone/TelephoneLine.bin,824,f20747692fa6231613009d0a0b343af0
-/user/res/Phone/Telephone/phone.bin,216,51f547a38c72acd6e1c96fd1ec6ccec8
-/user/res/connect/20.bin,8184,a42cd10b993ad67ce2f08006a41e27cf
-/user/res/connect/4.bin,8184,64a27f7cd68fc33db8711de5b9d5bdfa
-/user/res/connect/8.bin,8184,453322bf713d397825fcf4f1f7e96e48
-/user/res/connect/44.bin,8184,62bf82447451642f3bf747259ea2ceca
-/user/res/connect/42.bin,8184,13a978a71294510ea792f315efd11103
-/user/res/connect/35.bin,8184,3fd97ae62734bbb2a99b27b652d8e544
-/user/res/connect/58.bin,8184,adbbd3a4a37cd5d2a97f80180ddc8192
-/user/res/connect/6.bin,8184,0abf6d31629807121963fa13da7f042a
-/user/res/connect/14.bin,8184,906de1e2c5f05c0c45664d44cc3e907a
-/user/res/connect/18.bin,8184,8b4f0b61e6489de328a83d300bd36c75
-/user/res/connect/9.bin,8184,c11d3b630293a58aeb6b0c5d8735f75b
-/user/res/connect/49.bin,8184,56d10f492ab0d7230000fd22737da216
-/user/res/connect/50.bin,8184,5b951d51e77d7469695272a46642c958
-/user/res/connect/1.bin,8184,8bee7453ade83f72d5c791a7dfd5bfb9
-/user/res/connect/25.bin,8184,0fb216497fa42893f000d81f77e383d3
-/user/res/connect/55.bin,8184,b56bbba3fe7d1429bd365d0001a1c157
-/user/res/connect/51.bin,8184,2033caa1d2a9a612546ec50583f9afdd
-/user/res/connect/31.bin,8184,c548d9848341d90b8eb7deaae67fc42e
-/user/res/connect/30.bin,8184,430cb1d85cc9d43b472f5585c80a435b
-/user/res/connect/19.bin,8184,16b8933450d170e91f869cf2f6f7d25c
-/user/res/connect/52.bin,8184,3ad90208a2da559cb51f7d7e4c791f02
-/user/res/connect/40.bin,8184,8a200503bdc6c96b496a240bf4d239b8
-/user/res/connect/16.bin,8184,0698971c59525a0b25e3ab2ccc58e3ae
-/user/res/connect/13.bin,8184,c3acc93cd0257fd0602a1b1d26f8e85a
-/user/res/connect/53.bin,8184,d152560c478b89bb53f24a58186c644a
-/user/res/connect/12.bin,8184,874cfe29a9bdd953eb1083253ffd47bc
-/user/res/connect/47.bin,8184,6ab795342d5da3c51f08fae55a4f97cd
-/user/res/connect/15.bin,8184,d0d2948a0ed3b3c9c7e8beb9636466a9
-/user/res/connect/60.bin,8184,e1fab0e4209479c261aa0f01b2da1355
-/user/res/connect/29.bin,8184,3e802a2f749ca072ff61e1aeba923c7f
-/user/res/connect/38.bin,8184,e0419ab8710244a0582a81529984b6b1
-/user/res/connect/39.bin,8184,e78cf7b2d201a4df3a1a69eabafdb588
-/user/res/connect/23.bin,8184,d13ad37f69b38d776328eec770f2a94b
-/user/res/connect/59.bin,8184,9f44d9f6ed9f5e3939138b994e6a4c3d
-/user/res/connect/32.bin,8184,6513fd3b0a0955d14ed850cb3d0d79f3
-/user/res/connect/3.bin,8184,219dc1f47cbfef1205b0d759f73b6622
-/user/res/connect/28.bin,8184,c929c2c6864236a96241a0848d38592d
-/user/res/connect/10.bin,8184,bc54af93abc6b3b96b0ff5f74560629b
-/user/res/connect/41.bin,8184,073720005e1b11102a7f68583113a8f5
-/user/res/connect/34.bin,8184,f6faf3ee1a8c0775e540af5239fa66b4
-/user/res/connect/48.bin,8184,916422b70270c2ec9e1a5844345dbee7
-/user/res/connect/22.bin,8184,dccf22ee5d9609c016d24d0a2f9582d0
-/user/res/connect/27.bin,8184,29fd9ea1dd73c22d619916836e4588ed
-/user/res/connect/7.bin,8184,134ee5c62e7ee51f82b47aa95036dfae
-/user/res/connect/17.bin,8184,8996d0414b845ad4a15e08ce4f0128af
-/user/res/connect/5.bin,8184,4d87f27d2457f328788ede2f3cdb0efe
-/user/res/connect/2.bin,8184,e62b326d0455a177692cb86dafe48257
-/user/res/connect/36.bin,8184,7237533ddb156ac9c52d50f681e2c718
-/user/res/connect/11.bin,8184,36d966d0ab084cfb8552c70968d80278
-/user/res/connect/57.bin,8184,62a2fba82b5e291bbd84b20d6de25e0f
-/user/res/connect/26.bin,8184,46a12fa9183ae4a5541785c6353a30ef
-/user/res/connect/33.bin,8184,9de56d6a8fd3d5cabcf7c18bb800f679
-/user/res/connect/54.bin,8184,6e15963dae97a8dc915f078c45663c0e
-/user/res/connect/43.bin,8184,d6424fd760a9c7e7db77138a32b7db3b
-/user/res/connect/46.bin,8184,c1289867952e9fa1275cf54a0abb6697
-/user/res/connect/24.bin,8184,d78c34211b57d8c29e5875089946b97e
-/user/res/connect/37.bin,8184,5a5b065e06edabc5bb8db5dc45216751
-/user/res/connect/21.bin,8184,1bc3cbfa5d690432227abacedc92de67
-/user/res/connect/56.bin,8184,0a0cbc7f78d5a5df6cc14f28c7f90f66
-/user/res/connect/45.bin,8184,453b9162374f9dfb0358759f71949d5b
-/user/res/dropdown/DROPDOWN_LIGHTING.bin,6824,8164a39709c8a7cf4b730f3347d174cb
-/user/res/dropdown/DROPDOWN_SLEEP_ON.bin,6824,c0c77feb258c59d97d0a86ff8075e6b8
-/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin,6824,673812113066bcd176343b0a4457a536
-/user/res/dropdown/bluetooth_disconnect.bin,408,f50b59f5f03801a1bc42bdfd93a217d5
-/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin,6824,d104b7b9546820c28d3aa44b15da8547
-/user/res/dropdown/phone_connect.bin,312,3f97228b2dde6a1e9afdd36e5042f8d0
-/user/res/dropdown/DROPDOWN_BT.bin,6824,870f244c69d2a9d45421e498dcccc2ad
-/user/res/dropdown/DROPDOWN_SETTING.bin,6824,8fea2a60194462f1c9092141002ffeed
-/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin,2424,fa86df0a18b6ebe170e5a338f89b6a22
-/user/res/dropdown/earphones_connect.bin,408,1bc2501a5fa9937011c556a91b0dc241
-/user/res/dropdown/DROPDOWN_SELECT_1.bin,312,24b34f58fdc2e2cf616a84a00465d6d5
-/user/res/dropdown/DROPDOWN_HD.bin,1048,b4bec89daab05903c3b2fb2efa73f93b
-/user/res/dropdown/DROPDOWN_4G_OFF.bin,6824,9177c65aa0652ddad086941b9340426a
-/user/res/dropdown/DROPDOWN_FINDPHONE.bin,6824,d6e6dc87b18011d9c1082b2bdac078f0
-/user/res/dropdown/DROPDOWN_ALIPAY.bin,6824,3c0e473bdf8a38ae0a9d2300be03fc75
-/user/res/dropdown/DROPDOWN_SELECT_2.bin,312,b1498cdee632cfca045ab6ab10c71014
-/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin,2424,65a6aca6568568608f6b92de4ec0cb7c
-/user/res/dropdown/bluetooth_connect.bin,408,2180240a36da79edbb22885936e660c0
-/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin,6824,5f3d8a59fb54f0c641c1d1e76f42901b
-/user/res/dropdown/DROPDOWN_BT_CONNECT.bin,6824,be47ce256b62c151e3db86169826844f
-/user/res/dropdown/phone_disconnect.bin,408,3a76276c9d601c4cf8052f6381fd225a
-/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin,216,61c7f6b41d99f16493d6485bf52d4b42
-/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin,6824,ba4e04ba809e1f89aab61b6739a24c56
-/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin,2424,08f0a2566b3300a193678fd660237dc0
-/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin,2424,19bf89b188805fee5c1b9e0df58e70ac
-/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin,6824,3ffaac9f7ccada876857c6a77ecc7780
-/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin,2424,9aea1aba8fc7cbb10b76cc43045168d0
-/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin,2424,ff37222d8d996e60e63413a3e86e7f53
-/user/res/dropdown/DROPDOWN_LINE.bin,472,1cca28230da647449c29c09e81f85332
-/user/res/dropdown/DROPDOWN_4G_ON.bin,6824,5da4483b3ff44baf488358ec8698406d
-/user/res/dropdown/DROPDOWN_NOSIGNAL.bin,984,359193ac99c405c30a44b1aaec68a1be
-/user/res/dropdown/earphones_disconnect.bin,408,ef9848a0a85d380c2828bcdfaa22608a
-/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin,6824,984640349eb261410d139dd74beb395f
-/user/res/weather/WEATHER_BACKGROUND.bin,146040,dd93a8eefbb6dda9b06b659df923833f
-/user/res/weather/weather65x65/weather_sunny_cloudy.bin,3016,125c1624aae43e2a096fea60e277b962
-/user/res/weather/weather65x65/weather_rain.bin,3016,2f21f0055b037713b224589b9a50e82a
-/user/res/weather/weather65x65/weather_foggy.bin,3016,6c907b75d2c321df294dccefb209402f
-/user/res/weather/weather65x65/weather_unknown.bin,3016,92eb937058a2d06cf2b6d898b968c574
-/user/res/weather/weather65x65/weather_thundershower.bin,3016,532191674e876ed062f929cb330cdbad
-/user/res/weather/weather65x65/weather_sunny.bin,3016,1201d45a2cddd4a97a89ddb2169819e2
-/user/res/weather/weather65x65/weather_clear_cloudy.bin,3016,654bd08c2cf52cdfe7156b570a5d8534
-/user/res/weather/weather65x65/weather_haze.bin,3016,5ed79de2a82d83d0b8aa1f4ad7cc5adc
-/user/res/weather/weather65x65/weather_clear_sunny.bin,3016,0e694433f9368151ce82dae960346673
-/user/res/weather/weather65x65/weather_snow.bin,3016,1b8d923df7bf3cc8b3635fea46fac9f5
-/user/res/weather/weather65x65/weather_duststorm.bin,3016,500b6da9c747f7cdac4b2d51c0c59e48
-/user/res/weather/weather65x65/weather_overcast.bin,3016,963a88a57f8493e48f635fc14dd97489
-/user/res/weather/weather60x60gif/Humidity/20.bin,2424,e576d13b21d7880c3cb7f7ca6f0ab74f
-/user/res/weather/weather60x60gif/Humidity/4.bin,2424,7b5368362c94709c800ce12693eb15f5
-/user/res/weather/weather60x60gif/Humidity/8.bin,2424,0387195652d232b47d8047f19dde53cf
-/user/res/weather/weather60x60gif/Humidity/6.bin,2424,dd4470a320fbc1de356b0c8c2701dde7
-/user/res/weather/weather60x60gif/Humidity/14.bin,2424,89b72340b29d3b9b0fa5d51b64cc01e7
-/user/res/weather/weather60x60gif/Humidity/18.bin,2424,703c5fe0202382aa708ca4f056b7b934
-/user/res/weather/weather60x60gif/Humidity/9.bin,2424,68b31ba8bbd904a1ad8a068f1129fd1e
-/user/res/weather/weather60x60gif/Humidity/1.bin,2424,fc0e15b6e5702eba045b2e5e80a9d925
-/user/res/weather/weather60x60gif/Humidity/19.bin,2424,05ce68f3c392941719311ca3eb32b099
-/user/res/weather/weather60x60gif/Humidity/16.bin,2424,5e8ae34b0358528f371f13f8d8d993a6
-/user/res/weather/weather60x60gif/Humidity/13.bin,2424,2b40916f62fcdacf4350bb398d879655
-/user/res/weather/weather60x60gif/Humidity/12.bin,2424,d65ba7a2d799d2fb8d722bd86dabf4d0
-/user/res/weather/weather60x60gif/Humidity/15.bin,2424,752b9169c000400089981a31e8c42f13
-/user/res/weather/weather60x60gif/Humidity/3.bin,2424,c97b680051a6aaa4e4cb85143d7d8c5e
-/user/res/weather/weather60x60gif/Humidity/10.bin,2424,fe02393b44baa1611966a5320c9e5104
-/user/res/weather/weather60x60gif/Humidity/7.bin,2424,ff91ddf090d8bfe4ec608caa369b3add
-/user/res/weather/weather60x60gif/Humidity/17.bin,2424,9f03faffb829729c4f69cc4465f04e39
-/user/res/weather/weather60x60gif/Humidity/5.bin,2424,2ab203b19a3fb08f6811598770c196fe
-/user/res/weather/weather60x60gif/Humidity/2.bin,2424,0de8bc1b1cf7a7a7347b452c74e36cfa
-/user/res/weather/weather60x60gif/Humidity/11.bin,2424,54dd1fed7386b39f304c23a0e3d90135
-/user/res/weather/weather60x60gif/UV/20.bin,2424,9b3c59a706366dc8deb09695c691bf7e
-/user/res/weather/weather60x60gif/UV/4.bin,2424,6d9967f651dd9c64705b2a02bd716cab
-/user/res/weather/weather60x60gif/UV/8.bin,2424,d7bb4a0995144b7ca484008ef5cc18e9
-/user/res/weather/weather60x60gif/UV/6.bin,2424,7a7d7178dcd0c6d47512f62e1ec04d5e
-/user/res/weather/weather60x60gif/UV/14.bin,2424,01ae96d0ad4188a6b30ad58f5453ea04
-/user/res/weather/weather60x60gif/UV/18.bin,2424,d56689401b66125cf4066abbacb3485d
-/user/res/weather/weather60x60gif/UV/9.bin,2424,b431b1771b49694a360a27339569241a
-/user/res/weather/weather60x60gif/UV/1.bin,2424,b26a66a317983cada288c6e3f1835da0
-/user/res/weather/weather60x60gif/UV/19.bin,2424,69061c5e006ef3c37c9116afb7d7008c
-/user/res/weather/weather60x60gif/UV/16.bin,2424,49a932247b177bcf326b0a40b49f63ab
-/user/res/weather/weather60x60gif/UV/13.bin,2424,858640d4067f10a410e0be908fb75f93
-/user/res/weather/weather60x60gif/UV/12.bin,2424,d9650e186b89090cd7931f5d2cb13f5a
-/user/res/weather/weather60x60gif/UV/15.bin,2424,cfeb5de76e6c6c3e8246554cf0da4d55
-/user/res/weather/weather60x60gif/UV/23.bin,2424,6e07161ff3bddf18af7c4fffab5a091c
-/user/res/weather/weather60x60gif/UV/3.bin,2424,472a5964ee676244dbe559451b353605
-/user/res/weather/weather60x60gif/UV/10.bin,2424,4e258f0be921a4ae97422d88feff22a0
-/user/res/weather/weather60x60gif/UV/22.bin,2424,99fff9ea35c53f0f1f09e9bdc1b5a554
-/user/res/weather/weather60x60gif/UV/7.bin,2424,3cd651ba7e61d6b052c63f1c31b31101
-/user/res/weather/weather60x60gif/UV/17.bin,2424,704bd344fdeb440e8e23533eaedda8c8
-/user/res/weather/weather60x60gif/UV/5.bin,2424,1efbaa3b977cb8405624549831989a89
-/user/res/weather/weather60x60gif/UV/2.bin,2424,d78e53453c9d84b403a44d059c3b9b56
-/user/res/weather/weather60x60gif/UV/11.bin,2424,20d228ec0f473fece700d6342bcefa6a
-/user/res/weather/weather60x60gif/UV/24.bin,2424,f484f8d87adf49fbbd9455dd217e1cbe
-/user/res/weather/weather60x60gif/UV/21.bin,2424,5ad941a685490e9c684bad47f6df1ae2
-/user/res/weather/weather60x60gif/WindSpeed/20.bin,2424,f7d7f790241af9110fa0fad36a88b11f
-/user/res/weather/weather60x60gif/WindSpeed/4.bin,2424,ed3941b5832efa8f8eb8bae7e2978575
-/user/res/weather/weather60x60gif/WindSpeed/8.bin,2424,91277f566185e06b8f4c46d31ad721d9
-/user/res/weather/weather60x60gif/WindSpeed/6.bin,2424,84d5a37712ce6592df0391a3907c776e
-/user/res/weather/weather60x60gif/WindSpeed/14.bin,2424,0e71550ed9d834951ac22d0e2cded4eb
-/user/res/weather/weather60x60gif/WindSpeed/18.bin,2424,d77179619e46ed1da8b5ff71eb181f36
-/user/res/weather/weather60x60gif/WindSpeed/9.bin,2424,fd98353a231064d22b678666098246d4
-/user/res/weather/weather60x60gif/WindSpeed/1.bin,2424,f5d89584f6a95916d0d47d1ab3625550
-/user/res/weather/weather60x60gif/WindSpeed/19.bin,2424,fce9832ae9f20f4d4e187356206fad8d
-/user/res/weather/weather60x60gif/WindSpeed/16.bin,2424,a10f81ae459d057a3a5abb129309dab5
-/user/res/weather/weather60x60gif/WindSpeed/13.bin,2424,66c4613f10726dccd2a893142c98f94f
-/user/res/weather/weather60x60gif/WindSpeed/12.bin,2424,ed3f2d42bcd733d7f9754586ecf6615e
-/user/res/weather/weather60x60gif/WindSpeed/15.bin,2424,7baf49c714ae2c70bfa5ae0b69858bdc
-/user/res/weather/weather60x60gif/WindSpeed/23.bin,2424,c967ab4c7dd5d6686e01ea74c94b415a
-/user/res/weather/weather60x60gif/WindSpeed/3.bin,2424,989a018b8c4aae365d4699d92e677b1c
-/user/res/weather/weather60x60gif/WindSpeed/10.bin,2424,05a103f4088004d6d9432e38a8a3429a
-/user/res/weather/weather60x60gif/WindSpeed/22.bin,2424,1954b747384b31016ae68e6970248a6f
-/user/res/weather/weather60x60gif/WindSpeed/7.bin,2424,43c8f8cb1600220e1682e58ac8cb02c3
-/user/res/weather/weather60x60gif/WindSpeed/17.bin,2424,9ace6fdeff50dc84ff835139cc7673fb
-/user/res/weather/weather60x60gif/WindSpeed/5.bin,2424,ca271741bfc78557d44a740ec1acdde1
-/user/res/weather/weather60x60gif/WindSpeed/2.bin,2424,7bc9704f2c65b7b1781dc58af0da3ec3
-/user/res/weather/weather60x60gif/WindSpeed/11.bin,2424,1b721867fc57d0743044557559aec426
-/user/res/weather/weather60x60gif/WindSpeed/24.bin,2424,9041d29acbb52f8351ca95cc89e0453e
-/user/res/weather/weather60x60gif/WindSpeed/21.bin,2424,399307c9026342369d86ec67e841922c
-/user/res/weather/PullUp/PullUp_42.bin,1144,08b5f6e1e62cc39bec6bf3c29393b226
-/user/res/weather/PullUp/PullUp_38.bin,1144,7ad01ccfa8ffcc133bbde87cd2214ac5
-/user/res/weather/PullUp/PullUp_54.bin,1144,afe9c6adcc79b7bffb3f3ae6ffec4ff0
-/user/res/weather/PullUp/PullUp_2.bin,1144,9ecff3d5bee15b1d26dfcef3ab131047
-/user/res/weather/PullUp/PullUp_47.bin,1144,e7ee1f958bc8fca53842ea2115cf2a65
-/user/res/weather/PullUp/PullUp_22.bin,1144,c5fc0eefdb920fc7044699585e2239d6
-/user/res/weather/PullUp/PullUp_67.bin,1144,768e44e82696ca85691575923728c332
-/user/res/weather/PullUp/PullUp_17.bin,1144,57eb7b8b7f524ec1d9653455f68401c0
-/user/res/weather/PullUp/PullUp_3.bin,1144,de7dcb3c97785ab334aa0bab702144d9
-/user/res/weather/PullUp/PullUp_25.bin,1144,957087e13d34c86ea0df42a66a153ab0
-/user/res/weather/PullUp/PullUp_10.bin,1144,11af82d934b5a24d33e025b9892fa3c9
-/user/res/weather/PullUp/PullUp_68.bin,1144,e4ba4695ce667469f0489bb65221750a
-/user/res/weather/PullUp/PullUp_63.bin,1144,950933528f7391da754debdcee9e7005
-/user/res/weather/PullUp/PullUp_14.bin,1144,27963aa595f0379c216adf0d22f7cb97
-/user/res/weather/PullUp/PullUp_19.bin,1144,25229be09a521f5c06a7da238dc5b289
-/user/res/weather/PullUp/PullUp_7.bin,1144,da653409a42f1cc6cb90746810cc38a4
-/user/res/weather/PullUp/PullUp_27.bin,1144,e137cad93b3462aadb05d51f44eb1d49
-/user/res/weather/PullUp/PullUp_46.bin,1144,d35f2d688bf744b260cfddcfd10da630
-/user/res/weather/PullUp/PullUp_33.bin,1144,c6f168fe17a7f921b5649a5923048024
-/user/res/weather/PullUp/PullUp_66.bin,1144,12873a09bc2721d4fcff67386e641646
-/user/res/weather/PullUp/PullUp_11.bin,1144,8eae342808a15d5964c39e4eb123f993
-/user/res/weather/PullUp/PullUp_70.bin,1144,3a2c28e5992d61cb443d0c0cfea09ae3
-/user/res/weather/PullUp/PullUp_8.bin,1144,e77ac6fc114e99a3dff7970554c48db6
-/user/res/weather/PullUp/PullUp_13.bin,1144,bea710020749b928ad466ae07425d227
-/user/res/weather/PullUp/PullUp_24.bin,1144,262d861f4de264f866da3cd131180a88
-/user/res/weather/PullUp/PullUp_62.bin,1144,55457523b91661380426c00e09e57e42
-/user/res/weather/PullUp/PullUp_18.bin,1144,95b4dcf2353a8e4c561e2cf196e34df5
-/user/res/weather/PullUp/PullUp_1.bin,1144,f784dba8db6aa6e17672503df60050f8
-/user/res/weather/PullUp/PullUp_69.bin,1144,de21841bfa77f61a75b8c8732ca5f87f
-/user/res/weather/PullUp/PullUp_30.bin,1144,50720554daa287435c18c0ad00ba070c
-/user/res/weather/PullUp/PullUp_52.bin,1144,498eb444a6e2c8eed3aff3320f617dbb
-/user/res/weather/PullUp/PullUp_34.bin,1144,e081726c2c275a4411daa3629a9cb51a
-/user/res/weather/PullUp/PullUp_55.bin,1144,54ba97a131548d2ffe20a6a0941dc01d
-/user/res/weather/PullUp/PullUp_61.bin,1144,37c9010c5b0d1acf0ae183c9fae6526c
-/user/res/weather/PullUp/PullUp_26.bin,1144,1e028b080fcd158f5c0362ee372f8289
-/user/res/weather/PullUp/PullUp_71.bin,1144,54915280e38d7afa8749e84076e7f73e
-/user/res/weather/PullUp/PullUp_51.bin,1144,c7d43c0a0e16aecdb3b6a64adf4dc516
-/user/res/weather/PullUp/PullUp_6.bin,1144,817f6d75b03ac2c28de152f1eda211c9
-/user/res/weather/PullUp/PullUp_64.bin,1144,54923ea029107d022d730a210b05663d
-/user/res/weather/PullUp/PullUp_21.bin,1144,998564b734977261c24cd97351f57821
-/user/res/weather/PullUp/PullUp_49.bin,1144,888c59cfd896885530a592a286467cd6
-/user/res/weather/PullUp/PullUp_4.bin,1144,6e327a055dd318ae99b65461d63035cf
-/user/res/weather/PullUp/PullUp_12.bin,1144,d27efaa1f928e2ee73ba4ff06b3f165d
-/user/res/weather/PullUp/PullUp_20.bin,1144,73b996aaea549cf94736a0322c0f6682
-/user/res/weather/PullUp/PullUp_53.bin,1144,8b437f579c9910cf1c63e551ecc154d1
-/user/res/weather/PullUp/PullUp_39.bin,1144,008fad1e8e94a7c07a6d3d9e84c1fc33
-/user/res/weather/PullUp/PullUp_73.bin,1144,a262f62b8604df10b1e1f2b0f04499a7
-/user/res/weather/PullUp/PullUp_60.bin,1144,a34a562c571643ee7fa335ad2a6dddae
-/user/res/weather/PullUp/PullUp_37.bin,1144,9a2db9fe1b9f18acd1c16dfe843e4126
-/user/res/weather/PullUp/PullUp_23.bin,1144,d9559858392db37c3413325726ff5e55
-/user/res/weather/PullUp/PullUp_35.bin,1144,2a472d35dd4365e783e870e49369087b
-/user/res/weather/PullUp/PullUp_57.bin,1144,78c695095852b0808909d3b7b782dc92
-/user/res/weather/PullUp/PullUp_31.bin,1144,1ece1a543dad96c2f86b2a02a0bab96e
-/user/res/weather/PullUp/PullUp_41.bin,1144,c8a4087ed4ef0a9aa57f079ce1641568
-/user/res/weather/PullUp/PullUp_58.bin,1144,c9c5f6bd3b19118198a4e879ae4340ee
-/user/res/weather/PullUp/PullUp_15.bin,1144,66b0a63de005805760963359e1208071
-/user/res/weather/PullUp/PullUp_5.bin,1144,990a4f2e9c0abacb86ec5bdfca08b0e3
-/user/res/weather/PullUp/PullUp_28.bin,1144,1200eee189840b52cbeff3a933d35e5c
-/user/res/weather/PullUp/PullUp_56.bin,1144,eadb2761aa803339fbd07242be06c84a
-/user/res/weather/PullUp/PullUp_50.bin,1144,4763ac8f6c24b19ac1af971081f19a34
-/user/res/weather/PullUp/PullUp_36.bin,1144,12d0a09995594de49ae73021fb2bfa4e
-/user/res/weather/PullUp/PullUp_32.bin,1144,7483973001b35bf539a87a31f25844e9
-/user/res/weather/PullUp/PullUp_29.bin,1144,a53d518246bec82891c55263700967a9
-/user/res/weather/PullUp/PullUp_40.bin,1144,92ec2b0448505f31ab4d9d52bbe93e72
-/user/res/weather/PullUp/PullUp_44.bin,1144,ff7d7c3a098eeba01da4f4f88f5802a5
-/user/res/weather/PullUp/PullUp_16.bin,1144,0b5bb438f8e3177b4aaf97dfc4fcfcec
-/user/res/weather/PullUp/PullUp_65.bin,1144,0d10896efd44a64520242494c84583b1
-/user/res/weather/PullUp/PullUp_59.bin,1144,839d73d90aa1ac30e99ab0c03b226047
-/user/res/weather/PullUp/PullUp_74.bin,1144,50786cb95ec3f8a5fc56f8819b4c5736
-/user/res/weather/PullUp/PullUp_45.bin,1144,8a5385026e55df0c4250488201ad562b
-/user/res/weather/PullUp/PullUp_43.bin,1144,a35d03fcac37f3f55af089717724082c
-/user/res/weather/PullUp/PullUp_48.bin,1144,bd16b85a0da0805d98d4df6acdaccfd4
-/user/res/weather/PullUp/PullUp_72.bin,1144,cb2f5ed7d3ae659bef43ddd5dbb6ef91
-/user/res/weather/PullUp/PullUp_9.bin,1144,dbcece83ad1d876cbfa7a94ffd037d06
-/user/res/themestyle/grid.bin,1144,cf981c2286bed035c3f313d8432495c5
-/user/res/themestyle/dialplate.bin,1144,8f26d51874faf166a86170b12671ad88
-/user/res/themestyle/arclist.bin,1144,4ff3cef39e75940384d25bf05acf162d
-/user/res/themestyle/list.bin,1144,b1580ac48b0e017e326b30a983dd561a
-/user/res/themestyle/hexagons.bin,1144,75f56e513f2d1110cef53e0f088c362b
-/user/res/themestyle/circlelist/circleListImage1.bin,48424,2ac61721198a4955f2593d20e3b41a3b
-/user/res/themestyle/circlelist/circleListImage2.bin,3480,de41d78a6b9d166ed5309204ad46aa8d
-/user/res/findphone/20.bin,9624,cc517b018a8873d4329ae8c47a558706
-/user/res/findphone/4.bin,9624,7f4f148539655f1161af6b89b22b25e2
-/user/res/findphone/8.bin,9624,d88b3330e52cbce042e8d56764e2d7bc
-/user/res/findphone/44.bin,9624,b1ff9074a198bb061d909daf0fe954fc
-/user/res/findphone/42.bin,9624,3b548fbbf4e097c52cc3f48e10701ea0
-/user/res/findphone/35.bin,9624,84572b0937c601b0ff4d3535a0651bb5
-/user/res/findphone/6.bin,9624,86a99aeb84814ebdb4ab8a9acae4643b
-/user/res/findphone/14.bin,9624,6316ef32055b370731aee815fa6ad45c
-/user/res/findphone/18.bin,9624,dadb1f84b50a9eb34f4e685ca963513c
-/user/res/findphone/9.bin,9624,738e097bc8ef3788c2a5abaad4dedfa6
-/user/res/findphone/49.bin,9624,5d93c65dbc78c95edd103b897d1085f5
-/user/res/findphone/50.bin,9624,afb04bb2975f577a0012b4dcda461db5
-/user/res/findphone/1.bin,9624,c781a29f91b0e157c7c413270ecab8a5
-/user/res/findphone/25.bin,9624,747195807ed9a0e88d81f7f767fa0761
-/user/res/findphone/31.bin,9624,d3b4b04f39c32917ce6a2698db08aca6
-/user/res/findphone/30.bin,9624,2a6f6814584ecefb118e48cf144fa99b
-/user/res/findphone/19.bin,9624,3720d651b893f841f856970cad06e31e
-/user/res/findphone/40.bin,9624,1ab142df2491343b3dd83064c2f80574
-/user/res/findphone/16.bin,9624,5db443ccf3c79a4b34e48f68261001f9
-/user/res/findphone/13.bin,9624,79c36a112664b7c55a3ce2293587e89a
-/user/res/findphone/12.bin,9624,2daedd267fa2cbb0054904f06e3124db
-/user/res/findphone/47.bin,9624,2d07d3748cf3d23ab0e22214ad82bb23
-/user/res/findphone/15.bin,9624,53cba513e1994f4cb79f0ab2b14d7cdd
-/user/res/findphone/29.bin,9624,3ebb44b53357d80a81b6cd0e0c26d087
-/user/res/findphone/38.bin,9624,e10736beb7911921a78c362960af4bc4
-/user/res/findphone/39.bin,9624,b08efd97fe31854a3eea54e61b318dba
-/user/res/findphone/23.bin,9624,8a402a66fbd9120b1d6378e5edb0d313
-/user/res/findphone/32.bin,9624,5c01565745f7104d56b0fe3fc455b7a4
-/user/res/findphone/3.bin,9624,b393bde7ea196edfcf1d68e9bae64d43
-/user/res/findphone/28.bin,9624,a0761b1eed505a0acd70291321d8b7bf
-/user/res/findphone/10.bin,9624,9c0dfb271d3c2394ee59baeef2af304a
-/user/res/findphone/41.bin,9624,4b20f18b13fe992953c98ef719e59e21
-/user/res/findphone/34.bin,9624,097b442147af5f46d4400287094bebf8
-/user/res/findphone/48.bin,9624,07e3f38d71cb4a0e97dd13c5c369b403
-/user/res/findphone/22.bin,9624,24edc3a60d20d96287663ad3c83b0b8a
-/user/res/findphone/27.bin,9624,79478d6b5d77bf758d016fe6852651e6
-/user/res/findphone/7.bin,9624,267d762ab30f96b43a4968edfc074393
-/user/res/findphone/17.bin,9624,5e8e142bfb7398d1ee9228b925a23a88
-/user/res/findphone/5.bin,9624,7081814f4ad56c14782fee0d7f2a354f
-/user/res/findphone/2.bin,9624,d27c09e1c9831b536e886ce2d6de9a8c
-/user/res/findphone/36.bin,9624,1d2954ecb3168240c359a544c968411c
-/user/res/findphone/11.bin,9624,3a0d0951eb0152b1c2b2d2760457b8f7
-/user/res/findphone/26.bin,9624,f5155e7a31b024915306aad2d04eedd9
-/user/res/findphone/33.bin,9624,847d7a9999be5094bb3e48a23ea4f179
-/user/res/findphone/43.bin,9624,15cc009db08c87921e58dea4a5aa9747
-/user/res/findphone/46.bin,9624,2b13dceb7ac383a17ec4498e5cd1a9fb
-/user/res/findphone/24.bin,9624,cf7e08ad82b79c156a3cb442b427713b
-/user/res/findphone/37.bin,9624,18918ca2dad09f1f07757542ec967dde
-/user/res/findphone/21.bin,9624,0468ea241d1842b6d3b358ce56a8a65f
-/user/res/findphone/45.bin,9624,e7e83ddcf6c09b5749dfd25f6a9d2f39
-/user/res/message/message.bin,6824,0389be155cf438b48a63f19236ef3f76
-/user/res/message/Line.bin,472,1920ea069bae527ad3650fac6b95d446
-/user/res/message/disturbicon.bin,1144,95bc3f0be0d47346e9e64afc20aa9476
-/user/res/message/Icon.bin,120,989cb1f4e17fdc590bb10baf2373857e
-/user/res/Sleepmode/sleepmode.bin,6824,ca5577cd3e700d8a3484e49056e60fc4
-/user/res/makephone/dial.bin,5544,c57c4628f5c7e84ab630eaabe2def200
-/user/res/makephone/headset_3.bin,5544,f4d5a85c10c2d5b3771c12cc76bc2a26
-/user/res/makephone/vector.bin,5544,6949b9ecc74d391656d7501be346a6b6
-/user/res/makephone/microphone.bin,1896,cea931a256b112decc53b7e9c5ba5d66
-/user/res/makephone/microphone_1.bin,1896,199ef7d05fc1ab4c451cd996c7404fb6
-/user/res/makephone/person.bin,15224,df9925edf2755a10bde183bc467ff99e
-/user/res/makephone/headset_1.bin,5544,1f4b4059af9276d6351677d1e94e0517
-/user/res/makephone/headset_2.bin,5544,a35c780c313744b852ea27f879c1b9ee
-/user/res/makephone/voice.bin,1896,c2892dcccd79e41ccbee698ad2269eb6
-/user/res/Schedule/schedule_no_data.bin,9624,c58b5ded04553d944cd501884a96928f
-/user/res/Schedule/IMAGE_ITEM_ARROW.bin,360,83e96d1c930ee02bb27a8fa2d6550262
-/user/res/step/20.bin,6824,eeecfbca2d7e0583a2bafc887c7524f6
-/user/res/step/4.bin,6824,062f090f118b6563236fd587e22da19b
-/user/res/step/8.bin,6824,cc6b8eb906052ba58797cb846d147252
-/user/res/step/6.bin,6824,9ebd4e6c145d8733934f7401b7f06286
-/user/res/step/14.bin,6824,f8ccf3732df72e03049e3cc6be44c6a2
-/user/res/step/18.bin,6824,5f954eac6216fc8b5843737e85ce3dde
-/user/res/step/9.bin,6824,ba4673c5f8b699f0e166a9a7d5d5b03a
-/user/res/step/1.bin,6824,60f6a4e24136f99cb09d9a4ff6be883e
-/user/res/step/19.bin,6824,29a90afcb0879bbe4b31413102b94aa5
-/user/res/step/16.bin,6824,439cfc0ad2ca507ca9c9aa8e40dfdebf
-/user/res/step/13.bin,6824,3ff384e7b98798122acd42d17632448b
-/user/res/step/12.bin,6824,d03d494848a813b146673abd3471e051
-/user/res/step/15.bin,6824,866d016b084f179f7c770e1afeee3427
-/user/res/step/step_b.bin,98280,ac277c723faee57cb312e0ab2425c917
-/user/res/step/3.bin,6824,bf1ec256c456dda069211c3044f8f9a3
-/user/res/step/10.bin,6824,d4159e0985d422f6a6ace0fd719ec7ba
-/user/res/step/7.bin,6824,2d7f1b1da4bfd21735c9b1176e091abd
-/user/res/step/17.bin,6824,d639c2c82d18c867aa3686a743369a78
-/user/res/step/5.bin,6824,c9f34cd6101e1e57ba71d661c2c19908
-/user/res/step/2.bin,6824,40149690af3061a81f7f1d8bbf587618
-/user/res/step/11.bin,6824,959bfb073b847abe0879d32efff5e6ee
-/user/res/record/RECORD_PLAY_PROVE.bin,1144,7fc143b25345693c0148d1c7d97959ba
-/user/res/record/RECORD3.bin,18840,0605f4fad8bda97ca38d17d04fbc175a
-/user/res/record/RECORD_PLAY_NEXT.bin,1144,473c38e4d140b2d6ee25bb4a70964ec0
-/user/res/record/RECORD2.bin,9624,051e47ebaa8e64805c8bd14b15339400
-/user/res/record/UNIVERSAL_PAUSE.bin,1896,6001e7aa3563a5a5999ad3084c617e0f
-/user/res/record/RECORD_PROGRESS_BG.bin,9624,9d0e2afbe75498989b84042b9e33a4f9
-/user/res/record/RECORD_PLAY_BACKGROUND.bin,146040,bb98f6422bdcbf3dc8b4eed91dbc93fc
-/user/res/record/RECORD1.bin,17304,c6137fc9e1951a7ae85662d21e419f91
-/user/res/record/RECORD_PLAY_DELETE.bin,1144,8420bf8902787292a68cb894d6d595b9
-/user/res/record/RECORD_PLAY_VOLUME.bin,1144,7d3a81e220f15d6438fa2dd6609b1c57
-/user/res/record/UNIVERSAL_PLAY.bin,1896,e49fcef7764eaa449f49b9e24aef0448
-/user/res/down/20.bin,7640,d8e7db070a3b56145fb6da44ae0e82c3
-/user/res/down/4.bin,7640,4e697208f8119e94cc3c479be80ff1a5
-/user/res/down/8.bin,7640,7f42bc7af87076707d73bab5d0846bf0
-/user/res/down/6.bin,7640,1b0f5133c3f6906cd09883c8e039eb3f
-/user/res/down/14.bin,7640,f0cfb7fa7a95750217ec287890dd0c62
-/user/res/down/18.bin,7640,254c1b1fbdc7bf8ec22cb314d73fa888
-/user/res/down/9.bin,7640,dc112563bbbc5741263ccb19624c8485
-/user/res/down/1.bin,7640,efdb68e83deb6aafca71f778805e6dd3
-/user/res/down/19.bin,7640,0a80ba7ec264573d14ce429eafe01938
-/user/res/down/16.bin,7640,c9118072a587a4a0fce9e82a9bd900e1
-/user/res/down/13.bin,7640,b694e0c23dc1dee57c917338083e06f7
-/user/res/down/12.bin,7640,60128a536f3648084c80238e2880d6c7
-/user/res/down/15.bin,7640,3cd9796d00820f5c21b049b25b6ed162
-/user/res/down/23.bin,7640,efdb68e83deb6aafca71f778805e6dd3
-/user/res/down/3.bin,7640,b3051d89121b6cf8313f66eb177f063c
-/user/res/down/10.bin,7640,cde3c05b13d003ebd4801c875738af66
-/user/res/down/22.bin,7640,c733b2cc1d1cafe8331c1a459821be51
-/user/res/down/7.bin,7640,9cfea203c415e17e693b398a2a6f21b6
-/user/res/down/17.bin,7640,5652cfdb491b5274915322f49d8dcd39
-/user/res/down/5.bin,7640,909756920ebdc419124962d32bade1c0
-/user/res/down/2.bin,7640,381a6e1993312c66dbef1e306ac8fad2
-/user/res/down/11.bin,7640,b3bc852f96932386afe4c2b9262b96c8
-/user/res/down/24.bin,7640,efdb68e83deb6aafca71f778805e6dd3
-/user/res/down/21.bin,7640,910b2dab27c5328cad3bddcc3f9fb5ee
-/user/res/settings/SETTINGS_DISPLAY_MODE.bin,2840,6d301b7b1dc71e7a87aa330402e6da0e
-/user/res/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin,2840,f58d4e406940c0cdd4fd92c142026ff4
-/user/res/settings/SETTINGS_DISTURB.bin,2840,c93586e5578c81f1f287f06de937ed29
-/user/res/settings/SETTTING_SHUTDOWN.bin,4184,853d4aa3f1e4c142ab9fa0bf2ff7c04f
-/user/res/settings/SETTINGS_MOTION_RECOGNITION.bin,2840,44070ea08ae3527f0853d064c8363bd4
-/user/res/settings/SETTINGS_NETWORKANDCALL.bin,2840,60ed43fe2b456acd310a77df24e90f79
-/user/res/settings/SETTINGS_CARDSET.bin,2840,75ae86297c987a4f756ed9e0a042de46
-/user/res/settings/SETTINGS_CHANGEDIAL.bin,2840,e09f76e7ffe684ef90df30724a2261ba
-/user/res/settings/SETTINGS_SHUTDOWN_AND_RESTART.bin,4504,63408a9d91a5de1db177959f3c9cb088
-/user/res/settings/shutdown.bin,6824,d08106e31d183f20c61f14e0ab316d6c
-/user/res/settings/SETTINGS_SYSTEM.bin,2840,03484189e2793fa6198ca4019ba038d7
-/user/res/settings/SETTINGS_BLUETOOTH.bin,2840,04baa6111401bda3adbfad62de516301
-/user/res/settings/SETTINGS_SOUND_VIBRATION.bin,2840,cdf665ee278d947ffbf939e144e158b2
-/user/res/settings/SETTINGS_SAVEELE.bin,2840,d761d270ce66d9ecc4501cc7436c9c2d
-/user/res/settings/SETTTING_REBOOT.bin,4504,dd234a790626eb5e057a29d2cc212288
-/user/res/settings/SOS.bin,6824,2597776e01d65c6ab3eef6ab39da26a3
-/user/res/font_bin/sv.bin,7320,7fba2e43a92491b1ff002b06e40536f1
-/user/res/font_bin/tr.bin,7320,20a33d5e983f6f1d46e77accb9fc6a7d
-/user/res/font_bin/ru.bin,6936,008b09b4f69ac441e4a97c255c9dca71
-/user/res/font_bin/el.bin,7512,9dc58dcda40be8cef0851d9ab5863dc6
-/user/res/font_bin/ko.bin,6936,397372c2c6d1521c16bd49f82223428e
-/user/res/font_bin/fi.bin,7320,0fbf4908fbc28efb7b6ca48111783a85
-/user/res/font_bin/hr.bin,6936,ff1fa810d46d8b0946e6ae6dd91ad0e5
-/user/res/font_bin/pt.bin,6936,48b4197d4d171a7fc8076972975a5a31
-/user/res/font_bin/nl.bin,6936,3ffe1e2c89de0ad97835190d2c2c0952
-/user/res/font_bin/id.bin,7896,f85a3b09dadca3875bb21eb8660e9572
-/user/res/font_bin/fr.bin,6936,bf6f6cf0fda258b6d6831da7844a6095
-/user/res/font_bin/ms.bin,7320,3aabc424adc6cfd142c9546425a6c07a
-/user/res/font_bin/uz.bin,7320,fa3cd5986967af3690825b459715b3ec
-/user/res/font_bin/he.bin,7320,803bc71ec3b3b513643bb54987546266
-/user/res/font_bin/fa.bin,7320,712ce93e1ace237d5030a475b1998e7b
-/user/res/font_bin/az.bin,7320,ae425858c785b1da5748e583d22d36c9
-/user/res/font_bin/th.bin,7320,9043046c89add39f88c67d6444ee2020
-/user/res/font_bin/cs.bin,7512,c35bc6d8e4c36b27db4be3f8993cb20b
-/user/res/font_bin/en.bin,6936,3b7609bdbf53750e10b9137e8966360b
-/user/res/font_bin/zh.bin,6936,89e23afd86a7243bd524d35273286eff
-/user/res/font_bin/hi.bin,7512,c42b434a0943cd8db8523384320ef23b
-/user/res/font_bin/it.bin,6936,fe72f8adaa7785211dae629ee0f8bda7
-/user/res/font_bin/vi.bin,7320,4cc5332682cacfa71644c12455f49137
-/user/res/font_bin/de.bin,6936,c31e8ea48f2297faa7ae321baf903525
-/user/res/font_bin/ar.bin,7320,bc352d0e13913b86c2993669c9037675
-/user/res/font_bin/ro.bin,7320,5dd970d194cfb37f2fe21665485bd1cb
-/user/res/font_bin/uk.bin,7320,43eca3976f9b804ebcc56646c741791c
-/user/res/font_bin/es.bin,6936,6b6ad17548b68ab5089abf29e414f69a
-/user/res/font_bin/ja.bin,6936,a3beada3869a5a3759107eee63530e73
-/user/res/font_bin/pl.bin,7320,7752e2777ee815c66533b943fc8a382d
-/user/res/dial_soures/KUMI.bin,199619,99fcb43be97f998e73cf9ac075d42521
-/user/res/dial_soures/MAIN_FACE_IMAGE.bin,146040,51b33788693a0cb647819b465330c223
-/user/res/dial_soures/background.bin,146040,49cbf48acd70984da790902694c7c10d
-/user/res/dial_soures/KUMIVIEW.bin,45784,9e2ef1f4fae6d2387d3c84ebbf0d4bda
-/user/res/system/SYSTEM_UPDATE_FLAG.bin,344,2aee315e065da4515b2ffbe3ebe45656
-/user/res/system/KUMILOGO.bin,24984,6cc873f5e7db5e4b9b14166549170a24
-/user/res/AIVoice/AI_RecGreen.bin,1560,b0d13095f6f4cefb7356857656a7440c
-/user/res/AIVoice/AI_EllWhite.bin,264,f4c8c2172b71da045fdd67bf49737130
-/user/res/AIVoice/apikey.bin,4504,22fdc5d8aacf5526d79be05b46d02d14
-/user/res/AIVoice/ai_chart_icon.bin,1944,0f83bb2b911b5de4d9af79dd118f25b6
-/user/res/AIVoice/AI_Union.bin,408,8b556916bed2be6b329b4ddb72510e5f
-/user/res/AIVoice/ai_chart_icon_bg.bin,20504,f467d6e0247adf5a0629c38e91a69224
-/user/res/AIVoice/AI_RecBlack.bin,1560,acbf4fcbf82c0e4e2390fcbd042c0d1c
-/user/res/AIVoice/AIVoiceListening/20.bin,9624,1faf17ff47eca0ca1c2345fc05e0aadd
-/user/res/AIVoice/AIVoiceListening/4.bin,9624,7b2c313f2a58eac882350408154af561
-/user/res/AIVoice/AIVoiceListening/8.bin,9624,8934b3ba174bb8f827872c07c5c33c95
-/user/res/AIVoice/AIVoiceListening/35.bin,9624,94b66edce2e596fafd97ce0cf0968a22
-/user/res/AIVoice/AIVoiceListening/6.bin,9624,87f078f334da80843b5a686db48d9bde
-/user/res/AIVoice/AIVoiceListening/14.bin,9624,946d252c35c61ff8a35ad03c410ba8b7
-/user/res/AIVoice/AIVoiceListening/18.bin,9624,2433112d3c0335d4def3590596a7b334
-/user/res/AIVoice/AIVoiceListening/9.bin,9624,110283bab18cabde088aa90938e438ca
-/user/res/AIVoice/AIVoiceListening/1.bin,9624,49b4c1d134f5181561601fb5926342eb
-/user/res/AIVoice/AIVoiceListening/25.bin,9624,062d8117c8a5d68869c83ceeaf95d0d3
-/user/res/AIVoice/AIVoiceListening/31.bin,9624,d28b45c50540b5a6dd311dbe80bd4e4b
-/user/res/AIVoice/AIVoiceListening/30.bin,9624,644fdd9ce0634e4907adea41149f74a2
-/user/res/AIVoice/AIVoiceListening/19.bin,9624,a6c393c72d03274efe6289506d70c69c
-/user/res/AIVoice/AIVoiceListening/40.bin,9624,a2cc51f381439c2bc90210f5f92a10cb
-/user/res/AIVoice/AIVoiceListening/16.bin,9624,d689d05c2379be133ddd4de381fd294b
-/user/res/AIVoice/AIVoiceListening/13.bin,9624,48f0ca4f96e585f2773267317b4e63b3
-/user/res/AIVoice/AIVoiceListening/12.bin,9624,323d2c81f9f8220595b9a879d3e0baa1
-/user/res/AIVoice/AIVoiceListening/15.bin,9624,c47214d8452da7fd0a709b7f31a00679
-/user/res/AIVoice/AIVoiceListening/29.bin,9624,d3933904c67fdf3018c347e583520839
-/user/res/AIVoice/AIVoiceListening/38.bin,9624,95671e794b63dc6ef2b860c806fc2665
-/user/res/AIVoice/AIVoiceListening/39.bin,9624,6e036b1cb20e568ea2c47151098048c8
-/user/res/AIVoice/AIVoiceListening/23.bin,9624,81e1290efe0af133af684da02dc715e9
-/user/res/AIVoice/AIVoiceListening/32.bin,9624,960dfd7b8eeb1b11ec8e1f08158544c0
-/user/res/AIVoice/AIVoiceListening/3.bin,9624,1a696b41c11d0553eb9a43caa4703c17
-/user/res/AIVoice/AIVoiceListening/28.bin,9624,f38cd3547433280c25813e650db36c95
-/user/res/AIVoice/AIVoiceListening/10.bin,9624,73cdfcdf2271bad3a2b617471be99ef6
-/user/res/AIVoice/AIVoiceListening/34.bin,9624,90230519179bca519761ed645e3371bc
-/user/res/AIVoice/AIVoiceListening/22.bin,9624,81d0f8a1d141ffc8d114867e9d0fb0c4
-/user/res/AIVoice/AIVoiceListening/27.bin,9624,4d9e6b4750d52457f40f781e3f38ace0
-/user/res/AIVoice/AIVoiceListening/7.bin,9624,95ee2a53df87cbc05f252500a43e4305
-/user/res/AIVoice/AIVoiceListening/17.bin,9624,50bca0b33724c4c08d8232589637e1d3
-/user/res/AIVoice/AIVoiceListening/5.bin,9624,81ac57db382259aaca596832ace13219
-/user/res/AIVoice/AIVoiceListening/2.bin,9624,e2575d8826260d85c0c24bfb37700dd5
-/user/res/AIVoice/AIVoiceListening/36.bin,9624,8f85b5adaf407a0c10b57e80fe13f59b
-/user/res/AIVoice/AIVoiceListening/11.bin,9624,a69efdacc17413f29e3840b9644ec7aa
-/user/res/AIVoice/AIVoiceListening/26.bin,9624,5b4e981943e85a523397b7c69b9cb3a0
-/user/res/AIVoice/AIVoiceListening/33.bin,9624,390627e6196f8cbbfb03b40c4f17e920
-/user/res/AIVoice/AIVoiceListening/24.bin,9624,025dd6d85ac7a23e7a2a173e03de7112
-/user/res/AIVoice/AIVoiceListening/37.bin,9624,5d39fcf1083d5f4195c31eaae253956e
-/user/res/AIVoice/AIVoiceListening/21.bin,9624,11f90a671d2de60469a49b39b90fce2f
-/user/res/AIVoice/AIVoiceThinking/20.bin,17304,3f4ddb548f69ef5e2500f4a4ad8feb4e
-/user/res/AIVoice/AIVoiceThinking/4.bin,17304,8678ffcdf4093278bcc4575c2fa547f0
-/user/res/AIVoice/AIVoiceThinking/8.bin,17304,929af1326dbda5d810c0659c5d95bd8c
-/user/res/AIVoice/AIVoiceThinking/35.bin,17304,b4cb1e666dd7d6e8e745ed6ae5bf8000
-/user/res/AIVoice/AIVoiceThinking/6.bin,17304,801c9256e97b3a4731e736eb99dbc8f7
-/user/res/AIVoice/AIVoiceThinking/14.bin,17304,89b845b8ec75f3089d715bee86cf91ff
-/user/res/AIVoice/AIVoiceThinking/18.bin,17304,036e6e51c49f136763b3f460e5797e65
-/user/res/AIVoice/AIVoiceThinking/9.bin,17304,a93d800b505582820236dc22f6295c1c
-/user/res/AIVoice/AIVoiceThinking/1.bin,17304,922d1f4a72919e21ade754b7a95f71ab
-/user/res/AIVoice/AIVoiceThinking/25.bin,17304,5d3bfb1ccb03c08aa6c1faa6a1e24f5f
-/user/res/AIVoice/AIVoiceThinking/31.bin,17304,2f4b29926697e022240f55bad24d2a3d
-/user/res/AIVoice/AIVoiceThinking/30.bin,17304,ac3fb651667d5d73a44e0ae09e6d1736
-/user/res/AIVoice/AIVoiceThinking/19.bin,17304,14b10bf467196dc8055c43bb37d0390c
-/user/res/AIVoice/AIVoiceThinking/40.bin,17304,5cdc7b33124d7110e8f2145b947c2864
-/user/res/AIVoice/AIVoiceThinking/16.bin,17304,4f91768860163c0f8e62a4b720c68cd0
-/user/res/AIVoice/AIVoiceThinking/13.bin,17304,a5f360daa57790b9ddc9c6182ec35c46
-/user/res/AIVoice/AIVoiceThinking/12.bin,17304,7b66a215f07751a74c7a370fe0f41edb
-/user/res/AIVoice/AIVoiceThinking/15.bin,17304,33139fa3243b53636b86e95d75baeb38
-/user/res/AIVoice/AIVoiceThinking/29.bin,17304,92b0633b1f739cb0b56b5be2db945d0f
-/user/res/AIVoice/AIVoiceThinking/38.bin,17304,a7953445d2fdddaebf64818f3e5c3368
-/user/res/AIVoice/AIVoiceThinking/39.bin,17304,7f9fc2920a8963b54f1424649dfaa900
-/user/res/AIVoice/AIVoiceThinking/23.bin,17304,230390c3713c1a524862ca410ec5bcfd
-/user/res/AIVoice/AIVoiceThinking/32.bin,17304,028b80fb03d4312223fbf389280b0bd3
-/user/res/AIVoice/AIVoiceThinking/3.bin,17304,6a92a880ab822e50d924145166d53be3
-/user/res/AIVoice/AIVoiceThinking/28.bin,17304,6af068c4c1e7c326b680883190522ea2
-/user/res/AIVoice/AIVoiceThinking/10.bin,17304,cb26fb5ccc86174da4902cdba7eb7e99
-/user/res/AIVoice/AIVoiceThinking/34.bin,17304,7d199d926a8c7f5b706bb50de65af7c5
-/user/res/AIVoice/AIVoiceThinking/22.bin,17304,2a6be4b9a707269fa9194e2f86681868
-/user/res/AIVoice/AIVoiceThinking/27.bin,17304,f2203e52aa3dcb838ed42fe96c673b7c
-/user/res/AIVoice/AIVoiceThinking/7.bin,17304,5ff045df61569af3f7887e4173ede494
-/user/res/AIVoice/AIVoiceThinking/17.bin,17304,5e394810d449d61a380e99c55cc5f57b
-/user/res/AIVoice/AIVoiceThinking/5.bin,17304,be0ee680b20258f5de2f3eaf620ae0c1
-/user/res/AIVoice/AIVoiceThinking/2.bin,17304,09cdf65a35a3b370fb5a8d4e238291c4
-/user/res/AIVoice/AIVoiceThinking/36.bin,17304,4d5832962ed87fcb9bea43e15aed1341
-/user/res/AIVoice/AIVoiceThinking/11.bin,17304,fba201daf8f2a51935ac205c88bc5639
-/user/res/AIVoice/AIVoiceThinking/26.bin,17304,8a4a503099e875fca2cf07b5ff4146db
-/user/res/AIVoice/AIVoiceThinking/33.bin,17304,9f4f9f5cd6dc5553b8a8ac715572c632
-/user/res/AIVoice/AIVoiceThinking/24.bin,17304,97c12c5f81b58c44d4410a4bc3e681e7
-/user/res/AIVoice/AIVoiceThinking/37.bin,17304,14d2c307fbde1ca3daf96aad9bba4905
-/user/res/AIVoice/AIVoiceThinking/21.bin,17304,3cbf089338ff432a3e3e7883dabcae32
-/user/res/AIVoice/aimodels/aimodes_tongyi_qianwen.bin,9624,6e935bc152baf2116a839b38cde2344e
-/user/res/AIVoice/aimodels/aimodels_wenxinyiyan.bin,9624,b20426ea32493cc1ea25b72aedcf8b3c
-/user/res/AIVoice/aimodels/aimodels_doubao.bin,9624,3ca21de15579c9aac3abdcfebaf3ca91
-/user/res/AIVoice/aimodels/aimodels_chatgpt.bin,9624,25f8a59c7e47e11ae6dfd95b1044c09a
-/user/res/AIVoice/aimodels/aimodes_iflytek_spark.bin,9624,c9980c72d17464cbf5db7ffef5943452
-/user/res/AIVoice/aimodels/aimodels_kimi.bin,9624,7d891331e3cdcadb89cdf5f7491bcf35
-/user/res/RebootAndShutDown/ReBoot/20.bin,146040,575219a85d23cf7c971333a6e0969f7a
-/user/res/RebootAndShutDown/ReBoot/4.bin,146040,cc9537f05baa5384b563a2117d8c2509
-/user/res/RebootAndShutDown/ReBoot/8.bin,146040,95c32a294a733dcee04f3599f863d92e
-/user/res/RebootAndShutDown/ReBoot/35.bin,146040,590f4388e4c9a984300adec7257de8f6
-/user/res/RebootAndShutDown/ReBoot/6.bin,146040,2376b6b03a28f455b5a9ec1336b5d30b
-/user/res/RebootAndShutDown/ReBoot/14.bin,146040,d39e006b5aa400eb18c3f80f1d38f01a
-/user/res/RebootAndShutDown/ReBoot/18.bin,146040,d798c0903ec5da5214b6e4058fd1ae81
-/user/res/RebootAndShutDown/ReBoot/9.bin,146040,c8ab1e8ee9a76b31a6cca39d88749c31
-/user/res/RebootAndShutDown/ReBoot/1.bin,146040,3f1aab0d7fa45716c5f750378de0401c
-/user/res/RebootAndShutDown/ReBoot/25.bin,146040,800ab53b38c77e5c1511e729536a68ec
-/user/res/RebootAndShutDown/ReBoot/31.bin,146040,02024398517183dade7cf2e69f4a5bd9
-/user/res/RebootAndShutDown/ReBoot/30.bin,146040,452fa99a054d42fd4db6ddd10943789e
-/user/res/RebootAndShutDown/ReBoot/19.bin,146040,b2bf9fab7e038047aabc68010e53622e
-/user/res/RebootAndShutDown/ReBoot/16.bin,146040,bfd1afdebf2ae6673d3ebd8d97cbb2d9
-/user/res/RebootAndShutDown/ReBoot/13.bin,146040,f42cd2dafcbab8d1c91335599617185e
-/user/res/RebootAndShutDown/ReBoot/12.bin,146040,7e122352ab59fbe9205ec503d7061813
-/user/res/RebootAndShutDown/ReBoot/15.bin,146040,ae6ff9e94f1aa80d87cd2209b6b01600
-/user/res/RebootAndShutDown/ReBoot/29.bin,146040,3472c6a88a84eb4b12f6a923bf62ee1c
-/user/res/RebootAndShutDown/ReBoot/23.bin,146040,cf8d3887579a4e1abf792699dcfb9cf2
-/user/res/RebootAndShutDown/ReBoot/32.bin,146040,a9cc5f08d8119d153376944a2bd05bd8
-/user/res/RebootAndShutDown/ReBoot/3.bin,146040,b1e1a8910e9b5a76f999cc2892dd5356
-/user/res/RebootAndShutDown/ReBoot/28.bin,146040,8ef076e178a4b6bcc42192ab408e4778
-/user/res/RebootAndShutDown/ReBoot/10.bin,146040,1e19397a35f937cf469a6648c42e17f2
-/user/res/RebootAndShutDown/ReBoot/34.bin,146040,85d76a56e26bb95548290366ab2f9089
-/user/res/RebootAndShutDown/ReBoot/22.bin,146040,c6ab0f641aec0ce4e327af8d0ef029ec
-/user/res/RebootAndShutDown/ReBoot/27.bin,146040,ce29d83a181c102c168a444e81b72a0f
-/user/res/RebootAndShutDown/ReBoot/7.bin,146040,7d365b5fd8fcb4aed5cdde94bfd42bcb
-/user/res/RebootAndShutDown/ReBoot/17.bin,146040,183b22ae4fc69a35b43540048fe9afb7
-/user/res/RebootAndShutDown/ReBoot/5.bin,146040,7291016b66a980c4f092165b3a46debe
-/user/res/RebootAndShutDown/ReBoot/2.bin,146040,162392b79882f3da6a94a59f93acfd73
-/user/res/RebootAndShutDown/ReBoot/36.bin,146040,b16c09f2a3d4b563c451180c24672bb2
-/user/res/RebootAndShutDown/ReBoot/11.bin,146040,3f9067b66600417d034e3465b2d75df8
-/user/res/RebootAndShutDown/ReBoot/26.bin,146040,d7f860f842ce2c533ca8644eef50fe66
-/user/res/RebootAndShutDown/ReBoot/33.bin,146040,0982f87bfa8ac3fe6164bb03aa8c9e0e
-/user/res/RebootAndShutDown/ReBoot/24.bin,146040,309092663bb7a648945f6bf233efb806
-/user/res/RebootAndShutDown/ReBoot/21.bin,146040,81b8c6b8e804008434b557fbdca9d499
-/user/res/RebootAndShutDown/ShutDown/20.bin,146040,b12d0df15260d1968350ad6fd7354016
-/user/res/RebootAndShutDown/ShutDown/4.bin,146040,6c7553bda92cfd3a6cdcda817105d157
-/user/res/RebootAndShutDown/ShutDown/8.bin,146040,803d49a3ba10ea9674b8c095b1bffc27
-/user/res/RebootAndShutDown/ShutDown/6.bin,146040,3ab51364373d798d65654441b6381d53
-/user/res/RebootAndShutDown/ShutDown/14.bin,146040,93d70d9ebed34ea5836efed1c704f36c
-/user/res/RebootAndShutDown/ShutDown/18.bin,146040,6570fb40185e2b70e3872e5b3d5101a7
-/user/res/RebootAndShutDown/ShutDown/9.bin,146040,332b60be2748775fbc4ffb265f2af017
-/user/res/RebootAndShutDown/ShutDown/1.bin,146040,576310bf1e150dc0defa4c7c8e22c9fc
-/user/res/RebootAndShutDown/ShutDown/25.bin,146040,12a8420477c4a5fb65bff3827df6deac
-/user/res/RebootAndShutDown/ShutDown/30.bin,146040,c5f5c67521244eab78acb101115e277b
-/user/res/RebootAndShutDown/ShutDown/19.bin,146040,288b72738afd6ed60450130d690e3d55
-/user/res/RebootAndShutDown/ShutDown/16.bin,146040,05fba620f5ffb2cf7c9a03e10f5af703
-/user/res/RebootAndShutDown/ShutDown/13.bin,146040,a4b75d37f7a211c480231b48cb1009cb
-/user/res/RebootAndShutDown/ShutDown/12.bin,146040,d32250ed1c68792220540cc3eb898029
-/user/res/RebootAndShutDown/ShutDown/15.bin,146040,430885b93085fbeb70ee912455b214d7
-/user/res/RebootAndShutDown/ShutDown/29.bin,146040,f8a5bafefa0a078605bfb1c443e5abf7
-/user/res/RebootAndShutDown/ShutDown/23.bin,146040,fbe7e270e5b43d7e543f07b18dd86eea
-/user/res/RebootAndShutDown/ShutDown/3.bin,146040,3dedb16d5b38682013fa0e75250200f8
-/user/res/RebootAndShutDown/ShutDown/28.bin,146040,1fa755af7093c751178f61578d892c26
-/user/res/RebootAndShutDown/ShutDown/10.bin,146040,8bf77c308b091470e2102fd2100347d7
-/user/res/RebootAndShutDown/ShutDown/22.bin,146040,e9ba501d1db40dccfd35f248094a439e
-/user/res/RebootAndShutDown/ShutDown/27.bin,146040,e235da3bb062843d109485783d52dfe7
-/user/res/RebootAndShutDown/ShutDown/7.bin,146040,08686d414f99377ca5f4d6ec9b970eb2
-/user/res/RebootAndShutDown/ShutDown/17.bin,146040,6e2ae795628e615da29bf05e4071ccd3
-/user/res/RebootAndShutDown/ShutDown/5.bin,146040,8e00051201a75bfecc905141b23a215e
-/user/res/RebootAndShutDown/ShutDown/2.bin,146040,2bdfdf8b95d7f5628386bb07d7551b0c
-/user/res/RebootAndShutDown/ShutDown/11.bin,146040,f3df7cb7f64c9cdb870b26e82f0a122d
-/user/res/RebootAndShutDown/ShutDown/26.bin,146040,2d82fe6a9a4b7c634b5d64f6e73ee151
-/user/res/RebootAndShutDown/ShutDown/24.bin,146040,b4a96c85189902dc48cab44ce5256e8e
-/user/res/RebootAndShutDown/ShutDown/21.bin,146040,6379b9079591d3fb13b743991a4aaaab
-/user/res/countdown/COUNTDOWM_TIMER_ICON.bin,888,4a38732ffee2f08b952c646b8dc96fb8
-/user/res/countdown/COUNTDOWM_PAUSE.bin,6824,22099430f042d22d71dddc57a23c86b6
-/user/res/countdown/repeat_button.bin,6824,5a09a77bd5545590c2fb8a944fc29082
-/user/res/countdown/COUNTDOWN_COLONE.bin,312,8a292d0dc37a5a17e6ddca37d1886c27
-/user/res/countdown/COUNTDOWM_PLAY.bin,6824,9ac7c1e405c3ded5518b885cca54ffd9
-/user/res/countdown/Vector_Big.bin,6824,717514d2b78890bd26b163457ead0df6
-/user/res/countdown/COUNTDOWM_END.bin,6824,a51376913855703d7a2fee71ecb2ea65
-/user/res/countdown/COUNTDOWM_RESET.bin,6824,5a09a77bd5545590c2fb8a944fc29082
-/user/res/countdown/COUNTDOWM_VECTOR.bin,584,ad4675656229b7c49b3396e961578a23
-/user/res/dial_state/lock.bin,664,f032b15e83d9e62dc982a42386017be7
-/user/res/dial_state/disturbicon.bin,1144,e61e10d6e5c827165667c8c2232fe682
-/user/res/dial_state/unread.bin,344,cc9fa8f6b2d45a156945b389273aab70
-/user/res/dial_state/sleep.bin,1144,54045d81eb5720e1f773241b8f05c001
-/user/res/SedentaryReminder/SedentaryReminder.bin,2904,0389bf44cb41a51338ab1582a63e4cec
-/user/res/alipay/ALIPAY_PAY_ICON_GREY.bin,216,55cfe0069acb32af44e124cd7a4a291e
-/user/res/alipay/ALIPAY_PAY_ICON_WHITE.bin,216,796bc0870a587658dad5f978242bb28f
-/user/res/alipay/4.bin,4504,3adc86af146ac7fc9bcf8d9f31ebc17e
-/user/res/alipay/8.bin,4504,bea2202a2c830a498162e7bcca87e981
-/user/res/alipay/no.bin,17304,97bbb87a3d490d942fda1570f9c34c30
-/user/res/alipay/6.bin,4504,4c8f36f6cd9bf5f4d8b879df6346f016
-/user/res/alipay/1.bin,4504,f67601204787069687522f789106a503
-/user/res/alipay/ALIPAY_LIST_PAY.bin,2264,9f412d25340b71d8545d683c860a2c00
-/user/res/alipay/3.bin,4504,d996a1be2a1ddccabcdf42d5cdbb8004
-/user/res/alipay/ALIPAY_LIST_SETTING.bin,2264,1927ab4aacb79620640c8d5e0084c7b7
-/user/res/alipay/7.bin,4504,ce2bba3533239df0d31e564828a75b04
-/user/res/alipay/alipaylog.bin,21624,88ed174c3bccc24db979e67dddf89a86
-/user/res/alipay/alipay_logo.bin,4504,7aa38663337e41c10eb7b144a6128396
-/user/res/alipay/5.bin,4504,354f80ab7b05b1c0364f301adf1bab89
-/user/res/alipay/2.bin,4504,1ee2f3b20e4e4f8a668d3157d2460431
-/user/res/alipay/ALIPAY_LIST_HELP.bin,1560,498561d88d14e51bec05437f016bbef7
-/user/res/alipay/ALIPAY_LIST_TRANS.bin,2264,3e7820b343bda6acd64f6632483b24aa
-/user/res/alipay/yes.bin,17304,6e4da832d4541d58d77e59a84c02481b
-/user/res/alipay/ALIPAY_BIND_FAILURE.bin,8536,43d3eb2374034cca701af69b65aee227
-/user/res/alipay/ALIPAY_BIND_SUCCESS.bin,8536,a1cbb75ffebe13094eb6db86c127a2ed
-/user/res/MotionRecognition/MotionRecognition.bin,6424,ce5c517b79166d26c3453b6b17c87449
-/user/res/MainCard/BloodOxygen.bin,146056,9f118ca8770460ebce3325d098a4351d
-/user/res/MainCard/HeartCard.bin,52664,42c56f6a4267a498013113b9609f11dc
-/user/res/MainCard/SleepCard.bin,52664,1b7cea741637e8cc2438cbbf0db5e781
-/user/res/MainCard/TrainingCard.bin,52664,d59f988ccb5b46f1cb19eba363a88a9c
-/user/res/MainCard/clock.bin,446840,233f82c2514851f24528d5ef2f7799b5
-/user/res/MainCard/CompassCard.bin,52664,7c08f40d6843a20277c56d95f8f9f060
-/user/res/MainCard/player.bin,228024,0da2ada5f81f3917adc5dd728043c703
-/user/res/MainCard/dropdown.bin,37064,0e73a7d1428cd2c886fb7c49a35d533a
-/user/res/MainCard/CARD_ADD.bin,4504,e638ad7dfab63c542c4611b59f64414f
-/user/res/MainCard/heart.bin,52616,bacc57161bee0b37b775a76e72d1974f
-/user/res/MainCard/SetMainCard.bin,52664,361d989b2559b97b5f2156fad8b67275
-/user/res/MainCard/compass.bin,149896,d2f1084703c31e61678a59b869cd5e3f
-/user/res/MainCard/disturbicon.bin,1144,95bc3f0be0d47346e9e64afc20aa9476
-/user/res/MainCard/WeatherCard.bin,52664,13b9c836ce67584a73e9834f7d2712f6
-/user/res/MainCard/MusicCard.bin,52664,887280b78a46ea7c4c0fa35eaa4ae312
-/user/res/MainCard/CARD_DEL.bin,4504,f3ac3f164187f2b82448c097fd7f52d2
-/user/res/MainCard/Training.bin,47720,6577148d2d697bf28b8f90c21b574381
-/user/res/MainCard/BloodOxygenCard.bin,52664,a82a64b83a5e16f3611cbc34431d62dd
-/user/res/MainCard/SportCard.bin,52664,920f9637b10d837ba9d6d3f167def7b8
-/user/res/MainCard/CARD_ACTIVITY.bin,52664,58e606086304dd54da63f0c2c852e218
-/user/res/users/AddCard.bin,15224,5f927994c664ee37a39e726444ab9245
-/user/res/users/Enter.bin,6824,bc7e720901135244039241610b4785e3
-/user/res/users/OK.bin,4504,1797c7a05c6f1a57ca8d90501e81d127
-/user/res/Save_Ele/Battery-E.bin,1048,d4c5dbd4848ebc3c27eea73e824ff1bb
-/user/res/Save_Ele/SaveEle.bin,5544,ae6da91e0f8739d84214993f601e6008
-/user/res/Save_Ele/finger2.bin,2840,a7ee17de8d5ed4beb1128bd8453dbfba
-/user/res/Save_Ele/wathch.bin,6264,09b4cd6459b6310b89e70fcbb24a19b5
-/user/res/Save_Ele/Save_Right.bin,6824,6fd689a03cecc7e2bd7b574b9b922cf2
-/user/res/Save_Ele/Save_Error.bin,6824,d5ee709de0c93cdf2a654d359c094f20
-/user/res/Save_Ele/finger.bin,2424,e89ffff0ee82698e155aab1eccabe6ac
-/user/res/Save_Ele/Battery-F.bin,184,5f6ebdd611114be5ffa67d0565bea342
-/user/res/remind/unbind/20.bin,4504,3320689774d53601cb5468ed0f9959fa
-/user/res/remind/unbind/4.bin,4504,a2c64ced58a4c8aad23010b23e88f498
-/user/res/remind/unbind/8.bin,4504,8cfe811b63181c3d57f6d3440c059b93
-/user/res/remind/unbind/6.bin,4504,776f45e073d2c8f360f6546ec9edbbe9
-/user/res/remind/unbind/14.bin,4504,38cae9faad142244d26ddd89357b30f1
-/user/res/remind/unbind/18.bin,4504,1a1f485a43c12f183883b9247e4c14a6
-/user/res/remind/unbind/9.bin,4504,d5a9abef9fca6256ccce37f43e8cabd0
-/user/res/remind/unbind/1.bin,4504,11135c00d2af746255ba3335829015e1
-/user/res/remind/unbind/25.bin,4504,b8a3de8cdccf47f150527bc669855cd9
-/user/res/remind/unbind/19.bin,4504,cc36aad220cf021a138fa9b409e50930
-/user/res/remind/unbind/16.bin,4504,573b9d957c93fbd28a729375f71d6451
-/user/res/remind/unbind/13.bin,4504,38cae9faad142244d26ddd89357b30f1
-/user/res/remind/unbind/12.bin,4504,1f74b5fcdf67bea50d808169250fdef1
-/user/res/remind/unbind/15.bin,4504,732d04116aaff8a39b172d04dee32b8e
-/user/res/remind/unbind/23.bin,4504,86827b1f4fa63c9536f124d314fec27a
-/user/res/remind/unbind/3.bin,4504,a354a0ece88b554cb6f6ac0bb783fb67
-/user/res/remind/unbind/10.bin,4504,2b208a2f663b9befce76ab88ebc3648c
-/user/res/remind/unbind/22.bin,4504,ff4b5ddb9b534faf22e75b2a7dcdd5bf
-/user/res/remind/unbind/7.bin,4504,d9d726e14d1b877a7505c892b38b0445
-/user/res/remind/unbind/17.bin,4504,2a56caa0a23aa4106adfca1e5e67f597
-/user/res/remind/unbind/5.bin,4504,80e2f74d9c2c806385fdb5e767c98df6
-/user/res/remind/unbind/2.bin,4504,2620db0f4307b374261c325399881003
-/user/res/remind/unbind/11.bin,4504,7fb9ddee6a917cf9a73448bbff40dcba
-/user/res/remind/unbind/24.bin,4504,76940389b38b8f848259ebfcb5237e4f
-/user/res/remind/unbind/21.bin,4504,1eea84325b14dcdd8b898e104ee01132
-/user/res/remind/bind/20.bin,4648,d17b2ff27577fd75e288b8cfd8c92678
-/user/res/remind/bind/4.bin,4648,a1aa8d112067c7f0275654d4dc3856c2
-/user/res/remind/bind/8.bin,4648,759e01b0a21189ad1752fce474a50aed
-/user/res/remind/bind/6.bin,4648,b95b8fcf6e4fd5b385b6deb3ff5a509b
-/user/res/remind/bind/14.bin,4648,1cb48a87b2eee9456942ff62941dbe10
-/user/res/remind/bind/18.bin,4648,a8a7997d8f88da83f90c5e5cf1af5672
-/user/res/remind/bind/9.bin,4648,8dea13525e27447be032f87998d9cfe2
-/user/res/remind/bind/1.bin,4648,5c98ca3b8f451b92d65add7d89d74982
-/user/res/remind/bind/25.bin,4648,e35b050928700cf7b90421ea7cc498d0
-/user/res/remind/bind/19.bin,4648,acd6928dc679b529b5758864ef5da21c
-/user/res/remind/bind/16.bin,4648,ef3876a78a3862e011e996736452c0d4
-/user/res/remind/bind/13.bin,4648,7fde27e670baeb1be5dc4fec3374a004
-/user/res/remind/bind/12.bin,4648,2b14c89a49ad05c273904bf1381fc08a
-/user/res/remind/bind/15.bin,4648,d638fc4004231f0c5c6d938a4a419cae
-/user/res/remind/bind/23.bin,4648,eb749d12dcb94f6f64b3cc60226827a8
-/user/res/remind/bind/3.bin,4648,07b21725a1bb54cce77d91dca83233e2
-/user/res/remind/bind/10.bin,4648,73581ab6e91a4f72c8350726c90548fc
-/user/res/remind/bind/22.bin,4648,2f4b61a13b8a905eb9b3c3b5da574b5f
-/user/res/remind/bind/7.bin,4648,2474a99b5f0ffdf50d36585401269f0e
-/user/res/remind/bind/17.bin,4648,be9608a25d4647ec8f713607d3f15c24
-/user/res/remind/bind/5.bin,4648,5bf7b52cf2891f433b0abde3fb9c690c
-/user/res/remind/bind/2.bin,4648,2a34275fedb7adc64b2613f3393043e5
-/user/res/remind/bind/11.bin,4648,78ae1abcdd59be7c9b9d7078836b9ab4
-/user/res/remind/bind/24.bin,4648,ad906ad5f60e771c45e403fb9944c058
-/user/res/remind/bind/21.bin,4648,0f1044ac6a7a8385be80b15d4842564d
diff --git a/code/sdk/files/u8/fs/user/system/cat1ota/Cat1pyVersion.txt b/code/sdk/files/u8/fs/user/system/cat1ota/Cat1pyVersion.txt
deleted file mode 100644 (file)
index 19c7bdb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-16
\ No newline at end of file
diff --git a/code/sdk/files/u8/fs/user/system/cat1ota/EventMesh.py b/code/sdk/files/u8/fs/user/system/cat1ota/EventMesh.py
deleted file mode 100644 (file)
index 7951835..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-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/u8/fs/user/system/cat1ota/cat1Service.py b/code/sdk/files/u8/fs/user/system/cat1ota/cat1Service.py
deleted file mode 100644 (file)
index 306d718..0000000
+++ /dev/null
@@ -1,1116 +0,0 @@
-# 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.telecom_dmp import telecomDmpCb
-from usr.china_mobile_dmp import chinamobileCb
-
-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_V16"
-CONFIG_JSON="/usr/system_config.json"
-CURRENT_APP_TYPE="pysrv"
-
-
-
-
-
-
-
-# 设置日志输出级别
-log.basicConfig(level=log.INFO)
-cat1service_log = log.getLogger("cat1service")
-
-#设置通话音量
-voiceCall.setVolume(10)
-print("voice call volume {}".format(voiceCall.getVolume()))
-# lpm_fd = pm.create_wakelock("system_lock", len("system_lock"))
-pm.autosleep(1)
-# pm.wakelock_lock(lpm_fd)
-cat1service_log.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):
-    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))
-
-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))
-    cat1service_log.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):
-        # cat1service_log.info('### interrupt  {} ###'.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿
-        if args[1] == 0:
-            cat1service_log.info("disable autosleep")
-            pm.autosleep(0)
-            # pm.wakelock_lock(lpm_fd)
-        elif args[1] == 1:
-            cat1service_log.info("enable autosleep")
-            # pm.wakelock_unlock(lpm_fd)
-            pm.autosleep(1)
-        # cat1service_log.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'         # 返回值 
-
-
-
-def result(args):
-    print('download status:',args[0],'download process:',args[1])
-def download_fota_img( srcurl ):
-    fota_obj = fota()  # 创建Fota对象
-    cat1service_log.info("httpDownload... {} , {}".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:
-        cat1service_log.error("httpDownload error")
-        
-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)
-    cat1service_log.info(url)
-    data = response.json()
-    if(data['UptoDate'] == False):
-        cat1service_log.info("Need update python application")
-        srcurl = data['url']
-        #差分升级方式
-        # res = fota_obj.httpDownload(url1="http://www.example.com/fota.bin",callback=result)    
-        # mini fota方式
-        return srcurl
-    else:
-        cat1service_log.info("No need update python application")
-        return ""
-
-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()
-        # print('slip uart={0}'.format (self.__uart))
-
-        # ret = slip.construct(self.__uart, self.__mode, 0)
-        # if ret != 0:
-        #     print('slip netif construct fail')
-        #     return None
-        print('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.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(10)
-        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
-        print(cmd)  # 输出: 07
-        print("btmcu_cmd_handler cmd {0} , args {1}".format(cmd,parm))
-        if cmd == "00":
-            print(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))
-                print("ret={} {} {}".format(ret,cmd,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":
-            print(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":
-            print(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":
-            print(cmd)
-            result = check_fota()
-            if result == "":
-                self.reply_cmd('04',"no need update!")
-            else:
-                self.reply_cmd('04',"start ota {} please wait...".format(result))
-            download_fota_img(result)
-        elif cmd == "05":
-            print(cmd)
-            # UDP_CMD_SEND_SMS
-        elif cmd == "06":
-            print(cmd)
-            # UDP_CMD_GET_TIME
-            time=utime.localtime()
-            zone=utime.getTimeZone()
-            #(2024, 3, 2, 18, 31, 32, 5, 62),8
-            # 返回当前时间戳,参数为元组
-            # timestamp = utime.mktime(time)
-            # cat1service_log.info(timestamp)
-            self.reply_cmd('06',"{0}@{1}".format(time,zone))
-        elif cmd == "07":
-            print("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()
-            print("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":
-            print("{},{}".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:
-                print("reply:{},ret:{}".format(resp.decode(),ret))
-                self.reply_cmd('09',"{}".format(resp.decode()))
-            else:
-                print("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)
-            print("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 == "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)
-            print("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)
-            print("software_version:{},{}".format(self.software_version,parm))
-        elif cmd == "16": #获取BLE mac地址
-            eventMesh.publish("set_dev_mac",str(parm))
-            print("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):
-        print("remove_all_sms_cb\r\n")
-        msg_nums = sms.getMsgNums() #短信数量
-        if msg_nums == -1:
-            msg_nums = 0
-        sms_data = sms.getSaveLoc()
-        print("{}\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] #最大存储短信数量
-        print("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()
-        print(sms_data)
-        if sms_data == -1:
-            return
-        sms_max = sms_data[0][2]#最大存储短信数量
-        print(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]
-            print("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:
-            print('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:
-            print('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 :
-            print('reply_cmd 1')
-            self.clear_remain()
-            message = str(_timesync)
-            print('reply_cmd 2')
-            self.__Socket_UDP_noreply(cmd, message)
-        except:
-            print('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):
-            print("skip reset_network_config")
-            return 0
-        Info = dataCall.getInfo(1,0)
-        print("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)
-        print("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) :
-            print("skip set_network_config")
-            return 0
-        Info = dataCall.getInfo(1,0)
-        print("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)
-        print("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") > 1:
-                eventMesh.publish("set_network_state",1)
-                if self.china_mobile_init == 1:
-                    return
-                self.china_mobile_init = 1
-                chinamobileCb.china_mobile_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:
-            print('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):
-        print('__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]:
-            print('__unpack_tlv_format err')
-            return -1
-        print('__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:
-                print("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])
-                
-                
-                print("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])
-                        
-                    print("Socket_SEND_Thread  while data:{} {}".format(data[0],data[1]))
-                
-                if data:
-                        print("data ok!!")
-                else:
-                        print("data error!!")
-            except Exception :
-                print("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)
-            print("__Socket_UDP send msg {}".format(msg))
-            self.__err = 0
-            self.__sock.sendto(msg,server_addr)
-            print("__Socket_UDP send 2")
-            self.__wait_resp = 1
-            # data = self.__queue.get()
-            self.__wait_resp = 0
-            # return data
-            return 1
-        except Exception as error:
-            print(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)
-        
-        print("__Socket_UDP_noreply send msg {}".format(msg))
-        self.__err = 0
-        data_size = self.__sock.sendto(msg,server_addr)
-        print("self.__sock data_size {}".format(data_size))
-        self.__wait_resp = 0
-        return 0
-
-    # socket通信(UDP)模块
-    def __Socket_Thread(self):
-        while True:
-            try:
-                print("recv====")
-                data=self.__sock.recv(1024)
-                print("data:{}".format(data))
-                if data:
-                    value = self.__unpack_tlv_format(data.decode())
-                    if value != -1:
-                        print('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])
-                        print("End else Thread")
-                    else:
-                        print("data error!!")
-            except Exception as recverr:
-                print("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()
-                
-            
-
-        print("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卡状态
-# 下文进行系统配置
-print("Cat1Service start")
-
-cat1service = Cat1Service()
-
-#send_data_q = Queue(100)
-
-#voice call callback function
-def voice_callback(args):
-    if args[0] == 10:
-        print('voicecall incoming call, PhoneNO: ', args[6])
-        if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能
-            print('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功能
-            print('voicecall connected, PhoneNO: ', args[6])
-            cat1service.notifyConnecteCall(args[6])
-    elif args[0] == 12:
-        print('voicecall disconnect')
-        if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能
-            print('voicecall disconnected, PhoneNO: ', args[6])
-            cat1service.notifyDisconnectCall(args[6])
-    elif args[0] == 13:
-        print('voicecall is waiting, PhoneNO: ', args[6])
-    elif args[0] == 14:
-        print('voicecall dialing, PhoneNO: ', args[6])
-    elif args[0] == 15:
-        print('voicecall alerting, PhoneNO: ', args[6])
-    elif args[0] == 16:
-        print('voicecall holding, PhoneNO: ', args[6])
-    else:
-        print('voice_callback , args[0]: ', args[0])
-
-#电话消息反馈
-voiceCall.setCallback(voice_callback)
-
-
-def checknet_cb(arg):
-    print("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):
-#     cat1service_log.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/u8/fs/user/system/cat1ota/checkota.py b/code/sdk/files/u8/fs/user/system/cat1ota/checkota.py
deleted file mode 100644 (file)
index e5ef1f1..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-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/u8/fs/user/system/cat1ota/china_mobile_dmp.py b/code/sdk/files/u8/fs/user/system/cat1ota/china_mobile_dmp.py
deleted file mode 100644 (file)
index 9382f43..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-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 = "KUMI"#品牌
-
-        model = "Watch Soar"#型号
-        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("KUMI")#品牌
-
-        model = "Watch Soar"#型号
-        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/u8/fs/user/system/cat1ota/main.py b/code/sdk/files/u8/fs/user/system/cat1ota/main.py
deleted file mode 100644 (file)
index 3d70c7c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-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/u8/fs/user/system/cat1ota/main_init.py b/code/sdk/files/u8/fs/user/system/cat1ota/main_init.py
deleted file mode 100644 (file)
index 9ed74f7..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-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/u8/fs/user/system/cat1ota/slipService.py b/code/sdk/files/u8/fs/user/system/cat1ota/slipService.py
deleted file mode 100644 (file)
index eddba83..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-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/u8/fs/user/system/cat1ota/telecom_dmp.py b/code/sdk/files/u8/fs/user/system/cat1ota/telecom_dmp.py
deleted file mode 100644 (file)
index 28c8dc6..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-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()
-
-
-
-
-
-
-
-
-
-
-
-