| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539 |
- ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTAULÀ¥��Z¥Z¥�����þ4Z¥Z¥Æîble_file_fota.luac^��þ¥
- Lua\S�“
- xV�����������(w@@@Rble_file_fota.lua������������©r���K��J@@€JÀ@�JÀ@‚J€Á‚‹��Š�ƒ·kŠ€Â„Š�Ã…Š€Ã†ì���,A��l���¬Á��
- €�‡€à¬�
- €ˆ&��&�€����
is_upgradi=�ng�total_size��������recei¤�ved_size
upgrade_file/ble_fotDÙa.bin
service_uuidF000char_R—uuid_cmdF001char_uuid_data,³F002max_packet_sizeÈ��������procproc_disconnect��������bL(���-�����
����@�@@�C�€�$@�`�€@�À@�A���@�$@€€A�ÀA�$@€�&¤��€����fotafinishloginfo¹> FOTA_CMDæ£åœ¨é‡�å�¯è®¾å¤‡..�?.rtosreboot���������
���*��dy�*���*���*���+���+���+���+���+��ƒë�,���,���,���-����������_ENV�0I
- ���Ÿ������F�@�G@À��€��ÁÀ��úAA�$��AA�œ��d@�\��� €Á�@€F�ÈÍ@�GÀÁ��€��Á��d@€&�€�L@B�Á€�d€x<€†�@�‡@@Á€����@€�†ÁB�‡CÁA�p��€�¤€¤@��€Á�@€†�@�‡@@Á€‰����¤@€œ���!€€‡À€†ÀB�‡�DÁ@:2����A��¤€�Æ�@�Ç@À���AÁ�€áX�Á�ä@€Æ�@�Ç@À���AA�ä@€Æ€1E�ÇÀÅ䀀�â���€ €Æ�@�Ç@À���A¢¦�ä@€Æ�@�Ç@À���AA�ä@€Æ€F�ÇÀÂÆÇ�ä€�â����€Æ�@�Ç@À���AAC�ä@€HÀG�H€��H€È�Æ�@�Ç@À���AÁõf�� �ÆÈ�B �FÇ�ä@€Æ�@�Ç@À�–|��A� �ä@€€(€Æ�@�ÇÀÁ���AÁ �ä@–\€�'€†�@�‡ÀAÁ€��
- �¤@€€%€€¯êÄ�@"€†�@�‡@@Á€��A
- �¤@€†€Ç�¢@&��@€†�@�‡€JÁ€��Á
- �¤@€&�€�†�1É@�‡@@Á€���¤@€†�@�‡@@Á€��A0a�FAÈ���¤@€†�@�‡@@Á€����F‘wÈ���¤@€†@È�Æ�È�À�À€†�@�‡@™’@Á€��Á�¤@€†�@�‡@@Á€���¤@Š€†@L�‡€LÆ�Ç�¤€�Æ�@�Ç@À���AÁ>�€�Á�ä@€Æ€E�Ç�ÍÇ�äÀ�F [@�GAÀ����ÁA
�‚
�@€�Â
�À�dAˆ¡€â���@€"��À€F@�GAÀ����Áìd�dA€F@�GAÀ����ÁA�dA€F�N�GÁS|Î…�Á�dA€€€F@�GÁÁ����ÁA|ï�dA€�€†�@�‡ÀAÁ€����¤@€†�,’@�‡@@Á€��Á�¤@€H�P�†�Ç�¢����ÉA€†€F�‡ÀFÆ�Ç�¤€�¢���@€†�@�‡@2—@Á€��A�¤@€�€†�@�‡€JÁ€���)Œ�¤@€†€E�‡ÀPÃ���¤@�†�@�‡@@Á€lI���¤@€€€†�@�‡€JÁ€��A�@ïÀ�†ÁB�‡CÁA��€�¤€¤@��&�€�F�„��loginfo FOTA_CMD收到åÈÏ‘½ä»¤æ•°æ�®:toHex长度:��¾J�����error命令数æ�®ä¸ºç©ºvïbyteè§£æž�命令ç �:stringv
- format (0x%02X)处ç�†å¼€å§‹ƒùå�‡çº§å‘½ä»¤�������unpack<ò¹I4�������文件总大å°�:å™r—节åˆ�始化FOTAå�系统...î;fotainitFOTAåˆ�始化æˆ�åŠ8~ŸFOTA底层准备就绪osrÈÑemove
upgrade_file已清ç�†æ—õ§ä¸´æ—¶æ–‡ä»¶
is_upgradingt/^otal_sizereceived_size��������l�å�‡çº§çжæ€�已设置总大&�å°�:临时文件:准备接æ”õ[¶å›ºä»¶æ•°æ�®...FOTAåˆ�始化å�ò¤±è´¥(å¼€å§‹å‘½ä»¤æ ¼å¼�错误ï值Œé•¿åº¦ä¸�足处ç�†ç»“æ�Ÿå�‡ç¬}º§å‘½ä»¤warn+未处于å�‡çº§ç�жæ€�,忽略结æ�Ÿå‘½ä»¤éªŒèŽ»¯�文件完整性...已接收:R;应接收:文件完整性验Ÿ.è¯�通过开始执行FOTAå�‡çº3ާ...io fileSize文件大å°�×ó:fileFOTAå�‡çº§ç»“æžœ:resuùlt:isDone: FOTAå�‡çº§æˆ�功ïut¼�V2ç§’å�Žè®¾å¤‡å°†è‡ªåЍé‡�å�¯Ux...,é‡�å�¯å�Žé€šè¿‡æ—¥å¿—判æ–Ύ最终是å�¦å�‡çº§æˆ�功sys„«timerStartÐ������FOTAå�‡çº§å–«¤±è´¥æ–‡ä»¶ä¸�完整,å�‡çº§ålV¤±è´¥æ¸…ç�†å�‡çº§çжæ€�...�´Ûå·²åˆ é™¤ä¸´æ—¶æ–‡ä»¶åˆ é™¤ä¸´Ñj时文件失败finishå�‡çº§æórµ�程结æ�ŸæœªçŸ¥å‘½ä»¤ç �:��Ù6���������1���1���1���1���1œþ���1���1���1���1���4���4���4���5©ƒ���5���5���5���5���6���:���:���:[m���;���;���;���;���;���;���;���;Oµ���;���;���;���>���>���?���?���?È���?���?���B���B���B���D���D���D ”���D���D���D���E���E���E���E���EBŠ���E���E���H���H���H���H���H���Iæî���I���I���I���I���J���J���J���J���J���M���M���M���M���M���P���PU���P���P���P���P���Q���Q���Q���Q7=���Q���U���V���W���Y���Y���Y���YßË���Z���Z���[���[���Y���\���\���\ܳ���\���\���\���^���^���^���^���^à×���_���a���a���a���a���a���b���exÆ���e���f���f���f���f���f���i���i¡���i���j���j���j���j���j���k���oò™���o���o���o���o���p���p���p���pwÉ���p���p���p���q���q���q���q���qÈ.���q���q���s���s���s���s���t���tÈ#���t���t���t���w���w���w���w���wx���x���x���x���x���y���y���y���yPx���y���y���y���z���z���z���z���{Ú·���{���{���{���{���{���{���{���{½½���}���}���}���}���~���~���~���~Ÿ¬���~�����������������������„���„����„���„���„���„���†���†���†���†Ø"���†���‡���‰���‰���‰���‰���‰����Õ�������������������Ž���‘���‘���‘�~���’���’���’���’���’���’���“���“¿Q���“���“���“���“���•���•���•���•Ù¤���•���š���š���š���š���›���›���›'^���›���›���›��������������������Ó����������������������������Ÿ���ù½��� cmd_data������cmd�����Ñtotal_size0���m���
- file_size©��7-�Ö���result´���Ö���isDone´���Ö“z������_ENVupgrade_stateble_rÜceboot�£���É����
W���F�@�G@À��€�Òç�ÁÀ����A�d@€F@Á�b@��@€F�@×7�G€Á��€��ÁÀ�d@€&�€�F�@�G@À��€�!§�Á��AÂ�d@�F€B�GÀÂ�†@Â�Á��d€€1Fb���@€Œ@Ã����¤@€Œ€Ã�¤@�†Àù˜�Ü����À�H€€‡†�D�‡@DÆÀÃ��Ä�Ò��¶ïÏÀĤ€�ÆÀÃ�EAEÐ��_€ÅÀ�Âõ€ÆÀÃ��Ä�!À�À€Æ�@�Ç@À���AÁ/ �€�Á�B�FÂÃ��‚�Æ‚Ä�Ã�ä@�wËÆ�@�Ç@À���A�†ÁÃ�Á�ä@€€§�€†�@�‡@GÁ€����FAÂ�¤@�HÀÇ‚†�H¼�‡@HÃ���¤@�&�€�"���loginfo�ø
- FOTA_DATA收到数æ�®åŒ…,éäu•¿åº¦:å—节
is_upgradingwaUrn%未处于å�‡çº§çжæ€�,忽çÖÛ•¥æ•°æ�®å†™å…¥æ–‡ä»¶:
upgrade©_fileioopenabwriteclos”¼ereceived_sizemathfloortd~otal_sized�������max_packet_s>Ãize2���������������å�‡çº§è¿›9@度:%(/)#æ•°æ�®å†™å…¥æˆ®b�功,当å‰�总计:error打õ开文件失败:�fotafinish)ˆ���������W���¤���¤���¤���¤�à“��¤���¤���¤���§���§���§���¨���¨�¦É��¨���¨���¨���©�������������'u��������®���®���®���®���®���¯��‘��¯���±���±���±���²���²���µ���µ�Zÿ��µ���µ���¸���¸���¸���¸���¸���¸�Ù—��¸���»���»���»���»���»���»���¼�Ó��¼���¼���¼���½���½���½���½���½�ù��½���¾���¾���¾���¾���¾���½���Á�á^��Á���Á���Á���Á���Á���Á���Á���Ã�Út��Ã���Ã���Ã���Ã���Ã���Æ���Ç���Ç�^b��Ç���Ç���É������data����W���x©file���W��� progress-���J�����éO�_ENVupgrade_stateconfig�Ï���Hë����R���Æ�@�Ç@À���AÁ��€��À0Ù€�A$�ä@��Æ@A�Ç€ÁÁA�$��F|Â�LÁÁd�ä€��AA��ALÁÁ�d��†Å´AÂ�ŒÁA¤�$���FAA�G�ÁŒÁÁ�¤��Æh�Â�ÌÁÁä�d���†@�‡A@Á���Â�A.r�€€ÁB���Aƒ�€€¤A€â���éy�€"���€†@�‡A@Á���Â�¤A€…Ï�À�¤A�À€b���€†@�‡A@Áœ0����¤A€…€À�¤A��€†@�‡ÌÑADÁ���‚�@€�¤A�@€†@�‡ADÁt‘���Â�@��¤A�&�€����login,foble_file_fota处ç�†å†™å…¥æ6{•°æ�®toHexstringfindlowedNr
service_uuidchar_uuid_cmd[char_uuid_dataUUID匹é…�结果j]:æœ�务匹é…�:命令匹é…�:|Ùæ•°æ�®åŒ¹é…�:%命令特å¾�值åŸ!Œ¹é…�,处ç�†å‘½ä»¤%æ•°æ�®ç‰¹å¥}¾�值匹é…�,处ç�†æ•°æ�®warnÏæœªçŸ¥çš„特å¾�值UUID:未矹¥çš„æœ�务UUID:���������Rò���Ð���Ð���Ð���Ð���Ð���Ð���Ð���Ð*¶���Ð���Ó���Ó���Ó���Ó���Ó���Ó���Ó¾ä���Ó���Ô���Ô���Ô���Ô���Ô���Ô���Ôå����Ô���Õ���Õ���Õ���Õ���Õ���Õ���ÕY���Õ���×���×���×���×���Ø���Ø���ÙÓn���Ù���Ú���Ú���×���Ü���Ü���Ý���Ýh·���ß���ß���ß���ß���ß���à���à���àï���à���á���á���ã���ã���ã���ã���ããê���ä���ä���ä���ä���æ���æ���æ���æS.���æ���æ���ç���é���é���é���é���é<y���é���ë������
service_uuid����(LR���
- char_uuid����R���data����R–Ë���is_service_match���R���
is_¥;cmd_match���R���is_data_match!þ<���R������_ENVconfighandle_c½Uommandhandle_data�î���þ������4º���@�@@�A€���À��$@€�Á�"����¹€�@�@A�A€���€�$@€HÀA‚�Â�"�P��À�€@B�€B�F�Â�$@�ÀB��C�C�y<��$@�&�€�
���loginfoble_f*¥ile_fota处ç�†è¿žæŽ¥æ–开事äöÙ»¶
is_upgradingerror+å�‡çº§èe¿‡ç¨‹ä¸è¿žæŽ¥æ–开,终æ¢å�‡d级�
upgrade_fileosremovevèfotafinish������������ï��ó�ï���ï���ï���ï���ò���ò���ò���ó��Â��ó���ó���ó���ó���ô���÷���÷���÷��F�ø���ø���ø���ø���ü���ü���ü���ü��yñ�þ����������_ENVupgrade_stateÂU���������������������"���èë#���$���%���&���-���Ÿ���É���ë���iýÏ���þ���î����������ble_filj>e_fota������upgrade_state���PD���config������ble_reboot�±�����handle_command
������ha%Indle_data���������_ENVZ¥Z¥”…
ble_main.luacœ��þÚLuaS�”o“
- xV�����������(w@@ble´ó_main.lua���������>������D���qÖ@@��€†€@�ÁÀ��¤€�@��À�€†€@�ÓÁ��¤€�@���@�Ë@�Ê�ƒʀ„Ê�Ã…—AʀÆÊ�ćÀ�ƒÄ�€Ë€BD�‚DF‚A�xnGBÂ$‚�K�†BD�‡‚DÆ‚A�Ǥ‚�x1ÆÂD�ÇÅÃD�CEÕƒkB�‹�ÆBD�wǂăA�CCä‚�ÃD�EFÃD�GCÅ-C«B�ëA€,��lB��¬‚��Æ‚E�ÇÂÅòí��@�äB€&�€����packetfi�Õlerequireble_file_fotable_ìpacket_fota BLE_MAINconfigdékevice_name
Air8000_FOTA
servicÉoe_uuidF000char_uuid_cmdF00¡Œ1char_uuid_dataF002max_pacC™ket_size�������stringfromH(ùexbleWRITE
- WRITE_CMDsyshtaskInitEx��������>���|����÷í���Æ�@�Ç@À���AÁ��€€�ä@�Æ�A�T×Ç@ÁÀ€�€€Æ�@�Ç@À���A���Á�øÇBâ���€ÇBÌAÂä��âA����€çcÁ��ä@€ÆÀB�Ç�À�A����A�À�¿õä@€€2€Æ�A�Ç€ÃÀ€�@€Æ�@�Ç@À–!���AÁ���ÇADâA����€Á��ä@€œÆÆÀB�Ç�À�A������ÇADä@€�-€—ðÆ�A�ÇÀÄÀ€�À
€Æ�@�Ç@À���A�á|ä@€¢����€Ç@Eâ���@€Ç€Eâ���Ùù€�€ÇÀEâ@��@€Æ�@�Ç�Æ���AA�¾ä@€&�€�Ç@EÌ@Âä€��EAB$��BGÁE†@�‡A@Á���‚�@€¤A�†@�ce‡A@Á���Â�@�¤A�†@�‡A@Á���:�\€�B�¤A€†ÁB�‡CÅ€�‚��”šA‚�€�¤A€�€Æ�A�ÇÀÇÀ€�@€RÎÆ�@�Ç@À���A�ä@€€€Æ�A�Ç@ÈíMÀ€�À€Æ�@�Ç@À���A���Á�ÇÁEëâ���€ÇÁEÌAÂä��âA����€Á �Õnä@€€€Æ�A�Ç@ÉÀ€�@€Æ�@�Ç@ÀOŠ���A� ��Á �ÇJÂ�GBJb���€ÊaGBJLBÂd‚�bB����€A‚�ä@€�€œãÆ�A�Ç€ÊÀ€�@€Æ�@�Ç@À���AÁ
- �(oä@€€€Æ�@�Ç@À���A�€€�ä@�Ç4¢���€€Æ@K���ä€�€Ë@ €Æ�@�bÇ@À���AÁ�œ�ä@�Æ�L���ä�ä›�€BK�@€$‚�@L@€@�B@ÀA‚���‚�À�Ã�LCÂd�$B��@€ÛÒ@�B@A‚���‚�À�
�FCK�€€úÀd�$B��é€��jùÀ€Æ�@�Ç@À���¬¼AA
�†AK�À�¤�ä@��&�€�6���loeginfo
- BLE_EVENT收到BLE事�œä»¶:bleEVENT_CONN设备已Ã^连接地å�€:addrtoHex有÷ªçŸ¥syssendMsgCONNECTEVEÃINT_DISCONN设备已æ–开连掴�¥åŽŸå› :reason
DISCONNECTEDi&EVENT_WRITE处ç�†å†™å…¥äº‹ä»oC¶
uuid_serviceuuid_characteri‹@sticdataerror写入事件åˆÙ�‚æ•°ä¸�完整æœ�务UUID:特Éå¾�值UUID:æ•°æ�®é•¿åº¦:å—èÍ^Š‚
- WRITE_REQEVENT_READ处ç� V†è¯»å�–事件EVENT_READ_VALUEA读å�–æ“�作完æˆ�æ•°æ�®:
- æ—$ æ•°æ�®EVENT_SCAN_REPORT
扫æí_��报告RSSI:rssi adv_addr‘ªEVENT_SCAN_STOP
扫æ��å�œæ¢‚3其他事件类型:typetableõ¨%事件å�‚数为table,包å�«årè—æ®µ:pairsstringå�‚æ•°å—%�段:值:类型:事件å�‚æ•wd°ç±»åž‹:���������í���?���?���?���?���?���?���B���B���B���B���+´D���D���D���D���D���D���D���D���
D���D���D���D���D���D���D���E���ëE���E���E���E���E���E���E���F���sþF���F���F���H���H���H���H���H���RÉH���H���H���H���H���I���I���I���'I���I���I���I���I���J���J���J���G'J���L���L���L���L���L���O���O���šO���O���O���O���O���O���O���O���)…O���P���P���P���P���P���Q���U���)ûU���U���V���V���V���W���Y���Y���ØY���Y���Y���Y���Z���Z���Z���Z���BZ���Z���[���[���[���[���[���[���‰ò[���\���\���\���\���\���\���\���‰©\���]���]���]���]���_���_���_���Ý©_���_���_���`���`���`���`���b��� b���b���b���b���b���b���b���b���ÃSb���b���b���b���b���b���b���c���WPc���c���c���e���e���e���e���e���o´e���e���e���e���e���e���e���e���QŠe���e���e���e���e���f���f���f����f���h���h���h���h���h���h���k���å+k���k���k���k���k���l���l���n����Pn���n���n���n���o���o���o���o���E|o���o���p���p���p���p���q���q���q���q���q���r���r���r���r���r���Óvr���r���r���r���r���t���t���t���Õ|t���t���t���t���t���t���t���p���¾@p���v���x���x���x���x���x���x���Ix���x���|������ble_dev����í���4event����í���param����í���
ser·vice_uuidT���r���
- char_uuidW���rͩ���dataX���r���(for generator)H\�����(for state)�����(fo
- r control)Ç���ã���kÈ���á���vÈ�ºØ��á������_ENV
- TASK_NAME����²�IJ����‹����@�@@�A€���À��$@€�€4�"@��€�€�A�@A�$€€� �€��€�"@��€€�@�€A�A€���À�$@€���&��%a�@�@@�A€�����$@€��"@��À�ƒº€�€�@B�…�€$€€ ����"@��€ŸÆ€�@�€A�A€���€�$@€���&���@A�@@�A€���À�$@€��"@��À�€��Íq�C�…�€$€€ ����"@��€€�@Á�€A�A€���@�$@€���&���@�@@¿9�A€���€�$@€�@�@@�A€���À�$@€xH��"@���€���D�‹@�Æ@B�ǀēȊÀ€ˆÆ@B�Ç�ÅŠÀ€‰Š€ÅŠŠ€Å‹Ë��€n�FAB�GAƆ�F�‡ÁFÁ�¤�+A��K�e†AB�‡AGÆ�G�ÇÁÇkA�ë@�ŠÀ�Œ$€€_ ����"@��€€�@�€A�A€����²�$@€���&���@�@@�A€���@�$@€!}��€H�$@��@�@@�A€���À�Æ€G4W�ÇÀÇ$@��€�&��&�€�$���logÏ×info BLE_INIT开始åˆ�始化BMDLE...
- bluetoothiniterrorè¾³“�ç‰™æ ¸å¿ƒåˆ�始化失败è“�ç_b‰™æ ¸å¿ƒåˆ�始化æˆ�功bleBLó�E功能åˆ�始化失败BLE功èƒ�÷½åˆ�始化æˆ�功gatt_createGX¶ATTæœ�务创建失败GATTæœ�åŠ>ô¡åˆ›å»ºæˆ�功é…�ç½®å¹¿æ’æ•°æ�*®...adv_create
- addr_modePUB0”LICchannel_map
- CHNLS_ALL intBv_minx������� intv_max adv_da¬€taFLAGSstringchar�������Â{COMPLETE_LOCAL_NAMEconfigd±\evice_name广æ’é…�置失败Í广æ’é…�ç½®æˆ�功
- adv_start#B+©LE广æ’å·²å�¯åŠ¨ï¼Œè®¾å¤‡å��ç§°Êõ:���������‹���€���€©Ý���€���€���€���ƒ���ƒ���ƒ���ƒ���ƒd¢���ƒ���ƒ���„���„���„���…���…���…ç¼���…���…���†���†���ˆ���ˆ���ˆ���ˆŠÁ���ˆ���‹���‹���‹���‹���‹���‹���‹n/���‹���Œ���Œ���Œ����������������LÔ�������Ž���Ž��������������������W���“���“���“���“���“���“���“���“Lå���”���”���”���•���•���•���•���•è���–���–���˜���˜���˜���˜���˜���›S‹���›���›���›���›���œ���œ���œ���œ¾{���œ���œ���������������ž���ž���že���Ÿ��� ���¡���¡���¢���¢���¢���¢½���¢���¢���¢���¢���£���£���£���£ƒ7���£���¤���¤���œ���¥���§���§���§´Í���¨���¨���¨���¨���¨���©���©���«…k���«���«���«���«���®���®���®���¯ˆÄ���¯���¯���¯���¯���¯���¯���±���±Ý���²����������_ENVbluetooth_dÐeviceble_device
ble_event_cbgaitt_createatt_dbadv_create�µ���;Hé�����h����€�…���¤€€����"@��ÿÌ@€†�À�‡@@Á€��Á��¤@€€€†�Á�‡Žê@AÅ����¤€€@��b@��@€†�À�‡4£@@Á€��Á�¤@€�€‡�Â�@B€€‡Ë“€Â�Æ�À�ÇÀÂ�AA�‡�CŒÁC¤��]ý��ä@€Àø‡�Â��D€€†�À�‡ÀBÁå‚��A�G�Â�A¤@€†€Ä¤@€�@€{Â@õ‡�Â�ÀD€ô‡€Â�Ç�EÌÀÃä€�æªAEÁC$��G�E†À�‡ÁBÁ�Â�@B3€��À��LÃÃdƒ�B¤A€†ûUAÆÀ€��@€¤A��î†�À�‡@@Á.9€����¤@€…��¢���€�€…��ŒÀF¤üê@�†�Á�‡�GÅ��¤@�†�Á�‡@GÁ€�¤¹5@�@æ&�€����logerrorble‘i_main_task_funcble_init errorBsyswaitMsg
- BLE_EVENTwaitMsÓg timeout�������CONNECT���j����infoBLE设备连接æˆ�Í$功: addrtoHex
DISCONNECTED?³è®¾å¤‡æ–å¼€è¿žæŽ¥ï¼ŒåŽŸå› : Htproc_disconnect
- WRITE_REQ
uuiįd_serviceuuid_characteristic=Ðdata收到写请求: proc$w(异常退出, 5ç§’å�Žé‡�æ–°å¼€�Kå�¯å¹¿æ’ adv_stop cleanMsgwÅEaitˆ��������� ������h�íŒ��¶���¹���¹���¹���º���º���»���»�è¾��»���»���»���»���À���À���À���À�…é��À���À���Â���Â���Ã���Ã���Ã���Ã�5e��Ã���Ã���Ç���Ç���Ç���È���É���É�zµ��É���É���É���É���É���É���É���É�3��Ê���Ê���Ê���Ë���Ë���Ë���Ë���Ë�DJ��Ë���Ë���Í���Í���Í���Î���Ð���Ð�m2��Ð���Ñ���Ò���Ò���Ò���Ó���Ó���Ó�cÑ��Ô���Ö���Ö���Ö���Ö���Ö���Ö���Ö�"&��Ö���Ö���Ö���Ö���Ö���×���×���×�²1��×���×���Ø���Ü���Ü���Ü���Ü���Ü�ÞÖ��ß���ß���ß���à���à���à���ä���ä�äw��ä���ä���ç���ç���ç���ç���ç���é�±Ð�����result���h���msg���h��ÅH�conn_param���'���
- ble_param:�ò%��R���
service_uuid=���R���
- chará@_uuid@���R���dataA���R������ b…—le_init_ENV
- TASK_NAMEble_fota_xmainble_device>������������A�������������������������Ý���������"���#���$���%���&���'~����(���*���1���2���2���2���2���2V³���2���4���4���4���4���4���5���5
- á���5���5���5���6���6���8���8���8Ýn���8���8���9���9���9���9���9���:Ý~���;���|���²���é���ì���ì���ì���ìVF���ì���ì������
- fota_mode���>��‡�ble_fota_main���>���
- TASK_NAM-
E���>���bluetooth_device���>�^��ble_device���>���adv_create«K���>���gatt_create���>���attaq_db5���>���
ble_event_cb6���>���«© ble_init7���>���ble_main_task_func8���>������_ENVZ¥Z¥bledO_packet_fota.luacÐ��þðLuaSbÌ�“
- xV�����������(w@@beêle_packet_fota.lua�����������&����K��J@@€JÀ@�JÀ@‚JÀÀ‚‹��ŠÀA+ƒŠ@B„ŠÀB…Š@C†ì���,A��l���¬Á��
- €ù‡¬�
- €�‡&��&�€����
is_upgrad
- Øing�total_size��������receؘived_sizeupgrade_packet
serviÓÃce_uuidF000char_uuid_cmdF0wœ01char_uuid_dataF002max_paËácket_sizeÈ�������procproc_dÚwisconnect��������(���-�����
Q����@�@@�C�€�$@�€@�À@�A���>Ý@�$@€€A�ÀA�$@€�&�€����fot\¹afinishloginfo FOTA_CMD¸fæ£åœ¨é‡�å�¯è®¾å¤‡...rtosreb�ìoot���������
���*���*���*���*��*’�+���+���+���+���+���,���,���,��ǽ�-����������_ENV�0���š����ï�3£��F�@�G@À��€��ÁÀ��A�$��AA�œAì��d@�\��� €Á�@€F�@�GÀÁ��€��Á�q;�d@€&�€�L@B�Á€�d€€†�@�‡@@Á€‡Õ����@€�†ÁB�‡CÁA��€�¤€¤@�E��€Á�@€†�@�‡@@Á€����¤@€œ�b“��!€€‡À
€†ÀB�‡�DÁ@����A��¤€8¯�Æ�@�Ç@À���AÁ�€�Á�ä@€Æ�4Ç@�Ç@À���AA�ä@€Æ€E�ÇÀÅ䀀�â�7Š��€€Æ�@�Ç@À���A�ä@€Æ�@�Ç@j¾À���AA�ä@€HÀF�H€�ŽH€ÇŽH€Ç�Æ�,ƒ@�Ç@À���A��A�ÆÇ�ä@€Æ�@�Ç@
òÀ���A��ä@€@$€Æ�@�ÇÀÁ���AÁ|
�ä@€À"€†�@�‡ÀAÁ€�� �¤@€@Èî!€€Ä��€†�@�‡@@Á€��A �¤@€†€¿‚Æ�¢@��@€†�@�‡€IÁ€��Á �¤@€&�[(€�†�@�‡@@Á€��
- �¤@€†�@�‡@@Á€÷‹��A
- �FAÇ���¤@€†�@�‡@@Á€���F�
- �FÇ���¤@€†@Ç�Æ�Ç�À�À€†�fÙ@�‡@@Á€��Á
- �¤@€†�@�‡@@Á€��…U�¤@€ƒ���Á€�A�A��è€ €Æ�K�ÇÁ}Ë�äA�Æ�E�ÇAÌäÁ€�âA��€€F J@�GÂÁ�‚��Á‚�dB€F‚E�GẪ��dBVL�H�M�À€"���€F@�GBÀ�‚��ÁB›½
�dB€F@�GBÀ�‚��Á‚
�dB€F‚K�G¬vÍ…�Á�dB€ƒ�€���€çÀõ¢@���T}€Æ�@�ÇÀÁ���AA�ä@€Æ€E�ÇÀÌ”É��ä@�H�M�@€†�@�‡ÀAÁ€����¤@ Þ€H�M�†€E�‡ÀLÃ���¤@�†�@�‡@@Á€ƒ×��Á�¤@€€€†�@�‡€IÁ€���@N…€�†ÁB�‡CÁA��€�¤€¤@��&�€�=�›���loginfo FOTA_CMD收到åÈÏ‘½ä»¤æ•°æ�®:toHex长度:��¾J�����error命令数æ�®ä¸ºç©ºvïbyteè§£æž�命令ç �:stringv
- format (0x%02X)处ç�†å¼€å§‹ƒùå�‡çº§å‘½ä»¤�������unpack<ò¹I4�������文件总大å°�:å™r—节åˆ�始化FOTAå�系统...î;fotainitFOTAåˆ�始化æˆ�åŠ8~ŸFOTA底层准备就绪
is_up±gradingtotal_sizereceived_êñsize��������upgrade_packetåV|�‡çº§çжæ€�已设置总大å°�:û准备接收固件数æ�®...FelOTAåˆ�始化失败(开始命令gÃæ ¼å¼�错误,长度ä¸�足处-.ç�†ç»“æ�Ÿå�‡çº§å‘½ä»¤warn+未šà处于å�‡çº§çжæ€�,忽略结æ�,öŸå‘½ä»¤éªŒè¯�文件完整性..…—.已接收:应接收:文件~¶å®Œæ•´æ€§éªŒè¯�通过4å�‡çº§æ•;X°æ�®å·²å…¨éƒ¨æŽ¥æ”¶ï¼Œç‰å¾…å�‡ç©óº§å®Œæˆ�...�������syswaitZ°d�������isDoneæ ¡éªŒè¿‡ç¨‹å‡Kºé”™finish�FOTAå�‡çº§æˆ�功‚hï¼�V2ç§’å�Žè®¾å¤‡å°†è‡ªåЍé‡�å�æ\¯...,é‡�å�¯å�Žé€šè¿‡æ—¥å¿—判æöܖ最终是å�¦å�‡çº§æˆ�功timeÒ³rStartÐ������
æ ¡éªŒè¶…æ—¶æäo–‡ä»¶ä¸�完整,å�‡çº§å¤±è´¥ç¦*»“æ�Ÿå�‡çº§å‘½ä»¤å¤„ç�†å®Œæˆ�æ=蜪知命令ç �:���������ï��0 �1���1���1���1���1���1���1���1��5‹�1���4���4���4���5���5���5���5��*à�5���6���:���:���:���;���;���;��y�;���;���;���;���;���;���;���;��¡n�>���>���?���?���?���?���?���B��:f�B���B���D���D���D���D���D���D��޽�E���E���E���E���E���E���E���H��&��H���H���H���H���I���I���I���I��üÑ�I���J���J���J���J���J���M���M��¿Ù�M���M���M���P���Q���R���S���U��T³�U���U���U���V���V���U���W���W��à�W���W���W���W���Y���Y���Y���Y��©–�Y���Z���\���\���\���\���\���]��À�`���`���a���a���a���a���a���d���d���d���e���e���e���e���e���f���¨�j���j���j���j���j���k���k���k��º©�k���k���k���k���l���l���l���l��l��l���l���l���n���n���n���n���o��_-�o���o���o���o���p���p���p���p��0f�p���s���t���t���t���t���u���u��-q�u���u���v���v���v���w���w���x���x���x���x���x���y���y���y���y��áÀ�z���z���}���}���~���~���~���~��þ°�~�����������������������„���„��ûû�„���„���„���…���…���t���Š���Š��íü�‹���‹���‹���‹���‹���Œ���Œ���Œ��‰Û�Œ�������Ž����������������������2½�’���“���“���“���“���–���–���–��oË�–���–���–���˜���˜���˜���˜���˜��/²�˜���˜���˜���˜���˜���˜���š���
- ��Ÿ�� cmd_data����ï���cmd���ï���tbÕotal_size0���a���successš���Ò��þq�(for index)����Æ���(for limit•7)����Æ���(for step)����Æ���iž�_c��Å���succ¥���Å��� fotaDone¥���kïÅ������_ENVupgrade_stateble_ËYreboot�ž���È����e���F�@�G@À��€¤��ÁÀ����A�d@€F@Á�b@��@€F�Å~@�G€Á��€��ÁÀ�d@€&�€�F�@�G@À��€½“��Á��AÂ�d@�F€B�GÀÂ�€���dÀ�Æ�¡v@�Ç@À���A��A�À€�‚�@�ä@¨€b����
€ÆÀÃ���Í��HÀ€‡Æ@Â�Í�"
- ÄHÀ€„Æ@D�Ç€ÄÁÃ�FÁÄ�AEä€Pú�ÁÃ�FAEO�ÅA_ÀEÀ�€ÁÃ�FÁú
- Ä�!��À€@�A@A�����À€Bò¼�A‚�†ÂÃ�ÁÂ�ÃÄ�A�$A�@�AÛÎ@A����A�ÆÁÃ��$A€ÁÃ�FÁÄ�!�âu�À€@�A@A������$A€@€Æ�Xú@�ÇÀÇ���A�ä@€H@ȂƀB�Ç€Èî×��ä@�&�€�#���loginfo
- FOTA_3
- DATA收到数æ�®åŒ…,长度:®å—节
is_upgradingwarn%未-m处于å�‡çº§çжæ€�,忽略数æ�v^® 处ç�†åˆ†æ®µæ•°æ�®ï¼ŒåŒ…åº�å�«·:upgrade_packetfotarun分段写入结果:result:isDvone:received_size�������ma&’thfloortotal_sized�������oïmax_packet_size2��������������Í…�å�‡çº§è¿›åº¦:%(/)#æ•xL°æ�®å†™å…¥æˆ�功,当å‰�总计:Pë.所有数æ�®å·²æŽ¥æ”¶ï¼Œç‰å¾…mNå�‡çº§å®Œæˆ�...error分段况â™å…¥å¤±è´¥�finish�������¨��e���Ÿ���Ÿ���Ÿ���Ÿ���Ÿ���Ÿ���Ÿ�Ih��¢���¢���¢���£���£���£���£���£�
- 4��¤���¨���¨���¨���¨���¨���¨���©�r ��©���©���©���ª���ª���ª���ª���ª�
- ��ª���ª���ª���ª���¬���¬���®���®�~��®���®���¯���¯���¯���²���²���²��e��²���²���²���²���µ���µ���µ���µ�^Õ��µ���µ���¶���¶���¶���¶���·���·�«^��·���·���·���·���¸���¸���¸���¸�Nõ��¸���·���»���»���»���»���»���»�~Ò��»���¾���¾���¾���¾���¿���¿���¿�çO��¿���¿���À���Â���Â���Â���Â���Â�Ìæ��Å���Æ���Æ���Æ���Æ���È������dáata����e���result���e���isDon³„e���e��� progress3���Y������_d$ENVupgrade_stateconfig�Î���ê��
��R���Æ�@�Ç@À���AÁ��€��À€�bA$�ä@��Æ@A�Ç€ÁÁA�$��FÂ�x4LÁÁd�ä€��AA��ALÁÁ�d��†AÂ�›ùŒÁA¤�$���FAA�G�ÁŒÁÁ�¤��Æ�Â�ø”ÌÁÁä�d���†@�‡A@Á���Â�A�µÚ€€ÁB���Aƒ�€€¤A€â����€ÀË"���€†@�‡A@Á���Â�¤A€…�íYÀ�¤A�À€b���€†@�‡A@Á���܉�¤A€…€À�¤A��€†@�‡AD½¥Á���‚�@€�¤A�@€†@�‡ADÁ���ý'Â�@��¤A�&�€����loginfoEŸble_packet_fota处ç�†å†™å…¥æ•
y°æ�®toHexstringfindlowerÕA
service_uuidchar_uuid_cmdc¼!har_uuid_dataUUID匹é…�结果:`þæœ�务匹é…�:命令匹é…�:úþæ•°æ�®åŒ¹é…�:%命令特å¾�å€¼åŒ H¹é…�,处ç�†å‘½ä»¤%æ•°æ�®ç‰¹å¾ã£�值匹é…�,处ç�†æ•°æ�®warn„ÛæœªçŸ¥çš„特å¾�值UUID:未知2Òçš„æœ�务UUID:���������R�‚Y��Ï���Ï���Ï���Ï���Ï���Ï���Ï���Ï�'À��Ï���Ò���Ò���Ò���Ò���Ò���Ò���Ò�_„��Ò���Ó���Ó���Ó���Ó���Ó���Ó���Ó�î��Ó���Ô���Ô���Ô���Ô���Ô���Ô���Ô�)w��Ô���Ö���Ö���Ö���Ö���×���×���Ø�ž1��Ø���Ù���Ù���Ö���Û���Û���Ü���Ü�šX��Þ���Þ���Þ���Þ���Þ���ß���ß���ß�óu��ß���à���à���â���â���â���â���â�0I��ã���ã���ã���ã���å���å���å���å��M��å���å���æ���è���è���è���è���è�?ô��è���ê������
service_uuid����Rµ���
- char_uuid����R���data����R�E��is_service_match���R���
is_c¾md_match���R���is_data_match!�‚��R������_ENVconfighandle_co}Æmmandhandle_data�î���ù�������$«��@�@@�A€���À��$@€�Á�"���@“[€�@�@A�A€���€�$@€HÀA‚�B�@BD¯�C���$@�&�€�
- ���loginfobl¼üe_packet_fota处ç�†è¿žæŽ¥æ–å¼ðœ€äº‹ä»¶
is_upgradingerror+å�‡çº§è¿‡ç¨‹ä¸è¿žæŽ¥æ–开,终æ�¢å�‡çº§�fotafinish�����
�������ï���ï���ï���ï���ï���ò���’ò���ò���ó���ó���ó���ó���ó���ô���È÷���÷���÷���÷���ù����������_EN*ïVupgrade_state������������B���������"���#���$���%���&���-‹ø���š���È���ê���Î���ù���î���û���ûëà������ble_packet_fota������H
- upgrade_state������config���‰���ble_reboot������handle_c‡Óommand
������handle_data����<Ò�����_ENVZ¥Z¥ main.luacrã��þŸLuaS�“
- xV�����������(w@
- @main.lua���������"��Äy�@@€À@��A�@A�A€�†�@�Æ€@�$@�ª|ÀA�"���@€ÀA��B�A@�$@�€BÜÖ�ÀB�FÀA�G�Ã��@�$@€,�����‡ÀC‚7��D�F€C�$@�@D�A€�$@�ÀC�ÀD �$@€�&�€����PROJECT
- fota_tes«!tVERSION001.000.001loginîùfomainwdtinit(#������syF²stimerLoopStartfeed¸������G·print_versionsys taskInit¾¸require ble_mainrun�������
<�M���S���������@�@@�A€��$@�«À@��A�A@��€�ÆÀA�$@�À@��A�Ü@A��$@��ü&�€� ���syswait�¸������loginfofotaversi´´onVERSIONhezhou ble_fota tesÂat������������O���O���O���O���PÙQ���P���P���P���P���P���Q���Q���QȾ���Q���Q���S����������_ENV"���š‹!���"���&���&���&���&���&���&���8v+���+���+���-���-���-���-���/���üÂ/���/���/���/���/���S���M���T���ã¼T���T���T���W���W���W���[���[���[���[����������_ENVZ¥Z¥
expr/lorer.htmlúD��þ« <!DOCTYPE htk8ml>
- <html lang="zh-CN">
- <head>¸
- <meta charset="UTF-8">
- ÀŠ <meta name="viewport" content=ÖM"width=device-width, initial-scaá¼le=1.0">
- <title>LuatOS æ–‡ä7Ø»¶ç®¡ç�†ç³»ç»Ÿ</title>
- <sty]®le>
- body {
- Dî font-family: 'Microsoft YaHei',Y• Arial, sans-serif;
- Ç background-color: #f5f5f5;
- A margin: 0;
- 6] padding: 20px;
- colçöor: #333;
- }
- .càÒontainer {
- max-widtʇh: 1200px;
- margin: ‹auto;
- background: wŠÂhite;
- padding: 20pxF¿;
- border-radius: 8pF{x;
- box-shadow: 0 0 •r10px rgba(0, 0, 0, 0.1);
- �™ }
- .header {
- ºï background: #2c3e50;
- 3G color: white;
- W¥ padding: 15px;
- borIÊder-radius: 5px;
- maŠrrgin-bottom: 20px;
- ¥display: flex;
- justZÌify-content: space-between;
- /« align-items: center;
- >– }
- .login-form {
b£
- max-width: 400px;
- wß margin: 100px auto;
aJ
- padding: 40px;
- ¦ð background: white;
- ³Ž border-radius: 8px;
- ä? box-shadow: 0 0 20px rÝgba(0, 0, 0, 0.1);
- }
- 2G .form-group {
- Jâ margin-bottom: 15px;
- !Ú}
- label {
- šïdisplay: block;
- marœ}gin-bottom: 5px;
- foñmnt-weight: bold;
- }
- Ìó input[type="text"], input[táéype="password"] {
- w‰3idth: 100%;
- paddingfÖ: 10px;
- border: 1px
C solid #ddd;
- borderðè-radius: 4px;
- box-sÁjizing: border-box;
- }
- É button {
- bac
- kground-color: #3498db;
- éW color: white;
- ›border: none;
- paddiXng: 10px 20px;
- bordAer-radius: 4px;
- curLÂsor: pointer;
- font-tXsize: 16px;
- }
- Äæbutton:hover {
- back"îground-color: #2980b9;
- ‘œ}
- .file-list {
-
- width: 100%;
- b±8order-collapse: collapse;
- 7 margin-top: 20px;
- �ƒ }
- .file-list th, .filΦe-list td {
- paddingȈ: 12px;
- text-align:pG left;
- border-botto?m: 1px solid #ddd;
- }
- wf .file-list th {
- �Ä background-color: #f8f9fa;
- /â font-weight: bold;
- àR }
- .file-list tr¤ª:hover {
- backgroundކ-color: #f5f5f5;
- }
- :Ñ .download-btn {
- ª background-color: #27ae60;
- #� color: white;
- )5 padding: 5px 10px;
- ì text-decoration: none;
- ö
- border-radius: 3px;
- T font-size: 12px;
- ™ }
- .download-btn:hovüWer {
- background-colÉor: #219a52;
- }
- Ù .delete-btn {
- back6ground-color: #e74c3c;
- `" color: white;
- b½ìorder: none;
- paddineRg: 5px 10px;
- borderE@-radius: 3px;
- font-uBsize: 12px;
- cursor:½õ pointer;
- }
- .döEelete-btn:hover {
- b•hackground-color: #c0392b;
- › }
- .breadcrumb {
- @Û padding: 10px 0;
- )v margin-bottom: 20px;
- ¨‹ }
- .breadcrumb a {
Q
- color: #3498db;
- ‡ text-decoration: none;�%
- cursor: pointer;
- ³ò }
- .breadcrumb aC¸:hover {
- text-decorÁation: underline;
- }
- îØ .hidden {
- disºìplay: none;
- }
- é".error {
- color: #e7øx4c3c;
- margin-top: 1®C0px;
- }
- </style>
- <� /head>
- <body>
- <div class="ºcontainer">
- <!-- 登录yí页é�¢ -->
- <div id="log·inPage" class="login-form">
- ¼ <h2>LuatOS 文件管ç�†Þù系统登录</h2>
- <ð4div class="form-group">
- Ö <label for="username">çêH”¨æˆ·å��:</label>
- ß <input type="text" id="usernaÏ’me">
- </div>
- x9 <div class="form-group">
- úþ <label for="password">密ç �:</label>
- AÌ <input type="password" idk0="password">
- </div>o
- <button onclick="l‘åogin()">登录</button>
- — <div id="loginError" class=Åõ"error hidden"></div>
- <�v/div>
- <!-- 文件管çG7�†é¡µé�¢ -->
- <div id="f°¦ilePage" class="hidden">
- X <div class="header">
- 4ž <h1>LuatOS 文件管œÒç�†ç³»ç»Ÿ</h1>
- Ã<div>
- <buttY!on onclick="scanFiles()" style="hØmargin-right: 10px;">扫æ��æ–‡ä»ó¶</button>
- ç®<button onclick="logout()">退å‡rκ登录</button>
- «Ä </div>
- </div>
- ¢ <div class="breadcruèmb" id="breadcrumb">
- e) <a onclick="navigateTo('/'j²)">æ ¹ç›®å½•</a>
- –° <span> | </span>
- ´¢ <a onclick="navigateTo('/sd'®)">TF/SD目录</a>
- @></div>
- <table claRss="file-list">
- �l <thead>
- <tÿçr>
- <th>6�称</th>
- oª <th>大å°�</th>
- â <th>æ“�作</th>
- @@ </tr>
- áù </thead>
- PY <tbody id="fileListBody">
- Þ </tbody>
- Îb </table>
- </div>
- Nî </div>
- <script>
- Ã. let currentPath = '/';
- _ let isLoggedIn = false;
- ¹Ý function login() {
- 7 const username = document.îògetElementById('username').valuea;
- const password = ©¹document.getElementById('passwor?¢d').value;
- fetch(��'/login', {
- metO£hod: 'POST',
- hehmaders: {
- 'C{Êontent-Type': 'application/json'C÷,
- },
- c credentials: 'include', /jV/ 确���和接收cookies
- ¸’ body: JSON.strinà€gify({username: username, password: password})
- })
- ¶t .then(response => {
~È
- // 打å�°æ‰€æœ‰æ¹å“�应头,查看Cookie设置
- ±€ console.log('ç™»Á0录å“�应头:', response.headersz
- );
- return respoЫnse.json();
- })
- d .then(data => {
- 8c console.log('登录å“�~›åº”æ•°æ�®:', data);
- 8‘ if (data.success) {
- ž’ isLoggedIn = true;¡C
- // å˜å‚¨s'´ession_id到localStorage作为夳°‡ç”¨è®¤è¯�æ–¹å¼�
- æø if (data.session_id) {
- |O localStoraóNge.setItem('session_id', data.seÒ8ssion_id);
- › console.log('å·²å˜å‚¨Sessio¹nID到localStorage:', data.sessixon_id);
- }
- : document.get¤DElementById('loginPage').classLi@qst.add('hidden');
- Ë document.getElementById('�ŒfilePage').classList.remove('hid©Pden');
- load4Files('/luadb');
- U } else {
- »¯document.getElementById('loginErAÿror').textContent = data.message6 || '登录失败';
- ]æ document.getElementById¨ò('loginError').classList.remove(('hidden');
- }
- Àò })
- .catcîlh(error => {
- coÅínsole.error('登录请求错误:{ù', error);
- docuå_ment.getElementById('loginError'§#).textContent = '登录请求失m"è´¥';
- document.5getElementById('loginError').clabËssList.remove('hidden');
- þ });
- }
- Èÿfunction logout() {
- ôE fetch('/logout', {
- T� method: 'POST',
- † credentials: 'include' // €Úç¡®ä¿�å�‘é€�cookies
- îL })
- .then(() => {
- Î isLoggedIn = falCðse;
- // 清除lo½calStorageä¸çš„session_id
- Yü localStorage.removeIT�tem('session_id');
- þ´ document.getElementById('filÔePage').classList.add('hidden');)Ž
- document.getElÃementById('loginPage').classListâÇ.remove('hidden');
- ãU document.getElementById('useSžrname').value = '';
- Œ² document.getElementById('pa
ssword').value = '';
- §ò document.getElementById('l©àoginError').classList.add('hidde”än');
- });
- }s×
- // 扫æ��文件函æ•�°
- function scanFiles() ÑÙ{
- if (!isLoggedIn) dreturn;
- // 获å�–#J用户å��和密ç �用于URLå�‚æ•,P°è®¤è¯�
- const usern¿*ame = document.getElementById('uübsername')?.value || 'admin';
- ùÿ const password = docum�ent.getElementById('password')?.\:value || '123456';
- ¸h // 构建带认è¯�å�‚数的扫›¥æ��请求URL
- const ±?url = '/scan-files?username=' + ʺencodeURIComponent(username) +
- NF '&passworh÷d=' + encodeURIComponent(passworedd);
- console.log('QÚå�‘é€�文件扫æ��请求,URL:'2Ž, url);
- // 显示?œæ‰«æ��æ��示
- alert(ˆ·'开始扫æ��文件,请查看瘳»ç»Ÿæ—¥å¿—了解扫æ��进度...qX');
- fetch(url, {
ۍ
- method: 'GET',
xú
- credentials: 'ikNnclude'
- })
- øZ .then(response => {
- æÂ if (!response.ok) {
- ð throw new ErrÈQor('扫æ��请求错误: ' + respgonse.status);
- }V†
- return respons^¹e.json();
- })
- Á .then(data => {
- \ñ console.log('扫æ��å“�应‘”:', data);
- if )Á(data && data.success) {
- îp alert('文件扫æ�Žœ�完æˆ�ï¼�已扫æ��到 ' + data.ŸÝfoundFiles + ' 个文件,显ç¤
ºæ‰«æ��到的用户文件。');
qb
- // é‡�新劊ƒ 载文件列表
- )É loadFiles(currentPath);
- µƒ } else {
- ” alert('文件扫æ��»¬å¤±è´¥: ' + (data.message || 'æœSªçŸ¥é”™è¯¯'));
- ?Û}
- })
- .1²catch(error => {
- ·” console.error('扫æ��æ–‡ä»¶è¯·ãæ±‚错误:', error);
- - alert('扫æ��文件请求åk¤±è´¥');
- });
- ° }
- function loadFilSÉes(path) {
- if (!isL±¬oggedIn) return;
- ³// 准备请求头
- <Œconst headers = {
- è· 'Content-Type': 'application/sjson'
- };
- Õà // ç”±äºŽä¼ ç»Ÿè®¤è¯�æ–¹å¼�¡ä¸�å�¯é� ,我们使用URLå�‚æ•”<°è®¤è¯�
- // 获å�–ç”~0¨æˆ·å��和密ç �用于URLå�‚æ•°èþú®¤è¯�
- const usernam¦&e = document.getElementById('useÚ†rname')?.value || 'admin';
- 7$ const password = documenót.getElementById('password')?.vaµölue || '123456';
- oæ// 构建带认è¯�å�‚æ•°çš„URL
- P const url = '/list?pOÈath=' + encodeURIComponent(path)ÔÑ +
- '&us$¶ername=' + encodeURIComponent(usuername) +
- ò� '&password=' + encodeURICompoŸ�nent(password);
- cÄ-onsole.log('使用URLå�‚数认诺v�,请求URL:', url);
- Š fetch(url, {
- ÝÁ credentials: 'include', // ço”¡®ä¿�å�‘é€�cookies
- Å headers: headers
- u… })
- .then(responseù„ => {
- if (!respþEonse.ok) {
- ½!throw new Error('网络å“�应错‘误: ' + response.status);
- Im }
- rÕleturn response.json();
- ±í })
- .then(data =º�> {
- console.log?+('文件列表数�:', data);
- ÅK
- // å�ªä½¿ç”¨æœ6Å�务器返回的数æ�®
- ßN if (data && data.successY[ && Array.isArray(data.files)) {eœ
- displayFilÊ@es(data.files, path);
- Â } else {
- ° // 如果数æ�®æ— 效,显Bu示空列表
- Äý displayFiles([], path);
- Ÿ }
- ½ñupdateBreadcrumb(path);
- ÉB })
- .catch(erro Îr => {
- console.�!error('åŠ è½½æ–‡ä»¶åˆ—è¡¨é”™è¯¯:Ù7', error);
- // åu$�‘生错误时显示空列表
- Ì/ displayFiles([], I path);
- updateBrð·eadcrumb(path);
- });æ:
- }
- function ΩdisplayFiles(files, path) {
- m± const tbody = document.º§getElementById('fileListBody');
c£
- tbody.innerHTML = '™Û';
- // 确�filesA 是数组
- if (!ArraT<y.isArray(files)) {
- @Œ files = [];
- }
KÛ
- console.log('显ç=줺文件数é‡�:', files.length);xú
- files.forEach(fi®¡le => {
- // ç¡®äÿ�文件对象有必è¦�的属性ÅO
- const safeFileP° = {
- name: Xfile.name || "未知文件�",
AÜ
- size: file.eTsize || 0,
- ê‘isDirectory: file.isDirectory ||ã& false,
- pat!h: file.path || (path + '/' + (f\ôile.name || "未知文件å��"))
¸-
- };
- F³ const row = document.crea[ìteElement('tr');
- q! let nameCell, actionCell;
- �â if (safeFile.isDi¼Ðrectory) {
- ÀínameCell = `<td><a href="#" onclÛ6ick="navigateTo('${encodeURICompXÞonent(path + '/' + safeFile.namezì)}')">${safeFile.name}/</a></td>Ãâ`;
- actionCeŸll = '<td></td>';
- Ó_ } else {
- ¡ nameCell = `<td>${safeFile.name‰T}</td>`;
- //µH ä¸ºä¸‹è½½é“¾æŽ¥æ·»åŠ URLå�‚æ•°è6Š®¤è¯�
- constLâ username = document.getElementB'ßyId('username')?.value || 'admin
- ';
- const paЏssword = document.getElementByIdu3('password')?.value || '123456';ôw
- const downOloadUrl = '/download?path=' + enocodeURIComponent(safeFile.path) ¤+
- Ø '&username=' + encode_xURIComponent(username) +
- Æ4 ôQ '&password=' + encodeURIComponªŒent(password);
- ÿ // æ·»åŠ ä¸‹è½½å’Œåˆ é™¤æŒûï‰é’®
- action)PCell = `<td>
- ‚ <a href="${downloadUrl}" c¥lass="download-btn" style="margi¨
- n-right: 5px;">下载</a>
- _r <button class�è="delete-btn" onclick="deleteFil¥äe('${encodeURIComponent(safeFileýº.path)}')">åˆ é™¤</button>
- —ù </td>`;
- Mâ }
- ro,0w.innerHTML = `
- ¼Ø ${nameCell}
- òF <td>${formatSize(safeFile.(Msize)}</td>
-
Á ${actionCell}
- Y7`;
- tbody.appendoYChild(row);
- });
- Qq }
- // åˆ é™¤æ–‡äë”»¶å‡½æ•°
- function deletÀŸeFile(filePath) {
- i°gf (confirm('确定è¦�åˆ é™¤è¿™ä¸3€ªæ–‡ä»¶å�—?')) {
- œ // 获å�–用户å��和密ç �ç‚U”¨äºŽURLå�‚数认è¯�
- ® const username = document.îògetElementById('username')?.valuùÔe || 'admin';
- cLonst password = document.getElem·ÉentById('password')?.value || '1Ö23456';
- // 枸„建带认è¯�å�‚æ•°çš„åˆ é™¤è¯·æQÒ±‚URL
- const urlÍ` = '/delete?path=' + filePath +
Ý;
- '&u•Ìsername=' + encodeURIComponent(uÑLsername) +
- 8H '&password=' + encodeURI‡TComponent(password);
- Ôõ console.log('使用URLå��¢‚数认è¯�è¿›è¡Œåˆ é™¤æ“�作,覯·æ±‚URL:', url);
- Y¼ fetch(url, {
- ä¤ method: 'POST',
- åw credentials: 'includ@¿e'
- })
- ™F .then(response => respon†ªse.json())
- .theñÞn(data => {
- Ýî if (data.success) {
- s| // åˆ é™¤æˆ�功å�޲"é‡�æ–°åŠ è½½æ–‡ä»¶åˆ—è¡¨
- OF loadFiles(curr45entPath);
- }XQ else {
- êí alert('åˆ é™¤å¤±è´¥: ' + (data.BLmessage || '未知错误'));
- ‡ }
- ¨R })
- .catch(›error => {
- ‹8alert('åˆ é™¤è¯·æ±‚å¤±è´¥');
- ÝÃ });
- }>
- }
- function ΩupdateBreadcrumb(path) {
- —w const breadcrumb = documen—t.getElementById('breadcrumb');
Þð
- // å…ˆè®¾ç½®æ ¹ç›|ª®å½•å’ŒTF/SD目录链接
- )^ breadcrumb.innerHTML = '<aÑ onclick="navigateTo(\'\')">æ ¹çi×›®å½•</a><span> | </span><a onclÑñick="navigateTo(\'/sd\')">TF/SDçë™›®å½•</a>';
- // ç„}¦¶å�Žæ·»åР当å‰�路径的层次çJ»“构(如果ä¸�æ˜¯æ ¹ç›®å½•ï¼‰e4
- if (path !== '/' &ÿÌ& path !== '/sd') {
- Tµ const parts = path.split('/ûd').filter(p => p);
- Ï let current = '';
- ŸB // 仅在é�žæ ¹ç›®å½•å’�öŒé�žSDç›®å½•æ—¶æ·»åŠ åˆ†éš”ç¬¦
- ñÕ breadcrumb.inner<·HTML += ' > ';
- Dà parts.forEach((part, index) =>ñm {
- current Ĵ+= '/' + part;
- ` if (index > 0) {
- ïr breadcrumb.innerHT·4ML += ' > ';
- ¾ }
- breadcr
Üumb.innerHTML += '<a onclick="naé¯vigateTo(\'' + current + '\')">'áH + part + '</a>';
- 9ª });
- }
- }õ
- function navigateTo(ÄEpath) {
- currentPathAš = path;
- loadFiles(üMpath);
- }
- funáPction formatSize(bytes) {
- ßž if (bytes === 0) return 'É,0 B';
- const k = 102ÑH4;
- const sizes = ['‹ÚB', 'KB', 'MB', 'GB'];
- …6 const i = Math.floor(Math.loêžg(bytes) / Math.log(k));
- € return parseFloat((bytes /Šo Math.pow(k, i)).toFixed(2)) + '¤z ' + sizes[i];
- }
- ŸÄ // æ ¼å¼�化日期函数已Úz移除
- // å�¯åЍå�Žæ£ìJ€æŸ¥è®¤è¯�状æ€�
- window�.onload = function() {
- ÿÝ fetch('/check-auth', {
- K" credentials: 'includ@¿e' // ç¡®ä¿�å�‘é€�cookies
- ¥ })
- .then(res‡Yponse => response.json())
- b\ .then(data => {
- \ñ if (data.authenticated) ÂR{
- isLoggedIžn = true;
- d9Øocument.getElementById('loginPag©Êe').classList.add('hidden');
- fä document.getElK‡ementById('filePage').classList.®±remove('hidden');
- r( loadFiles('/luadb');
- ¸- }
- });
-³
- };
- </script>
- </bo´‘dy>
- </html>
- Z¥Z¥.airm2m_alA%l_crc#.bin���þ_
- …wž`9�’oÔ\’Ïþþº����������������������������åH��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)��������������������������������€)
|