From 5eb1100b6d69298c58da0ff4830cbb2145407db2 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Thu, 31 Jul 2025 16:56:57 +0800 Subject: [PATCH] add bluetoothSample,ConnectivityKit Signed-off-by: wangweiyuan --- .../Bluetooth/SerialCommunication/.gitignore | 12 + .../SerialCommunication/AppScope/app.json5 | 25 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../Bluetooth/SerialCommunication/README.md | 90 +++ .../SerialCommunication/build-profile.json5 | 57 ++ .../SerialCommunication/code-linter.json5 | 35 ++ .../SerialCommunication/entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++ .../SerialCommunication/entry/hvigorfile.ts | 6 + .../entry/obfuscation-rules.txt | 23 + .../entry/oh-package.json5 | 25 + .../entry/src/main/ets/common/ToastReport.ets | 30 + .../main/ets/entryability/EntryAbility.ets | 83 +++ .../entrybackupability/EntryBackupAbility.ets | 27 + .../entry/src/main/ets/pages/Index.ets | 262 +++++++++ .../entry/src/main/module.json5 | 74 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 28 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../entry/src/ohosTest/module.json5 | 27 + .../entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ .../hvigor/hvigor-config.json5 | 22 + .../SerialCommunication/hvigorfile.ts | 6 + .../SerialCommunication/oh-package.json5 | 25 + .../Bluetooth/SerialCommunication/ohosTest.md | 15 + .../screenshots/serialCommuniaction.jpeg | Bin 0 -> 60378 bytes .../HCECardSimulationDevelopment/.gitignore | 12 + .../AppScope/app.json5 | 25 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../HCECardSimulationDevelopment/README.md | 84 +++ .../build-profile.json5 | 69 +++ .../code-linter.json5 | 35 ++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++ .../entry/hvigorfile.ts | 6 + .../entry/obfuscation-rules.txt | 23 + .../entry/oh-package.json5 | 25 + .../main/ets/entryability/EntryAbility.ets | 97 ++++ .../entrybackupability/EntryBackupAbility.ets | 27 + .../entry/src/main/ets/pages/Index.ets | 34 ++ .../entry/src/main/module.json5 | 78 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../entry/src/ohosTest/module.json5 | 27 + .../entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ .../entry1/.gitignore | 6 + .../entry1/build-profile.json5 | 43 ++ .../entry1/hvigorfile.ts | 6 + .../entry1/obfuscation-rules.txt | 23 + .../entry1/oh-package.json5 | 25 + .../main/ets/entry1ability/Entry1Ability.ets | 87 +++ .../Entry1BackupAbility.ets | 27 + .../entry1/src/main/ets/pages/Index.ets | 35 ++ .../entry1/src/main/module.json5 | 87 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../entry1/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../src/ohosTest/ets/test/List.test.ets | 20 + .../entry1/src/ohosTest/module.json5 | 26 + .../entry1/src/test/List.test.ets | 20 + .../entry1/src/test/LocalUnit.test.ets | 48 ++ .../hvigor/hvigor-config.json5 | 37 ++ .../hvigorfile.ts | 21 + .../oh-package.json5 | 25 + .../HCECardSimulationDevelopment/ohosTest.md | 7 + .../screenshots/image.jpeg | Bin 0 -> 20946 bytes .../NFC/NFCReadAndWrite/.gitignore | 12 + .../NFC/NFCReadAndWrite/AppScope/app.json5 | 25 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes ConnectivityKit/NFC/NFCReadAndWrite/README.md | 84 +++ .../NFC/NFCReadAndWrite/build-profile.json5 | 69 +++ .../NFC/NFCReadAndWrite/code-linter.json5 | 35 ++ .../NFC/NFCReadAndWrite/entry/.gitignore | 6 + .../NFCReadAndWrite/entry/build-profile.json5 | 43 ++ .../NFC/NFCReadAndWrite/entry/hvigorfile.ts | 6 + .../entry/obfuscation-rules.txt | 23 + .../NFCReadAndWrite/entry/oh-package.json5 | 25 + .../main/ets/entryability/EntryAbility.ets | 136 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 + .../entry/src/main/ets/pages/Index.ets | 34 ++ .../entry/src/main/module.json5 | 76 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../entry/src/ohosTest/module.json5 | 27 + .../entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ .../NFC/NFCReadAndWrite/entry1/.gitignore | 6 + .../entry1/build-profile.json5 | 43 ++ .../NFC/NFCReadAndWrite/entry1/hvigorfile.ts | 6 + .../entry1/obfuscation-rules.txt | 23 + .../NFCReadAndWrite/entry1/oh-package.json5 | 25 + .../Entry1BackupAbility.ets | 27 + .../main/ets/entryability/EntryAbility.ets | 94 ++++ .../entry1/src/main/ets/pages/Index.ets | 34 ++ .../entry1/src/main/module.json5 | 85 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../entry1/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../src/ohosTest/ets/test/List.test.ets | 20 + .../entry1/src/ohosTest/module.json5 | 26 + .../entry1/src/test/List.test.ets | 20 + .../entry1/src/test/LocalUnit.test.ets | 48 ++ .../hvigor/hvigor-config.json5 | 37 ++ .../NFC/NFCReadAndWrite/hvigorfile.ts | 6 + .../NFC/NFCReadAndWrite/oh-package.json5 | 25 + .../NFC/NFCReadAndWrite/ohosTest.md | 7 + .../NFCReadAndWrite/screenshots/image.jpeg | Bin 0 -> 20946 bytes ConnectivityKit/NFC/SecureElement/.gitignore | 12 + .../NFC/SecureElement/AppScope/app.json5 | 25 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes ConnectivityKit/NFC/SecureElement/README.md | 65 +++ .../NFC/SecureElement/build-profile.json5 | 54 ++ .../NFC/SecureElement/code-linter.json5 | 35 ++ .../NFC/SecureElement/entry/.gitignore | 6 + .../SecureElement/entry/build-profile.json5 | 43 ++ .../NFC/SecureElement/entry/hvigorfile.ts | 6 + .../SecureElement/entry/obfuscation-rules.txt | 23 + .../NFC/SecureElement/entry/oh-package.json5 | 25 + .../main/ets/entryability/EntryAbility.ets | 124 ++++ .../entrybackupability/EntryBackupAbility.ets | 27 + .../entry/src/main/ets/pages/Index.ets | 35 ++ .../SecureElement/entry/src/main/module.json5 | 66 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../entry/src/ohosTest/module.json5 | 27 + .../entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ .../SecureElement/hvigor/hvigor-config.json5 | 22 + .../NFC/SecureElement/hvigorfile.ts | 6 + .../NFC/SecureElement/oh-package.json5 | 25 + ConnectivityKit/NFC/SecureElement/ohosTest.md | 7 + .../NFC/SecureElement/screenshots/image.jpeg | Bin 0 -> 20946 bytes ConnectivityKit/Wlan/.gitignore | 13 + ConnectivityKit/Wlan/AppScope/app.json5 | 26 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes ConnectivityKit/Wlan/README_zh.md | 89 +++ ConnectivityKit/Wlan/build-profile.json5 | 44 ++ ConnectivityKit/Wlan/code-linter.json5 | 35 ++ ConnectivityKit/Wlan/entry/.gitignore | 4 + .../Wlan/entry/build-profile.json5 | 28 + ConnectivityKit/Wlan/entry/hvigorfile.ts | 17 + .../Wlan/entry/obfuscation-rules.txt | 23 + ConnectivityKit/Wlan/entry/oh-package.json5 | 24 + .../entry/src/main/ets/component/P2pView.ets | 86 +++ .../entry/src/main/ets/component/TitleBar.ets | 43 ++ .../entry/src/main/ets/component/WifiView.ets | 76 +++ .../main/ets/entryability/EntryAbility.ets | 64 +++ .../Wlan/entry/src/main/ets/model/Logger.ets | 53 ++ .../entry/src/main/ets/pages/AvailableP2p.ets | 138 +++++ .../src/main/ets/pages/AvailableWifi.ets | 126 +++++ .../Wlan/entry/src/main/ets/pages/Index.ets | 74 +++ .../entry/src/main/ets/pages/P2pSetting.ets | 180 ++++++ .../Wlan/entry/src/main/ets/pages/P2pTest.ets | 59 ++ .../entry/src/main/ets/pages/WifiConnect.ets | 207 +++++++ .../Wlan/entry/src/main/module.json5 | 84 +++ .../main/resources/base/element/color.json | 60 ++ .../main/resources/base/element/string.json | 156 +++++ .../src/main/resources/base/media/about.png | Bin 0 -> 7007 bytes .../src/main/resources/base/media/ic_back.png | Bin 0 -> 3355 bytes .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/base/media/lock.png | Bin 0 -> 3216 bytes .../src/main/resources/base/media/wifi.png | Bin 0 -> 7542 bytes .../resources/base/profile/main_pages.json | 10 + .../main/resources/en_US/element/string.json | 232 ++++++++ .../main/resources/zh_CN/element/string.json | 232 ++++++++ .../Wlan/entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../Wlan/entry/src/ohosTest/module.json5 | 27 + .../Wlan/entry/src/test/List.test.ets | 20 + .../Wlan/entry/src/test/LocalUnit.test.ets | 48 ++ .../Wlan/hvigor/hvigor-config.json5 | 5 + ConnectivityKit/Wlan/hvigorfile.ts | 18 + ConnectivityKit/Wlan/oh-package.json5 | 27 + ConnectivityKit/Wlan/ohosTest.md | 10 + .../Wlan/screenshots/GET_WIFI_PEERS_MAC.png | Bin 0 -> 87638 bytes .../Wlan/screenshots/connect_wifi.png | Bin 0 -> 61887 bytes .../Wlan/screenshots/creatgroup.png | Bin 0 -> 47902 bytes ConnectivityKit/Wlan/screenshots/main.png | Bin 0 -> 34475 bytes .../Wlan/screenshots/p2pconnect.png | Bin 0 -> 23531 bytes ConnectivityKit/Wlan/screenshots/p2ptest.png | Bin 0 -> 26106 bytes .../Wlan/screenshots/wifi_list.png | Bin 0 -> 99321 bytes bluetoothSample/.gitignore | 12 + bluetoothSample/AppScope/app.json5 | 25 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes bluetoothSample/README.md | 153 +++++ bluetoothSample/build-profile.json5 | 57 ++ bluetoothSample/code-linter.json5 | 35 ++ bluetoothSample/entry/.gitignore | 6 + bluetoothSample/entry/build-profile.json5 | 43 ++ bluetoothSample/entry/hvigorfile.ts | 6 + bluetoothSample/entry/obfuscation-rules.txt | 23 + bluetoothSample/entry/oh-package.json5 | 25 + .../bluetoothService/BluetoothAdvertising.ets | 184 ++++++ .../ets/bluetoothService/BluetoothScan.ets | 295 ++++++++++ .../ets/bluetoothService/BluetoothSwitch.ets | 95 ++++ .../bluetoothService/GattClientManager.ets | 405 +++++++++++++ .../bluetoothService/GattServerManager.ets | 297 ++++++++++ .../src/main/ets/common/AdvertisingDialog.ets | 159 ++++++ .../entry/src/main/ets/common/ScanData.ets | 76 +++ .../entry/src/main/ets/common/ScanDialog.ets | 120 ++++ .../entry/src/main/ets/common/ToastReport.ets | 30 + .../main/ets/entryability/EntryAbility.ets | 83 +++ .../entrybackupability/EntryBackupAbility.ets | 27 + .../entry/src/main/ets/pages/Index.ets | 532 ++++++++++++++++++ bluetoothSample/entry/src/main/module.json5 | 83 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 119 ++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 + .../entry/src/ohosTest/module.json5 | 27 + bluetoothSample/entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ bluetoothSample/hvigor/hvigor-config.json5 | 37 ++ bluetoothSample/hvigorfile.ts | 6 + bluetoothSample/oh-package.json5 | 25 + bluetoothSample/ohosTest.md | 32 ++ bluetoothSample/screenshots/ADVERISER.jpeg | Bin 0 -> 71541 bytes bluetoothSample/screenshots/BONDED.jpeg | Bin 0 -> 60109 bytes bluetoothSample/screenshots/SCAN.jpeg | Bin 0 -> 45847 bytes bluetoothSample/screenshots/SWITCH.jpeg | Bin 0 -> 41389 bytes 290 files changed, 10528 insertions(+) create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/.gitignore create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/AppScope/app.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/element/string.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/media/app_icon.png create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/README.md create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/build-profile.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/code-linter.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/.gitignore create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/build-profile.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/hvigorfile.ts create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/obfuscation-rules.txt create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/oh-package.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/common/ToastReport.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/module.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/dark/element/color.json create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/List.test.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/hvigor/hvigor-config.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/hvigorfile.ts create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/oh-package.json5 create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/ohosTest.md create mode 100644 ConnectivityKit/Bluetooth/SerialCommunication/screenshots/serialCommuniaction.jpeg create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/.gitignore create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/AppScope/app.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/AppScope/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/AppScope/resources/base/media/app_icon.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/README.md create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/build-profile.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/code-linter.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/.gitignore create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/build-profile.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/obfuscation-rules.txt create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/oh-package.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/module.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/dark/element/color.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/List.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/.gitignore create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/build-profile.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/obfuscation-rules.txt create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/oh-package.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1ability/Entry1Ability.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/module.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/List.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigor/hvigor-config.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/oh-package.json5 create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/ohosTest.md create mode 100644 ConnectivityKit/NFC/HCECardSimulationDevelopment/screenshots/image.jpeg create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/.gitignore create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/AppScope/app.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/media/app_icon.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/README.md create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/build-profile.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/code-linter.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/.gitignore create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/build-profile.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/obfuscation-rules.txt create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/oh-package.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/module.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/dark/element/color.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/List.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/.gitignore create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/build-profile.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/obfuscation-rules.txt create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/oh-package.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/module.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/List.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/hvigor/hvigor-config.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/oh-package.json5 create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/ohosTest.md create mode 100644 ConnectivityKit/NFC/NFCReadAndWrite/screenshots/image.jpeg create mode 100644 ConnectivityKit/NFC/SecureElement/.gitignore create mode 100644 ConnectivityKit/NFC/SecureElement/AppScope/app.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/AppScope/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/SecureElement/AppScope/resources/base/media/app_icon.png create mode 100644 ConnectivityKit/NFC/SecureElement/README.md create mode 100644 ConnectivityKit/NFC/SecureElement/build-profile.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/code-linter.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/.gitignore create mode 100644 ConnectivityKit/NFC/SecureElement/entry/build-profile.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/SecureElement/entry/obfuscation-rules.txt create mode 100644 ConnectivityKit/NFC/SecureElement/entry/oh-package.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/module.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/background.png create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/foreground.png create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/layered_image.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/startIcon.png create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/main/resources/dark/element/color.json create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/test/List.test.ets create mode 100644 ConnectivityKit/NFC/SecureElement/entry/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/NFC/SecureElement/hvigor/hvigor-config.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/hvigorfile.ts create mode 100644 ConnectivityKit/NFC/SecureElement/oh-package.json5 create mode 100644 ConnectivityKit/NFC/SecureElement/ohosTest.md create mode 100644 ConnectivityKit/NFC/SecureElement/screenshots/image.jpeg create mode 100644 ConnectivityKit/Wlan/.gitignore create mode 100644 ConnectivityKit/Wlan/AppScope/app.json5 create mode 100644 ConnectivityKit/Wlan/AppScope/resources/base/element/string.json create mode 100644 ConnectivityKit/Wlan/AppScope/resources/base/media/app_icon.png create mode 100644 ConnectivityKit/Wlan/README_zh.md create mode 100644 ConnectivityKit/Wlan/build-profile.json5 create mode 100644 ConnectivityKit/Wlan/code-linter.json5 create mode 100644 ConnectivityKit/Wlan/entry/.gitignore create mode 100644 ConnectivityKit/Wlan/entry/build-profile.json5 create mode 100644 ConnectivityKit/Wlan/entry/hvigorfile.ts create mode 100644 ConnectivityKit/Wlan/entry/obfuscation-rules.txt create mode 100644 ConnectivityKit/Wlan/entry/oh-package.json5 create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/component/P2pView.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/component/TitleBar.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/component/WifiView.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/model/Logger.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableP2p.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableWifi.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/Index.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pSetting.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pTest.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/ets/pages/WifiConnect.ets create mode 100644 ConnectivityKit/Wlan/entry/src/main/module.json5 create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/element/color.json create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/element/string.json create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/media/about.png create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/media/ic_back.png create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/media/icon.png create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/media/lock.png create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/media/wifi.png create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/en_US/element/string.json create mode 100644 ConnectivityKit/Wlan/entry/src/main/resources/zh_CN/element/string.json create mode 100644 ConnectivityKit/Wlan/entry/src/mock/mock-config.json5 create mode 100644 ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ConnectivityKit/Wlan/entry/src/ohosTest/module.json5 create mode 100644 ConnectivityKit/Wlan/entry/src/test/List.test.ets create mode 100644 ConnectivityKit/Wlan/entry/src/test/LocalUnit.test.ets create mode 100644 ConnectivityKit/Wlan/hvigor/hvigor-config.json5 create mode 100644 ConnectivityKit/Wlan/hvigorfile.ts create mode 100644 ConnectivityKit/Wlan/oh-package.json5 create mode 100644 ConnectivityKit/Wlan/ohosTest.md create mode 100644 ConnectivityKit/Wlan/screenshots/GET_WIFI_PEERS_MAC.png create mode 100644 ConnectivityKit/Wlan/screenshots/connect_wifi.png create mode 100644 ConnectivityKit/Wlan/screenshots/creatgroup.png create mode 100644 ConnectivityKit/Wlan/screenshots/main.png create mode 100644 ConnectivityKit/Wlan/screenshots/p2pconnect.png create mode 100644 ConnectivityKit/Wlan/screenshots/p2ptest.png create mode 100644 ConnectivityKit/Wlan/screenshots/wifi_list.png create mode 100644 bluetoothSample/.gitignore create mode 100644 bluetoothSample/AppScope/app.json5 create mode 100644 bluetoothSample/AppScope/resources/base/element/string.json create mode 100644 bluetoothSample/AppScope/resources/base/media/app_icon.png create mode 100644 bluetoothSample/README.md create mode 100644 bluetoothSample/build-profile.json5 create mode 100644 bluetoothSample/code-linter.json5 create mode 100644 bluetoothSample/entry/.gitignore create mode 100644 bluetoothSample/entry/build-profile.json5 create mode 100644 bluetoothSample/entry/hvigorfile.ts create mode 100644 bluetoothSample/entry/obfuscation-rules.txt create mode 100644 bluetoothSample/entry/oh-package.json5 create mode 100644 bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothAdvertising.ets create mode 100644 bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothScan.ets create mode 100644 bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothSwitch.ets create mode 100644 bluetoothSample/entry/src/main/ets/bluetoothService/GattClientManager.ets create mode 100644 bluetoothSample/entry/src/main/ets/bluetoothService/GattServerManager.ets create mode 100644 bluetoothSample/entry/src/main/ets/common/AdvertisingDialog.ets create mode 100644 bluetoothSample/entry/src/main/ets/common/ScanData.ets create mode 100644 bluetoothSample/entry/src/main/ets/common/ScanDialog.ets create mode 100644 bluetoothSample/entry/src/main/ets/common/ToastReport.ets create mode 100644 bluetoothSample/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 bluetoothSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 bluetoothSample/entry/src/main/ets/pages/Index.ets create mode 100644 bluetoothSample/entry/src/main/module.json5 create mode 100644 bluetoothSample/entry/src/main/resources/base/element/color.json create mode 100644 bluetoothSample/entry/src/main/resources/base/element/string.json create mode 100644 bluetoothSample/entry/src/main/resources/base/media/background.png create mode 100644 bluetoothSample/entry/src/main/resources/base/media/foreground.png create mode 100644 bluetoothSample/entry/src/main/resources/base/media/layered_image.json create mode 100644 bluetoothSample/entry/src/main/resources/base/media/startIcon.png create mode 100644 bluetoothSample/entry/src/main/resources/base/profile/backup_config.json create mode 100644 bluetoothSample/entry/src/main/resources/base/profile/main_pages.json create mode 100644 bluetoothSample/entry/src/main/resources/dark/element/color.json create mode 100644 bluetoothSample/entry/src/mock/mock-config.json5 create mode 100644 bluetoothSample/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 bluetoothSample/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 bluetoothSample/entry/src/ohosTest/module.json5 create mode 100644 bluetoothSample/entry/src/test/List.test.ets create mode 100644 bluetoothSample/entry/src/test/LocalUnit.test.ets create mode 100644 bluetoothSample/hvigor/hvigor-config.json5 create mode 100644 bluetoothSample/hvigorfile.ts create mode 100644 bluetoothSample/oh-package.json5 create mode 100644 bluetoothSample/ohosTest.md create mode 100644 bluetoothSample/screenshots/ADVERISER.jpeg create mode 100644 bluetoothSample/screenshots/BONDED.jpeg create mode 100644 bluetoothSample/screenshots/SCAN.jpeg create mode 100644 bluetoothSample/screenshots/SWITCH.jpeg diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/.gitignore b/ConnectivityKit/Bluetooth/SerialCommunication/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/app.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/app.json5 new file mode 100644 index 00000000..2f23a812 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "bundleName": "com.samples.serialcommunication", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/element/string.json b/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..f7c89bfc --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "SerialCommunication" + } + ] +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/media/app_icon.png b/ConnectivityKit/Bluetooth/SerialCommunication/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/README.md b/ConnectivityKit/Bluetooth/SerialCommunication/README.md new file mode 100644 index 00000000..8776066e --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/README.md @@ -0,0 +1,90 @@ +# 串行通信开发指导 + +### 介绍 + +本示例为开发指南中[蓝牙服务开发](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/Readme-CN.md)章节中**传输数据开发指导***示例代码的完整工程,该工程中展示的代码详细描述可查如下链接: + +[传输数据开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/spp-development-guide.md) + +### 效果预览 +|Serial Communication| +|-------| +| | + +### 使用说明 + +1. 启动应用,弹出申请蓝牙权限的弹窗,点击允许,打卡设备的蓝牙功能。 +2. 按照格式输入deviceId和uuid。 +3. 点击listenSocket创建服务器监听Socket。 +4. 点击ServerConnect,socket等待客户端连接,连接成功返回clientId,弹出弹窗提示。 +5. 点击connectDevice,连接对端设备。 +6. 点击writeData,向客户端写入数据。 +7. 点击subscribeEvent,订阅读请求事件。 +8. 点击subscribeEvent,取消订阅读请求事件。 +9. 点击closeServer,关闭服务。 +10. 单击closeClient,关闭客户端。 + +### 工程目录 +``` +entry/src/main/ets/ +|---entryability +| |---EntryAbility.ets +|---entrybackupability +| |---EntryBackupAbility.ets +|---pages +| |---Index.ets // 应用主页面 +``` + +### 具体实现 + +#### 服务端向客户端写入数据 + +1. import需要的socket模块。 +2. 需要SystemCapability.Communication.Bluetooth.Core系统能力。 +3. 创开启设备蓝牙。 +4. 创建服务端socket,返回serverId。 +5. 服务端等待客户端连接,返回clientId。 +6. 服务端向客户端写入数据。 +7. (可选)服务端订阅客户端写入的数据。 +8. 注销服务端socket。 +9. 注销客户端socket。 +10. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md). + +#### 通过socket连接对端设备 + +1. import需要的socket模块。 +2. 需要SystemCapability.Communication.Bluetooth.Core系统能力。 +3. 开启设备蓝牙。 +4. 开启ble扫描,获取对端设备mac地址。 +5. 连接对端设备。 +6. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md). + +### 相关权限 + +[ohos.permission.ACCESS_BLUETOOTH](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all-user.md#ohospermissionaccess_bluetooth) + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo ConnectivityKit/Bluetooth/SerialCommunication/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/build-profile.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/code-linter.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/.gitignore b/ConnectivityKit/Bluetooth/SerialCommunication/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/build-profile.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/hvigorfile.ts b/ConnectivityKit/Bluetooth/SerialCommunication/entry/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/obfuscation-rules.txt b/ConnectivityKit/Bluetooth/SerialCommunication/entry/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/oh-package.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/common/ToastReport.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/common/ToastReport.ets new file mode 100644 index 00000000..80c12c4a --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/common/ToastReport.ets @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ +import { promptAction } from '@kit.ArkUI' + +export class ToastReport { + public showResult(message: string) { + promptAction.showToast({ + message: message, + duration: 2000, + showMode: promptAction.ToastShowMode.DEFAULT, + bottom: 80 + }) + } +} + +let toastReport = new ToastReport(); + +export default toastReport as ToastReport; \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..6c3ac9ef --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import hilog from '@ohos.hilog'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import abilityAccessCtrl, { PermissionRequestResult, Permissions } from '@ohos.abilityAccessCtrl'; +import { BusinessError } from '@ohos.base'; + +const permissions: Permissions[] = ['ohos.permission.ACCESS_BLUETOOTH']; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + let context: Context = this.context; + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 + + atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => { + let grantStatus: number[] = data.authResults; + let length: number = grantStatus.length; + for (let i = 0; i < length; i++) { + if (grantStatus[i] === 0) { + // 用户授权,可以继续访问目标操作 + } else { + // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 + return; + } + } + // 授权成功 + }).catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) + + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/pages/Index.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..540edc86 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { socket } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { ToastReport } from '../common/ToastReport'; +import util from '@ohos.util'; + +const TAG: string = 'SerialCommunication'; +let encoder = new util.TextEncoder(); + +@Entry +@Component +struct serialCommunication { + @State serverNumber: number = 0; + @State clientNumber: number = 1; + @State deviceId: string = ''; + @State uuid: string = '00001101-0000-1000-8000-00805f9b34fb'; + @State dataValue: string = ''; + private toastReport: ToastReport = new ToastReport(); + + build() { + Column({ space: 12 }) { + Text('serial communication') + .fontSize(45) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Top }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + + Text($r('app.string.deviceId_style')) + Row() { + Text('deviceId: ') + + TextInput().onChange((value: string) => { + this.deviceId = value; + }).height('40vp').width('70%') + }.width('80%') + + Text($r('app.string.uuid_style')) + Row() { + Text('uuid: ') + + TextInput().onChange((value: string) => { + this.uuid = value; + }).height('40vp').width('70%') + }.width('80%') + + Row() { + Text('dataValue: ') + + TextInput().onChange((value: string) => { + this.dataValue = value; + }).height('40vp').width('70%') + }.width('80%') + + // [Start server_write_client] + Button('listenSocket') + .width('50%') + .id('listenSocket') + .backgroundColor('#8CE072') + .onClick(() => { + let serverNumber = -1; + let sppOption: socket.SppOptions = { + uuid: this.uuid, + secure: true, + type: 0 + }; + try { + socket.sppListen('server1', sppOption, (code: BusinessError | null, serverSocketID: number) => { + if (code != null) { + console.error(TAG, 'sppListen error, code is ' + (code as BusinessError).code); + this.toastReport.showResult('sppListen error, code is ' + (code as BusinessError).code); + return; + } else { + serverNumber = serverSocketID; + this.serverNumber = serverNumber; + console.info(TAG, 'sppListen success, serverNumber = ' + serverNumber); + this.toastReport.showResult('sppListen success, serverNumber = ' + serverNumber) + } + }); + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + + Button('ServerConnect') + .width('50%') + .id('ServerConnect') + .backgroundColor('#8CE072') + .onClick(() => { + let clientNumber = -1; + try { + + socket.sppAccept(this.serverNumber, (code: BusinessError | null, clientSocketID: number) => { + if (code != null) { + console.error(TAG, 'sppAccept error, code is ' + (code as BusinessError).code); + this.toastReport.showResult('sppAccept error, code is ' + (code as BusinessError).code); + return; + } else { + clientNumber = clientSocketID; + this.clientNumber = clientNumber + console.info(TAG, 'accept the client success'); + this.toastReport.showResult('accept the client success'); + } + }) + console.info(TAG, 'waiting for client connection'); + this.toastReport.showResult('waiting for client connection'); + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + + } + }) + + // [Start socket_spp_connect] + Button('connectDevice') + .width('50%') + .backgroundColor('#8CE072') + .onClick(() => { + try { + socket.sppConnect(this.deviceId, { + uuid: this.uuid, + secure: true, + type: 0 + }, (code: BusinessError | null, socketID: number) => { + if (code != null) { + console.error(TAG, 'sppConnect error, code = ' + (code as BusinessError).code); + this.toastReport.showResult('sppConnect error, code = ' + (code as BusinessError).code); + return; + } + console.info(TAG, 'sppConnect success, socketId = ' + socketID); + this.toastReport.showResult('sppConnect success, socketId = ' + socketID); + }) + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + // [End socket_spp_connect] + + Button('writeData') + .width('50%') + .id('writeData') + .backgroundColor('#8CE072') + .onClick(() => { + let array = new Uint8Array(this.dataValue.length); + encoder.encodeIntoUint8Array(this.dataValue, array); + + try { + socket.sppWrite(this.clientNumber, array.buffer); + console.info(TAG, 'sppWrite success'); + this.toastReport.showResult('sppWrite success'); + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + + Button('subscribeEvent') + .width('50%') + .id('subscribeEvent') + .backgroundColor('#8CE072') + .onClick(() => { + try { + socket.on('sppRead', this.clientNumber, (dataBuffer: ArrayBuffer) => { + const data = new Uint8Array(dataBuffer); + if (data != null) { + console.info(TAG, 'sppRead success, data = ' + JSON.stringify(data)); + this.toastReport.showResult('sppRead success, data = ' + JSON.stringify(data)); + } else { + console.error(TAG, 'sppRead error, data is null'); + this.toastReport.showResult('sppRead error, data is null'); + } + }) + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + + Button('unsubscribeEvent') + .width('50%') + .id('unsubscribeEvent') + .backgroundColor('#8CE072') + .onClick(() => { + try { + socket.off('sppRead', this.clientNumber, (dataBuffer: ArrayBuffer) => { + const data = new Uint8Array(dataBuffer); + if (data != null) { + console.info(TAG, 'offSppRead success, data = ' + JSON.stringify(data)); + this.toastReport.showResult('offSppRead success, data = ' + JSON.stringify(data)); + } else { + console.error(TAG, 'offSppRead error, data is null'); + this.toastReport.showResult('offSppRead error, data is null'); + } + }) + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + + Button('closeServer') + .width('50%') + .id('closeServer') + .backgroundColor('#8CE072') + .onClick(() => { + try { + socket.sppCloseServerSocket(this.serverNumber); + console.info(TAG, 'sppCloseServerSocket success'); + this.toastReport.showResult('sppCloseServerSocket success'); + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + this.toastReport.showResult('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + }) + + Button('closeClient') + .width('50%') + .id('closeClient') + .backgroundColor('#8CE072') + .onClick(() => { + socket.sppCloseClientSocket(this.clientNumber); + console.info(TAG, 'sppCloseClientSocket success'); + this.toastReport.showResult('sppCloseClientSocket success'); + }) + // [End server_write_client] + } + .width('100%') + .height('100%') + .backgroundColor('#E6F7FF') + } +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/module.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/module.json5 new file mode 100644 index 00000000..a4d001e6 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/module.json5 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.ACCESS_BLUETOOTH", + "reason": "$string:ACCESS_BLUETOOTH", + "usedScene": { + "when": "always" + } + }], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/color.json b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/string.json b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..b18a02c7 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "serial communication" + }, + { + "name": "ACCESS_BLUETOOTH", + "value": "user" + }, + { + "name": "deviceId_style", + "value": "deviceId格式为:11:22:33:44:55::66 ':'不可省略" + }, + { + "name": "uuid_style", + "value": "uuid格式为:1111-2222-33333... '-'不可省略" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/background.png b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/foreground.png b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/dark/element/color.json b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/mock/mock-config.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/module.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/List.test.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/LocalUnit.test.ets b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/hvigor/hvigor-config.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..1e473e42 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/hvigorfile.ts b/ConnectivityKit/Bluetooth/SerialCommunication/hvigorfile.ts new file mode 100644 index 00000000..f3cb9f1a --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/oh-package.json5 b/ConnectivityKit/Bluetooth/SerialCommunication/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/ohosTest.md b/ConnectivityKit/Bluetooth/SerialCommunication/ohosTest.md new file mode 100644 index 00000000..732d974b --- /dev/null +++ b/ConnectivityKit/Bluetooth/SerialCommunication/ohosTest.md @@ -0,0 +1,15 @@ +# 串行通信开发指导 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------- | ------------ | ----------------- | ------------------------|--------- | -------- | +| 应用正常启动 | 设备支持蓝牙 | 启动应用 | 进入应用界面,弹出申请蓝牙权限的弹窗 |否 | Pass | +| 创建服务器监听 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 点击listenSocket | 弹出对应弹窗 |否 | Pass | +| socket等待客户端连接 | 设备支持蓝牙,蓝牙权限申请成功 | 点击ServerConnect | 弹出对应弹窗 |否 | Pass | +| 连接对端设备 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 点击connectDevice | 弹出对应弹窗 |否 |Pass | +| 向客户端写入数据 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 点击writeData | 弹出对应弹窗 |否 | Pass | +| 订阅读请求事件 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 点击subscribeEvent | 弹出对应弹窗 |否 | Pass | +| 取消订阅读请求事件 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 点击unsubscribeEvent | 弹出对应弹窗 |否 | Pass | +| 关闭服务 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已扫描到设备 | 点击closeServer | 弹出对应弹窗 |否 | Pass | +| 关闭客户端 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 单击closeClient | 弹出对应弹窗 |否 | Pass | diff --git a/ConnectivityKit/Bluetooth/SerialCommunication/screenshots/serialCommuniaction.jpeg b/ConnectivityKit/Bluetooth/SerialCommunication/screenshots/serialCommuniaction.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2ae3408d74e0770e7786e632aad605719c3f29a9 GIT binary patch literal 60378 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 Z$$N&)9*YHQQH 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/README.md b/ConnectivityKit/NFC/HCECardSimulationDevelopment/README.md new file mode 100644 index 00000000..7b8397ae --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/README.md @@ -0,0 +1,84 @@ +# HCE卡模拟开发指南 + +### 介绍 + +本示例通过使用[HCE卡模拟开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-hce-guide.md)中各场景的开发示例,展示在工程中,帮助开发者更好地理解HEC功能并合理使用。该工程中展示的代码详细描述可查如下链接: +[HCE卡模拟开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-hce-guide.md) + +### 效果预览 +|启动界面| +|-------| +| | + +### 使用说明 + +1.启动应用 +2.应用停留在启动界面 +3.输出预期日志,功能启动 + +### 工程目录 +``` +entry/src/main/ets/ # HCE应用前台刷卡 +|---entryability +| |---EntryAbility.ets +|---entrybackupability +| |---EntryBackupAbility.ets +|---pages +| |---Index.ets +entry1/src/main/ets/ # HCE应用后台刷卡 +|---entry1ability +| |---Entry1Ability.ets +|---entry1backupability +| |---Entry1BackupAbility.ets +|---pages +| |---Index.ets +``` + +### 具体实现 + +#### HCE应用前台刷卡 +1. 在module.json5文件中声明NFC卡模拟权限,以及声明HCE特定的action。 +2. import需要的NFC卡模拟模块和其他相关的模块。 +3. 判断设备是否支持NFC能力和HCE能力。 +4. 使能前台HCE应用程序优先处理NFC刷卡功能。 +5. 订阅HCE APDU数据的接收。 +6. 完成HCE刷卡APDU数据的接收和发送。 +7. 退出应用程序NFC刷卡页面时,退出前台优先功能。 + +#### HCE应用后台刷卡 +1. 在module.json5文件中声明NFC卡模拟权限,声明HCE特定的action,声明应用能够处理的AID。 +2. import需要的NFC卡模拟模块和其他相关的模块。 +3. 判断设备是否支持NFC能力和HCE能力。 +4. 订阅HCE APDU数据的接收。 +5. 完成HCE刷卡APDU数据的接收和发送。 +6. 退出应用程序时,退出订阅功能。 + +### 相关权限 + +[ohos.permission.NFC_CARD_EMULATION](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionnfc_card_emulation) + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo ConnectivityKit/NFC/HCECardSimulationDevelopment/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +``` \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/build-profile.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/build-profile.json5 new file mode 100644 index 00000000..180f0c00 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/build-profile.json5 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + { + "name": "entry1", + "srcPath": "./entry1", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/code-linter.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/.gitignore b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/build-profile.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/hvigorfile.ts b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/obfuscation-rules.txt b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/oh-package.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..eeb5607a --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start front_hce_swipe_ets] +import { cardEmulation } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { AsyncCallback } from '@kit.BasicServicesKit'; +import { AbilityConstant, UIAbility, Want, bundleManager } from '@kit.AbilityKit'; + +let hceElementName: bundleManager.ElementName; +let hceService: cardEmulation.HceService; + +const hceCommandCb : AsyncCallback = (error : BusinessError, hceCommand : number[]) => { + if (!error) { + if (hceCommand == null || hceCommand == undefined) { + hilog.error(0x0000, 'testTag', 'hceCommandCb has invalid hceCommand.'); + return; + } + // 检查命令,并相应作出响应 + hilog.info(0x0000, 'testTag', 'hceCommand = %{public}s', JSON.stringify(hceCommand)); + let responseData = [0x90, 0x00]; // 根据接收到的不同命令更改响应 + hceService.transmit(responseData).then(() => { + hilog.info(0x0000, 'testTag', 'hceService transmit Promise success.'); + }).catch((err: BusinessError) => { + hilog.error(0x0000, 'testTag', 'hceService transmit Promise error = %{public}s', JSON.stringify(err)); + }); + } else { + hilog.error(0x0000, 'testTag', 'hceCommandCb error %{public}s', JSON.stringify(error)); + } +} + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + + // 判断设备是否支持NFC能力和HCE能力 + if (!canIUse("SystemCapability.Communication.NFC.Core")) { + hilog.error(0x0000, 'testTag', 'nfc unavailable.'); + return; + } + if (!cardEmulation.hasHceCapability()) { + hilog.error(0x0000, 'testTag', 'hce unavailable.'); + return; + } + + hceElementName = { + bundleName: want.bundleName ?? '', + abilityName: want.abilityName ?? '', + moduleName: want.moduleName, + } + hceService = new cardEmulation.HceService(); + } + + onForeground() { + // 当前Ability已进入前台状态 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + if (hceElementName != undefined) { + try { + // 调用接口使能前台HCE应用程序优先处理NFC刷卡功能 + let aidList = ["A0000000031010", "A0000000031011"]; + hceService.start(hceElementName, aidList); + + // 订阅HCE APDU数据的接收 + hceService.on('hceCmd', hceCommandCb); + } catch (error) { + hilog.error(0x0000, 'testTag', 'hceService.start error = %{public}s', JSON.stringify(error)); + } + } + } + + onBackground() { + // 当前Ability已回到后台状态 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + // 退出应用程序NFC标签页面时,调用tag模块退出前台优先功能 + if (hceElementName != undefined) { + try { + hceService.stop(hceElementName); + } catch (error) { + hilog.error(0x0000, 'testTag', 'hceService.stop error = %{public}s', JSON.stringify(error)); + } + } + } +} +// [End front_hce_swipe_ets] \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..29feaca7 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/pages/Index.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..cbe08e2b --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'HCE application front-end card swiping'; + + build() { + RelativeContainer() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/module.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/module.json5 new file mode 100644 index 00000000..3a34e46f --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/module.json5 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + // [Start front_hce_swipe] + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home", + + // 添加nfc卡模拟操作以过滤此应用程序。 + "ohos.nfc.cardemulation.action.HOST_APDU_SERVICE" + ] + } + ] + } + ], + "requestPermissions": [ + { + // 添加nfc卡模拟的权限。 + "name": "ohos.permission.NFC_CARD_EMULATION", + "reason": "$string:app_name" + } + ], + // [End front_hce_swipe] + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/color.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/string.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..2b5be9c4 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "HCECardSimulationDevelopment" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/background.png b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/foreground.png b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/dark/element/color.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/mock/mock-config.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/module.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/List.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/LocalUnit.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/.gitignore b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/build-profile.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/hvigorfile.ts b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/obfuscation-rules.txt b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/oh-package.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/oh-package.json5 new file mode 100644 index 00000000..c4e87688 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry1", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1ability/Entry1Ability.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1ability/Entry1Ability.ets new file mode 100644 index 00000000..362517f8 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1ability/Entry1Ability.ets @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start back_hce_swipe_ets] +import { cardEmulation } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { AsyncCallback } from '@kit.BasicServicesKit'; +import { AbilityConstant, UIAbility, Want, bundleManager } from '@kit.AbilityKit'; + +let hceElementName : bundleManager.ElementName; +let hceService: cardEmulation.HceService; + +const hceCommandCb : AsyncCallback = (error : BusinessError, hceCommand : number[]) => { + if (!error) { + if (hceCommand == null || hceCommand == undefined) { + hilog.error(0x0000, 'testTag', 'hceCommandCb has invalid hceCommand.'); + return; + } + + // 检查命令,然后发送响应。 + hilog.info(0x0000, 'testTag', 'hceCommand = %{public}s', JSON.stringify(hceCommand)); + let responseData = [0x90, 0x00]; // 根据接收到的不同命令更改响应。 + hceService.transmit(responseData).then(() => { + hilog.info(0x0000, 'testTag', 'hceService transmit Promise success.'); + }).catch((err: BusinessError) => { + hilog.error(0x0000, 'testTag', 'hceService transmit Promise error = %{public}s', JSON.stringify(err)); + }); + } else { + hilog.error(0x0000, 'testTag', 'hceCommandCb error %{public}s', JSON.stringify(error)); + } +} + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + + // 判断设备是否支持NFC能力和HCE能力 + if (!canIUse('SystemCapability.Communication.NFC.Core')) { + hilog.error(0x0000, 'testTag', 'nfc unavailable.'); + return; + } + if (!cardEmulation.hasHceCapability()) { + hilog.error(0x0000, 'testTag', 'hce unavailable.'); + return; + } + + hceElementName = { + bundleName: want.bundleName ?? '', + abilityName: want.abilityName ?? '', + moduleName: want.moduleName, + } + hceService = new cardEmulation.HceService(); + hceService.on('hceCmd', hceCommandCb); + } + + onForeground() { + // 当前Ability已进入前台状态 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onDestroy() { + // Ability已被销毁 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + // 退出应用程序NFC标签页面时,调用tag模块退出前台优先功能 + if (hceElementName != undefined) { + try { + hceService.stop(hceElementName); + } catch (error) { + hilog.error(0x0000, 'testTag', 'hceService.stop error = %{public}s', JSON.stringify(error)); + } + } + } +} +// [End back_hce_swipe_ets] \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets new file mode 100644 index 00000000..91e3598d --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class Entry1BackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/pages/Index.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..a524a899 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/ets/pages/Index.ets @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + RelativeContainer() { + Text(this.message) + .id('HelloWorld') + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/module.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/module.json5 new file mode 100644 index 00000000..ce1fb387 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/module.json5 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry1", + "type": "feature", + "description": "$string:module_desc", + "mainElement": "Entry1Ability", + "deviceTypes": [ + "default" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + // [Start back_hce_swipe] + "abilities": [ + { + "name": "Entry1Ability", + "srcEntry": "./ets/entry1ability/Entry1Ability.ets", + "description": "$string:Entry1Ability_desc", + "icon": "$media:layered_image", + "label": "$string:Entry1Ability_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home", + + // 添加nfc卡模拟操作以过滤此应用程序。 + "ohos.nfc.cardemulation.action.HOST_APDU_SERVICE" + ] + } + ], + "metadata": [ + { + "name": "payment-aid", + "value": "A0000000031010" // 将其更改为正确 + }, + { + "name": "other-aid", + "value": "A0000000031011" // 将其更改为正确 + } + ] + } + ], + "requestPermissions": [ + { + // 添加nfc卡模拟的权限。 + "name": "ohos.permission.NFC_CARD_EMULATION", + "reason": "$string:app_name" + } + ], + // [End back_hce_swipe] + "extensionAbilities": [ + { + "name": "Entry1BackupAbility", + "srcEntry": "./ets/entry1backupability/Entry1BackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/color.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/string.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/string.json new file mode 100644 index 00000000..bfacd4a9 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "Entry1Ability_desc", + "value": "description" + }, + { + "name": "Entry1Ability_label", + "value": "HCECardSimulationDevelopment1" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/background.png b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 zcmYIuc|6qL_rIk#Su&MMQlYU)cz{|$Qc0x~A^BEf( z`{n=HaSk>%wsfNM*uUkN^8dI{qxxW z*@b_`#>VlLWSG9 z0>QdPQ-&i_RCVdp2s$-u%S362^SHV0`EO6;@n(xK));G>#qwhPWrDXGk@OBMV}H!J za!48&`xhWJKj{_+f3ir<>Jg6Ax<&Xgn;)U7UJyAw{(u?zlf{oLsJTS-_o1?+lSg-j z8fcZj1*Ad(!X>WuuxM!H5t@V3*8vLL6`QnC!q!BwQjI{yk*;~@|3;B)`p$WYcDmnZ zt`R zr=oS6o-D$WZsYKh1PiOdhhX&YWGOzpc<6ITKzr^zi-#>z){t;yz3tu_a!>)(tTU9d zd}COuy~Tb}UIRNX@aVGJqEKUa)1#E-u}pl!sY)z4cu+Hu9==`6=0Ob#x-%q}t@jBp zmoiZDcfF1WL{PB0ZO**8yZ+%;LF6K*JDUoHrJkl0Wzak+Y%E( znUmuA^p@Jv6{%Y;MsiZ4O?#ID2b2ssEq6_KGL z8T%zdA3YhMnkBu19bNsa_$$_1^16jadx`0ZzPx`M%T>qZpYyNYOeDdmqLTNWpR5T% zOlRrW_xNCD+*3_WSxvt4P-@qQ9g_$aedDk-hcV~t>Oxw;UaAk1V?9m5<2k4%VrM$- z?{KH{)m_U~yJcBbX+vqVfq&4)Vf+FvAHd|s{V34=f#uJM!Tp?b32THmfzNn1unwY& zPNtaE{ZZ=OkZFh*xW2FT&fDF?64Q%l>dwdZ#Bg;^v;dAbU*QLEQG@_|ucNXFyx~H( z#h?kJKeI3jD^U~`e`*^zcm?PlIWj|tL_a8NC?HVl*gX%;5PW5Y%ZZ*G=jPn5#o+Sh zhnE>D@Wb!f*O>cZ0}ZT=HlEdoWVWk}5H1S;$vxe#Rv~;l5rJ=w--wPl621jCW}B|gxECKzT9 z3FKlD{=OfN5$J3?Ag0g4F5t8_D(RvO8W!*~?#q{Dhx(Sj=)^9ZlE|LyI?p1NXMWr| zGGbzFN^3)5?P^vfnD7XZo*8yf&O&>7XULUUvhJT@rHcF>PmjodH~u4RSmX4TH?v`IKg2cy7 z(T@e4&pPRHRczikEvwvO?jbblSVp z2qpyT+LHUFhHwcunP(^h)G#uA95vF`Gd&1k%F@wuCk3DnjNjw;b}*;dY{F5{7tNsg zLf4y|)RTV`PjQ^!NoWB3YA@S@Cw zUAr?mUcn7g)n!3J`D7*H`y{%TuT$wNY;))rP(y@kdFdPH#h|rjcW2#oRybxTchXlQ zwMW{bVcqRRc_2r^tI)Zav_+qLwdd|Bw=*pM!|pflbT%K&Eof^{6+|k{2_;HcrWd3? z#z;>@Y3dp#B^R5c9RhH8lT5MRr*;>xd<%C3sV2Y}>{On@a*oump`g#H<6V&DKeZ-?Zic$S$>ulEiZvJG8kHMeSzVE(R|E-<}cEG^n2E*Cp z-25-DQv_Mf+&WhT3r?23Phid$q`Z3HE($RgC{EJA0Yc1SP6(a(oZ4RU2L1~H6k0Q< zHY1Mj{)b(ll3Wr=HakbiEk13zYKN&f#9*}tMZiQ7h@Us+N(Jk`aWQHf)r!ObZAT>_STJuzjuO{qHMlTjN9^hPZ8sZBMl zl&MX}xk{d5VUEInRK9r^Tnx#HE2;hFoa7?NDufAxZV6Mj9B^NaAt4;oStAtWfVg8< zjQAfLPj#u>Xp*sALAi;M(f1>la|_-k(E*-1Sa_Vdt$KsCNAwAbm8CmvpDbwL$`Cx8 zkBC0&3#@q@7E3LVtGQcrGS=s-uh6FHuC)WTtU_@t5c_T~`Wv+F0Jd$a9s(?ucd&l{ zWThjQ*u4YqU6Wq{+^0sC%S;vXx~qO|+s%Am1m-N}zkd84>GT;5u}a1*p9&!g%3wk2 zl=rj+H9g>!z4_zdU1iItL}Zox?lwK^ykQ+_#Ym~p>s8CgcLQYV4wezL^K-_HzM$r! z1m$U&G13HqDckgHschNcoe73o=)$P$j46Y)SnaZK(U|F7d#{AGb%>@b+jX#5*Rf5x zq}@ejPTyyn&&@n|dDGl-o-=XF%6dndW+}@7JDd?6b}Mt-SX_GV^3{!3Yz5a~X@$Fw zyDIkaWq*rtn{8knumG6=yF(6lzQnq)&M@%8RzdC%{%-0Ey{v&0pp-aIPP$bTrF|=~!MvLftx2pd=0-86i#@A;;(b^r-TzBJn~W4d42|-V*)} zt}h95!TwDQ%xWD9TFS{BwGO@d9P>kia=+LQ@r>0>5VvEV8(&tEuw%+YP*Qm6KzZs9 z#qL6SPwl9DtPZ{0`)Vph`^ryNV|=I7r2Vf@LrX3<=$f6zv1^z*!<6j{f$|6Jw=%s2 zb)|d{?()1m_Xoab$B5r9#&taTI^E@0yTQ$UB1_f0nc<oQhFOi;b@!o=y6w&Tsrw|K5XXEJEA>@Eb?8hi( zlT-*bXZd6g*C+W9V6B5iF$2f(_-ek(ko^JW%$@}`#GJVV0S8A~FwzM(JdY)c1B&ls(qJ=bvy&S10cqD8@1Clbooq|3kmbD_she z@O#tu^ibgYfM#HD%WIF%%uf7+)sc&Dejs@WRQE+Q1jXlN2z>9dB;X9e>Y3a-&-A;T z>||D+o$j^$E>F`4y02DTELRMYH*biv(5+ed(cQq&82Gu z2~UNnOcNc&MwT3lD@S}nPJMsvOT%0L{`dN}DU&^Z#6?2^aE!5ulUV_Zct}2~K6R!_ z4ReuaX$@AP?M!XMpi&ZJwsY2up5F-xe0{ym`9#@pr%63v->d&@UoFthcC1`k$L=ze zYX1{xl49Q=z953h>NzyMc3UuH96t7)-k|lRw-P=T%Q`;dC7@r`uCOq8Eqi7gKC)~7 zb(*Q>H|T2(e>5DVf9nswM~C%V2G2 z#B|VOitZm{FlV>EydvsFF|Ue~ium0%0KOaFiMOLk(X}jHq@dI@*AM2G6XzCU zSpFR?#U4MPz~VZR>RA@a!CZu45#f<)^f#kJ+ULtRLJKzSj=cf+NxQ}Kw)Yme6wJz; zu3W=Jz<}rEm$g7sNy>yr-Z|OiI>qQ4m37~);`_~Xgr~N4wOAssk(HTh5er1XtFm+! zb`5FT&FoKA{ADaUP!Y#o^sGPb?mT2wBY9ZfQ}ujLk`C_dyTvT&)34sj!RXJcZ%lCzF?kE~i-xCSGh{ zy%iUR0+S_JP(#%W9!Npk=RL(8tFB7(up1ms-Q#8 z$-{dva97!EQB<5#@0KgW&2S|ddKN*<(?}37-=O@1bF668sG)3(D61=Ech&sJ;j|An zqu1a;`}bcMj;#tF3l~&Ue9ES7GRw~kIPKK&q&^No_3M#yjp?ygI;To&wcXbe%ju*z zpMI!gbi8@{AJVkgXR+py{dMSfko}H`^q^elZQ-5<2bG-K8tYq8Q@*4t)`Blvz!#v> zE;3kk_e^|Kew4?}eU;3n)q48yWgAm)d+F(;W(>jPB_glQLiH|IE=EDVFI*j_FBebS0vXyh5@x9LS?RNi7vXf?RckfXjvy^Pifki$9G zzwp&k7S+aNOI8%DUON~#xxv+a5rJDE+^6;@RcjnwKZ|%#%Ukq~@&vL#Pts;`f?jwYL)Y zDOROB^T8hlFfA@(=$bFYKWy{F^5$#{h*A1FG5GZZ1?>Y+!}UULap(oEekfHZCJkpC zppRS@+Uvrs>_Df!YT#HWpuaEwRq)V49)TgZ7Jf{A6@tpv&>tG)c9F&eZWo)(tDPDB z4Fkl6@ov*S4!gboeokhZ>My7@q%!Z93-zy>Y(_9axnH2W2Ie&#X2Z->o1A6ZoV(OgY z@PpdL`E%U}QN-vzdLCdkVX)Vp-z|CGg)^e06LvMfbj%1)ZdXNB>r>{Jk&ApwTkkLr z-2C5e31{3c{*xsm?)EItQ%pSW(%723B}AHgke#M{7KJW6TT*>9^+`FIe4;VHRwSF$ z9rBta7_>vwCuV;vFY=|NZ2KlX$A`EUk*phH=Pd~I8Kkr|v!j3sBAD^fPD!FoPpnHf zqP&jc&^s{jm0M&oBNXjUol2${7|G^u7UtOd2kxA0b?japS#xlwo_TaY+jh-`+$sfO zFLgfqb~kaemX{ErUn7}?_tb>g?G@UyT99HoY^;BG(5|gh>F3J!9J* zvrz6TP+;XdE$<41%Vony^Y}i*aCz@+4v^38p)5?Nhw`m%Cbg5Lpz%VOxaBnlA9P;N z9D=#{(>`$N_!?&CKf9eJGzIc>dhWes8XtpX`{gOhP;HMklZ8~@Yu~YT1bZZ{VwrAffDNiZ6Mh5vEzpq z=5A;0ff@>1MG@vbwRU!?7ZFD-SYng>JN(=>uwrkrl@4u6M^n6jl1shsk;DM`t#|F? z(H9W(@&~b(mmUR)30H=vAZdIrX%9iR7rMruZ_I4$Eq7YnBI4Z8T zj5;RTUu8?(ZsW>30%Hk#$^zfAtgZ&y!|p@5%e_4oe7)3{Y6c^x>zv=o_XPiF*wI1y zNe5L3p=L;8_D7-+5I+LfNgDYrOIUD_Iu_VJQD^=4v=Gd z_u%h$8{Lobyu6%VkeZI%T_vssgc#J4yD+&6pVkdLYl@3@NdcQbwl!J%4{RC80oF1z z`ksIXyrZT=Apq3kOR#m795+y}-8NizKBNESZCmBS#jqG`n4kCydp-4DZ^BF-zWD2# z1@F?p*^9m)EPrkd^E&cimk<1mN+iwSCVTHpqz^#`_Dj;-5xURqxK*!kp5asE##*=< zc{bFC-`m;q4VL3=| zKN6@)%XIu=yS*-K-9Bw`jN+-lWBttd77x>|g)~$UgPB_qH0h&bm}j3#sdLfV&xcR^ zQFk=d3;U8~YLqm@^61C zmaLbHw=dJ0oLP?>eyJ&=wgtZm!2mS9V!i~62x+n`%jyesf0bKruxRDH-)c2uF;&qT z4Z0drBbHg-G#ueH1vVaEJFTw$U))8mlUjFz?!PDqNpcIqZ%B6$Ju$CzrK@_na@?na5LpJODS}`)`8j7i#>C z0RNEb>nnQ8v$qXrgh)-(=VVRFwj4 zZKH}5T4rlZ$PiI2z3_*{`av5A0jPJY!Y*RQ?XbKPZmNdwp6ufAH4m~1%r{gYeOJBR zai+gl7I{Z35P0Q7EoGmkkLGHe5rR^{bdxWyMiC1~&kI@I-bYJrdGv{=O7!p&kKxN3 ztOoyzWj_asX!zA>`fa~&>#$n@3{c@VVcl3(1m5=dCI-~1uR+4s;@87ozKCU|Z(EhE z7~Csbr}e|&-zPK~*W}WcKqB+rv-rNRzvqfY299AvP zA5u^Rs->xN6b@MzP_f(M+}|~RxUHs#zO%D772V@B$F;5<%Jx|0#Oh_?#%yrHfV>}I z!Lfe59_VCjJ!pEQOWyUr;CdyL z-RzERMQjU_j%}N!Av?++44uVMc#r_KCTZxxSZL>4`xbm)#)*?4I#nFDOZLv10s^{6 zAyo6zfA)w8n^jk|KBb4J;|Gbx9)grFflY-Nyl_v8_@}gizDNn(Y2l6TqM&aN(+9Qg zTBo#J4N$h%f!;K&2NqBlT~J6aqHGy6HI`Xn*)UV$w2>iLk~P=l)VTdah9Ab`z%}dg zxIvG$xPG=H0NRw|6_-~Bzh+BPv9&C;z)58?`7t~$HupdHcF!F5dirrGrn3d}wAHr! z^@&!aoW@3sENjl#i@LzRYOZ4b#v|Jk_Mo$-VYlgbE3LQVKniS1mH)uO`90X{bc~{1 z*%Wm4$E_2-W__`4`mDu;Ld(wv8e147=mMu!AKSC=mw*4n^8S>~fm9mJgf4~8t(bb> z^_3WSK>aAZ6lK3OZ#_7g@)?z1#pZ zoR2>rm%_enbG!+Y34#Jmal)V9@-s8li+_Le^~z8cxHeF5vR%p~{93TJv%YmeTB|@^ zc=}q4Gofbju_Z#%Iv9|44|pawNvh^mFGBA_KZ5C^rx-l~Ytqf4;%SxezE8%O)aJh& z>2it7b`epB=P&=s^y`mJMjMq&9Jvpdhn}6sFHk)q%d zE_RV6%-}?H)w7yAW9TA)&7XbMyu=N}tRA-JTl2iG6u8;@?;!BW;ykyof{i+alo zJu1v~ITow6y^)5crWdi)&;yNs0d)3*vN+aSszJ%`1`(%9X-Hi}3gH#iRg@{Svm?cP zM}T*)U{A8FTQ7b@oc$7vr_EeTIj6N%Cr}VI5VcfZk+@1UFc>zpJkm3S%cb<~=~`BV ztbyjzOPJuDkTJJ!hL^nLk}*=2EXd?->%+3NWrq&5a$%1G{r2~cLQT2W>8!pd$9G;K ziQIDUErsVk$XQPRm)pDFYVuLFlx&eiFlnoixT|jvAoB)ryM_}euaYFXrdKLqi|4AL zG`rnvWi4Qa>Wvo=;Y+t@ecMjl{#37K;?VkYdoSbT(2m}8!k~RT{yv0l8cPp{jtiXr z$7KAJAvM_g4ak}0Yo*q!sO%PN_CK)Pv>lC7xoB~vG1hs?Wv>^kpOBU0WV@$|oL!cE z1FV3%^4Pjr5Fqc)|Sv+upxx8BCM z9*cYQYi3jY(^pUL8`I|3rHf+5>sq98e!hkPsfNMQ1@y7Tnf4{F2p zx9AO&@zYO;WpCQUf4G@!d<{t43@&RHh2Ukg^D-8_;De`dc{hz?yPS_7BzU!x^P-tj zBWt_uk{g94M1uo_&0l?m1qh!Q>=dKy5cx zRa7mv(}`xYKJOm)h3s8goQ*XK1OT<#&Ozf35uTB^VD8m)Z6Bnlal5r-bkso}J^TcM zo)ZSc#2@`h0Si}lrnCFt67JFa*e&}2avKCL|IIk<$R2*5sILkv4P( zesTX_tP#NqXN#>Q{4oe!N=G{SZ_I#~%^kq5ilGc=Q63_5uRt!D^j$k=&$`Ha&bGlAjZ2&hWa=M};Cw|5onME2e;8le z)-hK+mgNbGw-4puLN6g_q5p6T?0XM^dMo810rSBSw7Rrl(jt2JNVBwhB0o3``lZ1y zBr`Dy8LdVilxv`X5b0N8#{#(y<2vQrLj;qv`XA#RZ+@Q~*aYa^UY~;#F>6BL>75+E zeH2(L#HhLeI=Mz1#%^96zY$Se;@N)biYOvM6H1p6-4LcvA=&GP()#?u=_WXgAoZl* z+bR{6BA52?12Rex)v?(LMRsKvf9{KzP<^4&NISV{2!a;wEhr&E)EloHqSR9%ezb)? zl9X;qQSTg@es%UevGs9-KQk6RqJ;Ui(v@S0=JpkXQVYgXlRKQcfFLT2A%*#c?7(b} zjki==Q^Y#Qf}ZVpFtF6<4SbGKkkU>I6wY*Ps*EAzemS5Z0r!-oD>~r!<<+c~fHK+{ z`u4nWcW&4!()0%2>r>@zr$F6$;5*IAuq5bc>cn-IEZ+B|hkO&NPeBi&47YiU-<$w0 zq-j9aGH~K;Y%0{D&e90RZ(J_@o*`(e0TgqWM zz>V1_2|7MMg_6zbeK`A2oW6>`dUuDIll*?4hKaK{^>2t!B*N9o7_!iC51?A=hss#S zTOD48mGM}}JkMLeB>f0zNw|zPj8Efyx1Qh?QyT7Bp*PsC1%+$kgboSqDR=rTEs%8X z-t2|68n3XC`A-sBYO9tXuQqE7{}pE3mRASQTvScN7(%JH0{M|k4t%rE7xh`qUf4A- zgEE3f#zcuMyMYyiu;w=#PFC-_W0rb;u#{l@E}K0uMy~Ec1MBz-KglT}I_AG%m9nb!XAkpoW-`_85Umy)5g0j(3(>`;o1;w;CKp zLKdGc@@LrE*Y6B#H>jMeTcD6nZx;FZw zZ?8nd;T;sv#~t>9Stu`V2=$pLBHrDq3VNw9{KZU-50LlNLK@?o*hLF?1Kjl3op`;u z=nFLXc(CuUKp%gcxwwBm08`iDki>51cyobB9Eypc5@0Uv%$x+m$P}vtzJ@yXv2Y(6 z%G|Dfw#*GyPhoZ)9Obc;u$h*k0~W zv)EW8ChYvHNP~Ws5(MQk4JSGnG!l*4I-odrw$8E;u9uTN)1sDTSK-9%H|jqRi1XpO z_RLbdR5?V7FZiM9a@_RLzrIa?o8u(&ct}&dJFEmRO#py=1J(LW)$S@B$xLi6T)SOw|;fa7Myzv z?MOZ*b$o!rCg?J9&v6SsP#m&goHWvlC%0`IUKT~X&=s1cU$O`0Ea`_f|aU@(<=bXW{`6+7W#cu@H9t zagx-Usc&&vez&!Mjqpdk+Ol(}Uo_B;A&JhUaOe-iG9|*Z<)SYRZ;!m{$5X=V;9Cl+ zs(#H}WR`823f+9`wmRKF;(;wyt*?b3@Y`H^;&@1GipUF_{Gb_RzIV!3$qMq++{iyr8Th+msVi*eA69cY1K|TmaXNA-rCXT%k z%$21aDiQY_-+BI`52BI$rv}FI)tg7-CaaD7_O`l9ngVYH9#Xu44ly2flHy-xuzEyCWC^6c-^K*QrZW zNG1PL`B#xfh_CD57q**Q+=Ty9EEolHUwT`)Z`SWJPvsxa-f8_iHO;AQOj^^?v$Pd6 zy~3pjahT&?UwB@2zW1)s8+UfK$SFAL~tHHx3whuvPyW4mh3w z`_Q5~nHOsoDT0sx@+N~J<-Y&TvqV4MCkgXgo^ntecjdoSopR%@?wkEfAuHDOIVHQe z|K0}d$IAWT3jC{=QJCD$*L3=%k#f)T)tT7R=nTHqn)i5$Q)sm)53ZV1w&{swK_X#n zpD3;2Eb$r)$CDg__L8tv=0-5U5hB))B~SI2(6`QM95phAkktAVs0hU305vOGT{|^t zH`?>)3!24y5TBnjRfAJG|J9jjj_JYwB?gujfD3QwPf@~K(A2Z4KynC|m! zMt!}`yx4=~u?@-#ab5-T?In;dGAUlGajcN(yFF%ypy(av6(B6-=d(A}}k7wcgUJ%c_TA&p~<@ZA~EU-mvx5S_ykM?O8{R|mH|RE75BR5QQ#CTpy{;f{(N zFpFjUOJ}EEwov(%eX6wm&~H5dD|PO&*VQvG&6Br6eo1I>i7L)sk`T?{8}`lQfCB2R z@nDF(51Rl?^;uv9K%Wz-qpmyIoZjoO+tGhY)P>lU7U1Rpv;b{^)mu_I7=1e%POI7M zneWYe`!E(sG!D4Pm@9XD2!jhItDw15w=Vl)ioN}tjFK(3~fxy=!h!`6@!cQuCP6#aH;{{dyV2@O1#ZX{Zl4pLmD z7*{Ip)`V*gV-QVaE+>|4R`><5Z1*;n%pfkb3AiZ1s39)5f5khONJ{XZ5dEj{AwE^i zj6G1{WVlyMNlC3!_Nyk^Z0DjKo$ha)xbx}7UO*rnNj8he_fyO?v!so#$d4^uhxAXf zZNG(a)^5wM7^{-xB|`JITdre*!q^0$>^GMLKm@oauH?5G^;l>0Hp)xxzomAmYTE02 z+c%CPd*0$Be%v~(u%mMywt>EgIlKPOZH{Q%Y5c6=;F0usNLUPph9Xez1H1>s1YOPG zz|s4D9}W5qUuupaM_2#&;|@Jl=mK~Bc0i~OYb643=Gzqz>i%czm6IJ}e-nj~`8ZFe zGWf#c?5=VP0hlqMCIlRJj0p>6ob8O5e(*AYuP~QI>C$d^Yi`)_a|r1LwH(~NZ9P?Y ze?ts^N2upq=Br??YX8%HZ%xopU$9Z$(sjX zPFNIynnhW{IRi^L#G9#+Ew!gHJ%T1dibisJk2~6dM4r$&WR1@Yh3+PZbrp7G519Z>UKXw(mZMT+M-ozzkggshV_x`b zthj%~?f*E&m2-P{17aTUsk&fyuduoa3w}G`Ii-fByRE*XlORaY&Ax;2q^Y}9DeUiq zyMK?>G}eX;GkTjbS%GZr z5T&~;Y#yW|>Ep#W|B^P_r=X1$4uFNPGyw?zjr2lT?F6>ZQaaY;=%~?w4R^35Z=yWu z?(pW}`Hbg{7^L5u3abb48R>Wz-8&e~ld& zG34mkg*Nsz8LkANRe$e1~y0OAYcFkLVXfFw#0X3 z=EB)RkCjS-zhk?;_Eww$ZWCeYf2AIt@_v0+O&5H%+nUcKQQZ*-D#Mj9~nh zx&c!=`cApy)!}O~mTV6{@dbum`*7{`e8wKXQ$qf(L_&%pEl%&9Hz4Ua`%w=5(|{Fe zG=KtAxRHvVR%isJiC+qS)RMDX`xiqORyFg!x&NkABWs5}rYfi3W6r|&5P*I>{#$0n zSspPdl-FAPCWDVqU+`hp5SJ)}U4;QxQ*A|gM$`7-D_HnBBw1Px+%y8Fr*ZBkK&P(5 zLO)g}sM)3#vqJr|zOLiUYMzC)Ip0^+BMHE(YMU_d9|WolPeKCgmx*JYTE6;S>Wa~2 z4x7~9yMFQiL85QHvJtCUi;sWX->6#j?bP;4-B$$B=t*-7v~dwa7d_l5=?cxUgm6Cd zaZr_|B^X5;{k6{%BEZY5G{tgIXaw~PMvhi$_PDnHbyno3v;_gj5-=Qm12)lz+O@kglm5{q;M_RZxMCq-* znMrLfk)rYkS^lo@-6`Sd+^FUeRw9NYH^+}naYE(H+Zh38KI`SA9vUIYM`w7n(({Fc z<0<5oW06nE*}@UB$5AV7a^dI2srSJRcWrClmn7EQdBmJ6?_NrBl@wo_%pe-;K3ph= zN1j@y%^Bw-|7I#-OsQL<1zRV2i1N8h%Jz zJwR0GxN$z5cL7T2`h@=Nn-d!(GsG9!?+6zh=pQ$E{l5S3TiBHQ1&Bvy(*8{} z3j>EOJw+p*2|#VfcRh@u)N+@NMx-@QrQhRg>Tr5cY}aHl3CA*moGLkK0}rdRVR=E^ z{#;gyR7l*RccCrEo*H}%3X|@5YPQ+FM>u|=k#sp-M{J+EGRGl7LH4Z8UIUZqJ%O1S$-a-TXZC__K^ zV}HQ($I)a#fHDGwtEVN4+}*Rszq5|ewZGZEuA5Iw2OpA6%g^thr!`g2lSe?v{V!Zs zZR|Oezz_e)(WIs7nejBn3Q;m~{el(T15QaA3slu+pDiHa->pWfN1C6rVtf%}cuYmO zgKLKj2iNqdxC5nzUkN5bWkY7QyW{~Jm`(yqq=456x~COUo&to>DhmwrE0T1u8eLBX zmGKaO;crc6pm6&VjM@?bZCAXTbba*pRUvkbglVZYwEkF8YfO`T(Y8Hj5McaI z|C{H>yx3qKlRMuy-lc?Sc1!2)CVr8jr{HCfqbxH-_?m>w0h)fl`U3oh{a{=<4u=GG zzB1dSG{rJNtgG}nPU<2q1UPrW{mUkc8)_`L7OAnol7dZB_a(SX@-|yK8Wwm(0F1NEm_aN1wVsURw>% zPcJ-K`1h9E5@B%#7Tn`q0}2)m8v1N;72R}2#~JeoV=z!u6nMx5Hh%7WcQf@>B}s}j zpX2a$CtQcsC3W?=6QyG8m#bS^7MwKolNJR0blaxwZnvS?S;Zd`$Td4sdlY4B=DpVj z;GB--4WcwwL>bZgwia+-FoH)nTd?9m$)`kWfURntsPevI9OkDUq}At_Fhr2*m>J<7 z|K^#22*1UDq{{(|XIx*ulqtAAdQ3OrRygED^IBKe*@i}bZ9_@AZve0qu;T?J2LZ}j zw%cP}y=TD%H^Z>GUW2*063o&E!US9==;FnvZpXFNHRbelmmD_~T)}7{w z&e;xBEsak%$=pypJ3t9=dtnbS!6w40@X`hEdjEiR%*$gfB`8X5t54B?{Y@k+{O-C( zyWn|kD&H^1e6{Z}+mjH!-{_d1n-62-&sj0eAIe`j`?O4m+Khn*F7;(ko`grc}wJs-Gcu{X=-q9>JtlE}duQ+wL-kpryH@ zy?9QcUQwlU%a{$3@vO{6uEg-;vQ6$i3UQK;nO(8qR*T1<;wvvr-5aev6Kzq@WY?yI z8CkJ-_v2o5#Cy<>1tkp7W+umyd18ce*OX=Fs(i}ooB^lb_(Z+B(#0c+peWSQ7vamb z`z_V8WZ6ITb0VsHVCX3uI!$aMYq+2H_VJv|H+xOae}8%g0Ho5T!|3N(fPIQlqqpY} zehINqo%!U~bwZHmWWWQHbG6yOu;gWGMqLHRHz7_bwPG8clq4AvuJY+yO|fZb!!O?8 zu}-gsTJ7>_YGOwb9ZP{7Y~E_-54t0uZ3t;;kkys%#n||9@a5P2V=teS?-R*n9l4LU zX`b4bjK#bVZd&U8y01tpmu%od$DMxAMMv9l&MoL=#mqz@UrVGR_l0_DR1(?*60e1Gde-2*c+IsqkdsUBQplCu zbAh}kVEU~E+wWc#ljwacB1;-}=6;qO#+T9U6+R*7gTqwax52TW8BT?9baXZbe&3!{KI_6)y4?e%W{LkWI2jCl?{Trz8L**uH#O^Q>E0F; zvZVDQPmj+y3P_#pP5&8F;btP7L{R3-N@^b&z}P6C*IselB-bHG;@9&O))tmx7<0R@ zq~8V%kqZ)eZcoE~O~sQ8B8+i&1Ue*r4H|9dY8S&zqWooS;5LT2)V0emG9SEr9t7AM z08Kh_ER&MkZz||l>!~yU@mi`?QQ4AitwkZp6F1DCU$U*G8x922-bf6%3pYrD#i2*< zwpz(G$kV;(&?c|bI?kVkWtK(xu`&B#;UTMoJn+{-FXYMJH&~sfC%3D^A2%%pYB~Fx zYFb@KR!L)a;xpqnrzd^@O_;-5c!|es9)R%NkQ;Y{;h&+Ck8^jTn&jZ}P=M)n>!7A9 zbI=`ms%#Cn4 zcD|SP<@REH*!8~greM*drUAx|97aK~i?nk84xe+fW zZ{VZUt^WcR{^_IyCA?BgZ6gdxVu5?G1|-aEz1&EUsaWP+cJ~=7?fk17Km5W&X3{&= zr6*juZl+Xa>izM!qk7^<2X1*30KepqIdjyV2i+e+zNXSxbK7Tpa}Fm~tK0+5Cmz|g zd=qVePKdNVx^>DVw^plZ?2M6Lxb`!8Ti#RkyDG;^w5l=4mTJ7GuF?>G>j?|lQi82< zNSi&Ar21!4wJGm%haIm3(&qHRaalgKQ+Zo*VUmdvO3d*r$tQiZdevGg?sUI{@hBMB z#c4dG%$ziRt^bWNf~3wy9fsIN_Xz#^hwnqZ)3n%{%nU9mIShVGJbF@_aV%R@{2`Bd zRRV1z;iLf8vnhQhV!*)}h_XFiU+=HG5zruPk-I(^EEW2+SP43iUg88Ktt+fn{a3`C zxH5^rzt^)}NibifBptLnWW>O$q<;o81Ytp^|JHO2c^)R9nQizz@=pua-L?WcDwzsk zqLYg1NS}l0EoS1SEwfU_n>3wtIkq4r(>>1vzP9Z)u* z7!cFZk(y94Ta9;@KGI}VuVTz%OclFRP84+NBUYBAN9)j18h-Dk(N_YxRc+#$@;E!G zk3>;{dx`$+A4-y+OCDz=U?O~&oq10pF2=@SEP`h*hn*uC*BdqRBV;NUWL%7GQwvf+ zy^@Jg8oV=aF&&>FIZfBUhPx!`mVdKBuW_kcOjuX6o{4h~GUS(Oc#=*IhjnUUK6V>q z3|r^NJ1i%lyLPs-RMaW{5i$=F!>FC4M0Pj0<<@G%muXC?eGi&&ai*KS|^#9Ba>V z1r&49PJmi&clkkAhrws5!q)&@Ng2>63rG~VPQPfM6P3_7JQhw!k2;x7`97!rb;o&f zj*N+5e^fk>D^vzYxcBT!!vc`_!+5f!_>XV3z@oz}r2l;7v?ybOOoLg1yQEm1p==et z8!M{V&DaVz@Xg1^2sOzN<|B~4p!Qqom;IvMJuhY^iq(pcg1vcJBD)9j$F|MVwyRM%Pf=l_jD+NyPHL%YE6 z$(-O5y>IX=Oj2(?JA*YBgFzC#Ok z9`8k0Tqim&9(eUu$uOl3X@wSOFmmcm0q`1mIA64Ve_<%3$nNID@10j(FXICMN0-)z_1h!Y(wFt@%rzn&KWkzAN|(aV{DA=J;-G z#?ZdfVo{uhmv0)tmnXPt7NlYVPN%)+Ps(HATs zB#a;EeCAVi=f9W$o`(OvXpJzf;CLh}-04ibR;6BeF3%HSpb7P|@BS;Ns&;?bSOo4F z4DlH!B~h1(AX80$!u6fC-}OET`Dlw`(|?}OMDd~ z>qFr8tnPYIjcmoZtVUn^-ei%&OQA5Tc=Z`Iz9m6b8v)SNDYgGI z&ufpuaQSeQ_2BtH5K)eKXd4pr>O-P(?zf3-LUZVNwLsusL-~7SqM_*WS%%V#M4_TG z{P&M5x)q1sQS4zgx}C=u@Q?t@YU*P&n!}ih@#Hx{2kRN*I*QhP*keYtJ=k?c?y9!B$5bcgrQql3d(MDOE& z$&4)a62X+@f)63w)4wmU=x5`h3F6ai?c0HhJ~iZLYXK!aa#)hyA>2 z|mZaulq=2%a+*w}~-#`f<0;rmBC$8kUReVyk83I8Vz z9h*!SORnHE+X=(t1767g6#NDfz8iGC>whkQKj)G}l@4r;Kv22N_b&h+TX2u|j7#Oj z(K3uiNL1XY*yk@SMq0V^nF^C4tY7F%Xkl1!XVbIhi9k&fR@zT?lM-aSH@RdqE*fzT z0x=nU5YhN`oe2_Me7X&Slwrh-emZTam}o^KV=~utowP0%qBQVdeF^BBD(JrsnqT=g z0Kw~8J^_6p*PaLgV@w0$mjgf4%j*&bCxW;?u04g`wLQC{3<iiFFlUUNQ@-0`3U0PTr^* zMu`6+{ji*^jscj}HzT-Ix^mFBSE+}Zet434IpXr-z;GbHM|<6Z$ud>QLOHm$q>Yj? zi=X^?XVKh5dmh63E6q?c-(MkM>f(9y>kJ)X*W=($$*zh%V_IowxHcM_Px=q^tBS~D z^CNokYN*qIzqTFLw@*J|W1E6Y93dEjFM7bVH;omm!&C=Z%kF zDZ!5^rmEV)HlD6O6Tr*st_e4;^fb1cMxb2+e*K7{dMXd+lY~LT*&%qoG(^LQ;xu2U zlX&3i8OG86!Vntf_USh9iF4*U|J`}Z=mVM)PeAs{D4WZ*4$7P zB%t)P&$2Kr04o8Xy;J`g@KPzWe`1T}m6IZ9MOy`GPfato?=$ik(>JsouPv<{^B1k$GpotiH# zAFc}^jX-(p!24l8(M&7@pUe|Pfm=;J8d^`&7M`y}lC2ikiklLO3&7s(v`TZM_wLvp z)BGvu*V#(5myOg0-#f?hZM~gOm)pbI4r6l2`c;x+BoKN zlf8pTUa5LIE_z>y*IP(5Wwu|3hR`D}LJe2Z{OO%LwF75itx_bm2;*V*L_d!<^U`113iZ?AUR2fo{~@G!O7S z8ry*a+L@ya1s~1tUwKIw=9Y$~W4(^vWXYd@p8Pzd41rg5Et!ZFn)0i|BZzsFQS{Ma z45FpX$A2OpdxJDya+vhWuRX!EMr)~=G60EB#(9=Cm{yUH#1~9tH^>Jf<0R6m#c}G< zi(K*ezx7%l*|KrLE}7Nbi?ghND_o~9`pZ1q-*}Q*Q`{_{6rWZ;i3So3-$FI8e&&NC zWaY{pZS>)b>-mE2`c_1^jB#|!C|63e+q*hQFKyk1RQ#UTkJI!M6}>*G=VmpY(8bq{tn;^1f`?7^Zc-BLmxn4n zI7ms3JW&2@wCq%Iun#b{=0FF4fUU|6)~D`fAdrMDf-%qb7}(_}O-Q%nk`;V~i0&E` znTDr*@a5IOZ9_&vz`~lLmNpX8``JG1kxEJD;}0!4K|3<0TVqBa%r23*zlrBZWH4U0 z5PQ(DoTHN$fb7YEFYgjdU<)3`W~2TCFZR=#A)q&Z+nJ$iP35--s`>pS@B(Z1_+$t{8(iqnGXFSA(Eez$U z(rAcMIv(%#M&j7W?q4q*k#Rn$E zuip+NtT*wwH#{;4u5GD8u}hZ<6@&20Q`j4GxWAW}!MyTY;KIYKaj~9lLj|ADb-{w> zXQV5^!qH%Z=(nxMKm85L9tLs3cFQNel6fR6KmK|2x@yy>gzqqyx%l2?3(eDsLCocG zdslQ2dcLqbO%Nc`$|v^)KCTKql8YQ&?l90WQGtlNjj$*dWc`kau){M=;cMhq|fFjQ_6$TE)+((=L zN}9jU#9gO~MwryIRsj`Atd^e}?`()lD^;B%s>2xr9u$3Ux0maqBQ-M>|74?_%Xg7K z!Rj9hvpde``3walaYgh+!5Q07qw5!{qQ@py4<7ToKiaHbesEVf#mwc)!Ha{sUwaYR zYil{4w$X?jszTm52%aZddax+>6ZVji-I*L2fukc8YS$2F;Fp7qW|#QMx9#UKh&WC@ z@b|j|WKkGzxI%6W_|)$N(vBy^<2S&=M}T&+nZ~}8nxXRO<)lH7nb=UnCA)@o7GYXG zo3mta!~WY5Dh@By(QrLSG!7x6di% zS9=>}2G(da?F-j0X5}QM<)9<2P^&l*D$0iYCMgnRBFhgP;FHiQ{{xc#7njIn&F46G z?iOCDCSZ+j2-Bt2p^J`aBdnQ2?1U{L4m?WeF)8Z<2czjUtR`T$m;{Z_29g z>0R-hEnP?RcHD}C;UCvlJW`!Q#=eH%5m;&(#~y)~Xxx)!XmTP*e;VXL8x+aO(;`p| z^Y7W=lRA)%A&Qg4Ci82P=5l54I9(e#7KD~f&prgcc-_0=Y$*(6kGR#%a+Hj=nMsHH z{nStbI?Mq~mcO0m3g4GMOW%!sg=~(F zHo*;$bSAPDVg*dJd-V~f&<4;QrUGPQ6G10(WzW(3hbT`A_0#Y>R2$q%MZMcYywII% z>aI2%Lsu?S5d6~Z&+thwjJ}cHCua1T#4KIVsE)J)J~nf3t4Di|CU2=n)FGexBvJ*U zcqjy-l@EC24Xf1KX1_uW^(#D5hrp2oIs)xY*_=Xl}7sic0DaxuVQ;Vj(H8jl6{ ztl@;=7&sO8d1Gy79NJS|g5yuZoY}H4{hxfL0oDiPGb?VB&s?rXwe~sbb+Sdvx96Mi zf7XvCdY<~>#8qEs6=adRIh)T#cly&iVqloGZYgq2DE$sBY(0R;w#HyO5m{Xi|j`ryzeJhFvObXi}zQ$^dkUa z8-=*j7t{_XJ~$Hv+WXY=obm2O&HfejylNDi~KEqaO>WLW#z~4D&S_4?L?|I7O zd9bOA>y97h8sWz}k$zJxC8agx00PU z=&q>}m9ckFl0H+8hHU7@QXQTDL?Q5QW~dH6U!?M-P2yvDhHyR=*S$jlFb&0tEg}In&YcQjdt18>ST2pa1*s+G_eQ z$i_(cvP~<#>q^Bp?-6%4Xz=QHw?E&1dQfBsGqE1{N7)PW@SLg91&af=IdJ<2o23%I z=B3MHDwg?zEY+b7?2pWuog5RCD;Ts$p6L=wk|sWaAE$aA+6Z*uB?%5v$opCbw9)s| zLe|cu36WL79#gea+kAOY86xuP@wbA8`P>mQkI<_463)vU;mhz}ev%wYe9GJV8DG zsI*WsdD7gNyjS4W75N&vocg7{z5xOXo$IkwyV2@+8uJ0z_5FJ|yr3t0HolQ8DNX*! z@UtBrYSwpRoJm))>Ui-&I|GfHtg}9}+AglmSHBzP+5p0(>?gKNG`pAQ!o9wA#@CUV?kk=n|xk;NAC7^On%cCA6GUg(8h74Mx zmW0D{fTc@BUs1k3M=8z#svN%Ei)~)D$!SRh)g|_VkdkQiW;lkt?N}oDiND=P-Idjx zkXC>GUNXXJwB{;*6!`ng08u+T37|1I=G#2R0wvra0A!Sc!<9r=?}l{$d_EW{5PB5< zwUrHoXWjP(om^Xc&*V*LNj~HwO;dHpPQq`eu13BY+nHVMI=pjOlsk;VH~8AK#p3E# z1Ayw~&8+%!P<)FVQz)NqdGfTyNTcPU!_)~5lQhDRYkp zC_%1KG3Srg*YlBCiN@6Rz58(IAeQR&A_FooBDOZM83P*b{nB%0neKaT#g$Y7rGmbH zHMCz_Yq+w?u72_rRDz6F4}2GfvaFfx80_zu;fIdvk1$FYLSXCbPQ#V%gzb)_Nq(}y zU3ZOC)Aq>!)bT44i|W`IwFgrG;@_%k*I%D4G6?l|eYRk%UGdM|8h^+cnFz~LymyV5 z5h^5j|4ieG`CvT0^v)hdx>x$4e6v^czfVQlAfgj#Fy_(pxneG?yXsOU8$@^>PX-We zw`wab$am3g+C&Uz4)|>7a*fvwKsEZ&?Ybqt9)qDXf}-cC5E22Loax}F)rj@7O7$(2 z?!By3nfztcBnGSUa1VZ)041(8iYs;m!`C^1Tiyg?|0l^IwgFc*BSY;i+Ru*Uh}%B( zpGlO&;XTgsH^=xdf>7^jmsz*4(_pfM?Wj~cXnBx z$yXh{O^XBq{@qVmy!3{Fe;!W@={=aK2j2UzP5%pMBJj0CeFX*AMz0*|e5> z0wrQ0n97T;j_W9N+s3LX;fTC8`{qy)IZ0K9riL!D!5uE5b9WPVf&!-Q=RVOjTSwBi z;k8~2s=sRnuy~C3mJ|d`StNjPSpD|gN1T; zzn|xTg~NK#smNy7NR@gBtcTMt3~%0kdbzV9%NPq6P)tbZzz0`C{C#mdv%>;Ao>|XF z9T!uW%f{;V^q70#wi`Y&^GyCG4UkW@$`FG>2r$|+R>cng%Ay@aip@1NWmZ1+gcN$V zGh=iq+^Iy7a|>y}@#KfqSDsgM>yr($WF&@~n1*KGhMF{vmm|Fakd5mo!~zM$Gew zn{T}s^aD5dq_;fJQ%))f`$5s3r1`G7tNu9Cv_YzL=G)n86=SkQN(esj_>Q{^f$Q0l zj$sILcM@Rv$kp*t$s4ktEp{iiV&b;eWR+O7^3?$9y^dc_N(V^%wbpl*ZmZW}s~61t zC)3`KlBcpmunVa)|J8NwWr3e`izfB^AQkzeKpWXQY){k@)2p5_!R@8GcPFT#3p_sS zU2P7<-pWbsgYLk%M&LUO#ycYKV59bKe8nkHyyH-9+I^Gtsekp|x9$Vh6x$K2JW4MH z?B97keW}HJL>CBgaJvcIuqZwH&v0t{zp6rmOjcJdt=5#U0gz%O;r5BPbli`~bn-B~x)jPcuX;Qa4p=fVKCY!AcXB)_9R@svcMQ3a+3Qf#anpAW6c zy`hp8b*Np5O#tA*6rhnIK0?8wYULw21)NewAS@DQyw=aryfmQb0zC~6F(8jHAmH%yD&YeYF3g2R$mBpYO8RPkdMs{f+{XJILUCPEi(lE9^uM}al?6z}`_pj_)mbUDDEc^i26 z^#|94ClCxrF#PNB6U=hBSP%DQzhg!rc^sg`bNY4$x@IgCJ_Sk>1Ce0sp47kZzXIY9 z|7!cT`@e6#M>bl%n(^E0X@sPdj`Wk)&2m9A|eG&Uv*S&;NUT2*W&tD|}H=7Wpy5$Op4C z;lrxxFPj050yU58a@~5snJrO;gF|XTcxBFwrycmk?zoNvu6Cu}Gr@DrqBwXLlharC zl1vBO)RIe=mBUAV+QtI_*stF9v3zwjExdyrp!b|Em z^Qi{xZ+SxKi*%CxJR`=belBN2@N*NRaj@ydsNK{UIK2gkP!gwG=z;sfD^oQzTA#La zO5vBp_e3}q=cE4-Kbqa{n-PV-zF=n@csZ2&dJ< zfPr0T)65}Y8PR7?#2yb`jv;P)6TsvSoOqenNdzgKy#1i7h!>dojt|V;PIc}Z;55sXdP=l9(^p|759HpLCBthH#}Aa`oZ`9GAO=*n{lX#bRAm^gh`ld{8~~gycM6iYEUB7zn&$9I}i%`)4W;V0V(Jht>^f zV!k8yO{{Cv1jw`yBk8d85UqHM5mK#FpJ3fnn2WQtrDy9`CEQO68Kxw??(_}4`m&iQ zn>(Hh5S=F6y#FT24V9j|Trq(4`!-UVkr>`Hu!LD=3vz0ks3PQsHSoStgeYXiK=vGzZpKaR8a6rQN!4etGo|kBLTOdJzt8YADqF*68=L zY+4i#i9+9$xs`EF*s$V5G6!#;J-EZDvfDh2F4xfkUa^ny{IpzpCqRC?vPY5~C+HEo zw2A<6CfR4qiAr<&J`>#S`=sNLi@g%rg=i@z|;p+JN}{J+d~3!bwR|1_p_WZ*zFg8JdY2H&$(=>qm|h~`0d88 zWfyZh%%J_j4Dq6hl=rxTCAnU4frH$_ytGsCU*D1mn`Z+sw9>F*#!002LkOF@J|RgG z&VYXmonzYG{uD{CvS4 z2zvgHZG^kGrEZme_YMX^>Jp5Ekly?SG)UqM2$JF;2kQZuO3HlZJBAWt5XB?QAtk6p z;PZBUYmLv}O4#vA`t8Ta9W!j|LYfuO*R{kX~Gkj&k=x{OR zgyuxc7eyW4QKwM~Y;XaJ4k9|Rj;;=@E%@FF)P+@9Wx#6|HcbPs9Er>v%et4vJrx)Y z3O+mlAgaHtAg>Nf|0Z2za?+B6+hfpony5lDAE$d(o?L1}N0%V|tJR#e1J<;%&1W}W z4sdoDCj#!=VGrjHHMfK~!Aastb2s_g)o|qjTPwpxh%bS!912Ze_R1@tsT?0hUX>l= z0g~f3qq>IyyT|fEsc3UU%%e9f@6tYuSbu!PUgly3^o}%#>ptxjwWfP1pM1AwR0`_Q z%ul*q5UsD$nLPe0@(4Nfp56?GD!KCH8Cq7Ut-*bUr}KB^_liJCg=aP&2w@$IA|4wz z09gyWU?8N!5TMlMU;(rK)zk;6jObF@{cH>4aH;$*7AvDf@#!;Um?R*(8&!b z5TAj!VC4&7_>dCm<;$(+T{TeoPk0>2{Bi?uVfbTXN!yb(S#~8f2){1p713Ty*{jc_ zRf2HseOZT8+!fPXa&@%N3i994vCh!EtP(;}!4)kKE%-$Ir&(6wqjxugE|6~v?;rNi z^h=ZRn^;Nzm0U~}M7eO*=BYA-tWFv8ZnP1qe?Ete!mwVw)ZOGc|2qNyR1{vBFqdt9 zt8xG7xKiWPD||`~g42zB1A?)^}Kb zHZN&k&5<=QopZ~J#!ma`OZ1?J|EfUB-SQyjl4>N4fd(x7L!Tv?k{Xl|Zi zj!2NPdK#Lr$aN7wpAeRyx5Er=tJ$^W!M|(Z|tTlIzdC>lf3BIlUt5Nq<^Tm~-|%FF_W;5qeHfl!yrS z9V6$z>|&Do^kuvZw?FH)k}b0zXk(QJeS<=)fX#LP&{-( zR1mXZ<8?!2fYl{@0Ezi8RS2-g=bTa3d*Q&5p}B_RA`OEM>K{D%u@0Na==gQGyV{eE z-kFU(OR^Kv7pt2ORs?Lq@qv7IXi2vKqKf33 zR~4e`{tcY0mG_o&UQI&*yPiUi5dRcXr0|&)XZQi&;?5gVlgjsGONiCF!slVgk!>pJ ztZJM|yhmK~(d5AOK36q1cB9m~^hW}b?T;y(@{Wy2Pli96zt0DS-1xLeo%g87+w+(p z>nEs|=n}0MPb;Eh_?gkGvf)rv3^I(x!*_Q~yK^$LoJi7p0jnH_?F3AMe?u6qKfACz zxBXJe>2EQe*q$tu`?_BD9)1(HV@WigmKpH)8qa8vN?apP0c^wh78>C_RjVEiq^C_M ziLc~F=qyRnDrNWFk00VNCHidqC;&lO-YJo^ilZH&&-2-nnG7s%+mw0h_s~!K*O8R3 zdXceMp|+2$u<*a4dybOy{rsWgc1HcLhxIs2qQ3&MoFc#~p7=ka}> zSXC^xPkO?8?qUqhJM_C!S!&(m8G3Jwc`Rc0Lv(=16$e0NUMq zg&0AcMq)4ca){?MH15c7r++038WzbRm^di@BInT7Q-|RVTyl#F$ zN#cH-@iNC$)^ouQ!q6}$)J3U?09q+e;jv%7R-)S-Tg~Fv-s)g$Za{wkkBTK+0U;hs zJXGJte6PM&iTX!8$oZr`sB{db{2cefDoJ1AZ*D#m-oYZdmG{q?_rL4IK4v0^_kBK= z-j#xDpZt3e8`$7C&CK}3T!m8lU>~eN6kQ*41SgS%V5hKZw=j)Y0#FP)dY2(Th|uUH z*sKv>v8vZVEx?Sto1+TzzFaFnv5g#17WrL9fQ9+6OXt`vpdPYF5qWs`#godJitEns zqdqueW_c6LUNyQ!6e)bV(zIh${I@c-qB98Qqq!2VR${EvJCyR!=6RF<@y{hl_Qyl2 zRdh>gWyr&rj-TmBVa~l0g-EWuk#WqPgx0ure2V|klh;4=KQV%yBZ<&=`Hd`3vbOwb zM`EK7C~{MW#PqMwf&TJ@9#J1^mA=^L?)=LLp?z4} zz^fRs$dnB19)LxSBwkz09b)2&L~W|Jf5_!{@4+(syl>;jtxMRO)@!;>_C* zf|Li*srkh>E${4jGP6<;xw<_rokHRO<7G2pVd?P#keF5p9sPK4xZ#+U7-rMwnLkG= zQp}}lGrZ!*cZq-z186@_t{%;RgXMksAD(?aQ)6-CqZ=`L_M!Oh1Io|y@hP=8=Z;nE6WMYM!8hA-?f{1$b8cd%+$!rUIY(C?#tyd?@}8%cbPu%fuV zHmJ?qK(RGCn^1^sz0*lppm$UUzNT_2bypgib!{*TbgoE-8kMliGrE|*OR;L`nD~#8B-YU(wWNs_(+5Un**Ep zff5*To$NlVS%x59R8Luue(S12jXGt_L*fDL?dgaseG8>+IdO-~L@F|zkWY>U^Dh1x z0rk7Qi)kd!8?2c~1Fy)kWslqI^)fQSdt)j@1z`Z2M)M41OCzTRx}ZKg!ot(XDZH5;arI>LD3nB^1q++cv|OT~`i z8ZoAX%GydeBvt!>ee56IT-VRx%(otrPQUJ(00XuH?IE}$Y?tClldCSub+=SuqEB+D zkt!~vrgb*u#_nbS1i$a3D{OkQhQ9C*_ovEATl&}ISmP<2KAlQ_-Grxw;okhm`w5qK z$_!LEkAFQ2I`dNsF(z*}iya2}T2Gyy!JHg6a?(VNYQ-;G6|4Wf_7F}vyw!Qmqj_bZ z4>QdG;vN z=^|&NU-I7b*sajdJc@(!q=!6FXSTadlX49Q)nc-2%~l9^p=1bvHRosomH4qXkdb@k zwK%z;z?zgB&4?-P8#|sLzsT z%{Y;tU%0KwHCb3~$ktLakPPO$8i3d~dkjW@-}c&{roA_Xy008E#BLYgH~|6E5d|T5 z1-=~Mav%F2rjId+NmKW#&3}4tNTnvK&2WU!&Nh^Zcj&P(k)yJceJO~@ zoS%KO6uItbmOcCzhD!{lYhWV4@#fZO*oy7o-8*q#kz1lxvw;y#OF@^7UpH9N5Gr9D zYX;BMkr2>|+2vZuzwSUhgC&IIbE^sZG9UEj@$y~S&z<4_c`&!!@pbI=$YmMMAVTzP z!hhUsnCf~c_FROUC;_J{ehp==1oXfm^pPqb?6%TBxJWN{YB}-$xNgnc47!yy?)4~9 zW6^M%8DbP(-}y*_8Fcpo(^}Ga9~-mB)pA8)~?JOV4olI{h0(@B+Q$xC5d~le-8b& zY#`>{j%RNi=Y+3Q8JeK8lqc~AWDpn6ABE0bo)xBW^l5+iByDp*_AG z{a+ch7yxnh2-*Dy0ou!wH}(i)Tdy_C+LlrjNC}H6oR&W~t|{>)!iqZ@y6F z{Z9uEMXfon-58Px??G!D5oo{xn_qE58U8r<{UL@3iFJ7md=6aaM45`lyZE<6eG8P0 zM+Mung>esC$yKLmsfO4+x7~jV3cjMTb@*iwBQd_KiT~bVMD7G_Fp-i#3Ag3VvwvgJ zeDa^SDwA}O33bLZdDOqk{PT2>}^ZuiwC z;D=h{g{AxG60UoTEx_=y8X}RY`67bD=rAHwZ~`vs`Cl9+)W^D#c=^|MK^l0IzPS41 z>RH|V-K#!>g^OjYfWDh6G?-KFP~=n8*#jfad4nU}&x-_VP)ifu|NZ2NXLv%`xe)Rm zaN2*^Is&#*_a^vh`05^UOnY*g&NH5O**!7oW}4H9xfyUZnHgZ~0K+~v_b!(td%2#s zA|rICEg_#ru(Op_*H7m-p+vt=$fN zl0Qxne}1|j#4)x@(su-^ZXsUZ&0`U>#&wsB4sdxCkP>pfg9q8I)PzY^z-%`J?NJ5B#wAUF*E2Sh8%o4VuZNg zhn+rNdZLtMTj=$|uiVd*tJpT=#8*~vliD`09q3=`vI~SPiE2whwhMl##D7H+MK?>c z9qx91xPZQD#cTSpLwZk5pbp&Wau1%yZ&}IM+_TuhJ}t1BDZ>aUr;y5D*_dLM_>Nhu zW{83uG!i$muzqsesr7=fVVV|SlyYf&jCFxqiSH+5-I=A@KglOh93TnIQ06WWwkHLi z`0(;_E#OI;>y-BS` zRm|I);;aH=hTh%rn;-wey*2XFe+YF-UJX&cX5d(H!3o{=vw*t1xcbYe_}x`48RXm( z2qznisI9=Rd#nlMm0S%6sVZoNE5d{J7WmoU2tT+%aICh?!;F{08 zghazF>D0pG24#JQ)Ma6K)cNP>Qr8}e3zM4XO&dkAwC6^+Tqz0GK((Yks9PR52Y)ee zaK?{9Fh z1OzF{6Z6zi=_B4F_4tM&(p6ufcX59*0K|pS-EFRos`0#BxB7L5LxZ5_UPTdAX^u+4 zk$9hZ+`{9j{Wzi@62z>L9lE~Nu3YmmKinE@mFXWlux76q1Ml#$2J zy~IT%@vm!(DmvUe<1z?0uks9UEt46=ExfsnMMi5nUL=8;h@pbhLh_fZRqa!_-VAAd zZ4kcH@p+K$r|y5suWeCLiF|VN$gz@cGdn9NDaOHVBs;=*wIW}drsdk;6KY3lo`2{AI5+U$BDWJUFm)aqj6;(x(Lbi7|Yf6yphgBoS@~ z@&3jP+jYo3-s7Jh6Ll86nw__T=~6!L{6`!G;#on#%J<>gaa>pc!8nirBEEOvD83b2DkFGe}n&vL_Vt7~BYWb7J?oTY5-bIK) zp$Wj)JV^Tv$30cGG-B}zio@Xc`g9iODv@tv5F<*T9f*EXNsILj(&5p#`)vj&LmKE@ zJYK=(vAM@6xoIfSeNoq*%i(xKmjsrk_OgAueO~k`*L~Z7e zG3nQs*XWS(`E4m7!$u$_u$@tYTjlC(IjL@S==w_alVmiyuJ(^(Bk{5D*_u!pd?>(} z^uz1f=n5YEtRF!919q7GvVTZ946bY&zn`pou#&sWCoFn+UqEnf?{`r&uIVIm^~=t0jOnZog6W`^$>?)m1L z2WWq_QHkKRuh>q}4<3bzfY;F?HpDLG%OYwa7>9-nN+Ul$mb z)}d>ObXR{(Il?cG)(n0iFAyZ)9h^xvS4GnJ9BiMuw#9}|PnZ4``H#`sEItn+NY_H$ zMv-g$J)?uqt%56~B=5pwGp^d|uO2)V^?gePPWIHo$*p{ z6+>TaHo3+CrpMqvE_U%n%+Vyhm-mR_ATK2a?1MwQ%*mg=@YteVRT%l&W=yGK4z;hMYLiI-d7jH45`uo~Q7q7}y zfK7gF5dWbfX3pw)gOG;zXTO37mt-de`NkO^)!O{6<{4L)>i%1|53+~T9A(i`akJ^c zVFDALp43U8v>D_o9SpxwQi_`DP?%B&Ku-1){GRrlX=HAikQD)Me2ovR&?D%ca(EBy zc=&6#_LtuIsY!%%sA6fY@p~ziWhoQ=OCt;>AmG}gWuKyRHw+T%Zbbhx{2bgE2x;5! zB)Z951iOh|T-)vNQ3|j7e*I<$-p-u(XT(}{B8#*cX%1cNXeg+HS=?>T`tI0~hTw>N zhzHIt z-wJuuWFu!DV+jd3l5|wjKaQ|98RQ;JOz;H4ncj#z+^U` zrh{^b3RJ;17r6k%*gQr2UScJ8CD{Z1z(^5DtkdW}FR`S0=iBIWdp-)hfq8OYqaLfU z1j)d>Q8r|9uSww}e2xa&1zfFBm|-k`-&=jWhFe5At#mxI%{ zxjnzZQw#Kz8CyxCor{W>(GN?%*p)0Xv_PMTs$O2ZtL9|Ug4sOdsva*IZz%yyz6G$* z;-;YwJo=@9yjDSv?qfC`PdR~rF{7Wd);QPDwHYZ!7!Y7Gm~U! zPTv^s34I*{I?#&xv?sFNk?XNy@n%dg#LZ~za)Xn18G{%qTRd_Op)?D{3rivId@I6w zWO>o~SO{H*=eR5;{Z(3$xo3UK!SZcP9P99=JicQ3&^^Dw^?L%;Fj+G>Xe>|_dx)<~~ZxS{*H1P97@Za9mlfgC*wjU)~yV?`)M#>TrI1Q(tWCw*OwNV6^i5qdA5vX?j-LrqYfo7yX$8s?i zB&WcgzHzMi`pM*atDU{M*6tg4=^GUi0(f9>GJ;sxPN-fqYe^WAM3x@MzT=A*ViVp~YzR!-_9svJmMlBU;YuI& zB7T*I{Ix8mee5wL*+JO8dUtdMBbwX!t(~x2fO~qFx(8f*9Neeg4#bHB=YUKSmdzEziS6~iVSC^u(*farDs5R(tY^Xw6_y%; z^E>>!^z6x7;=2R?S(xHg#>*bjZ>y12AMNW>=vUWb> z{bfD^cEU>vj`kl$t;6MidWc4%E?U$wc+7wgbwC7g>^gFH1o2o@d(9PE>al6T6J;pAt)TKLm zG5w}$NZ@v)%JyIY?_6iiObOg2t$}0#g|R3~p0~x^h4LjU-918XT5Vz;XmRa@&Ycu3 z)(0M;zK)$F*|@oUcs1eSgQp#Fq&9Ykc^C_x)1XTA82F*U+S-Oo?Gl)RDsMpc70trd zg3{VgqdG=0Xlem!%O1q5_Fj|y<8stHbqkYdB(dUj%{tB8qLLJj^v^mPDp^~H?Yw_~ zkM}I-*RTA&g+nbnt+uww4yo;%)&wz0L)F6@1q$e>4xDKg-+Bjx9RRI7H`SOGIGhxG zD$V_3JanT!yi%WTyM-NfD8m|uru{+MME}-aT@wny`_(~~bd+yN1DR4@833DS?Yqm-|<5+gF7u)C>4f?f}&Xc{@vbRpcB?YG2!*^m1M)UieMh zw~N)&APr53HF6MxBukt?E$KQC zB6A}^=jseIY#R|bC#fB9q)U-tfj;U+X^&&GiiY3hT${ym`!k$>pSFA(8+*`kFHK2q zAzFTtdV4^C+7<0JROnyM>u0C_Dqx*`=y-KKDM-PGzwiTFX!XdJu=tEBfkT!=(Tl@2 zz!_e0q8m8?nYo!t_k9D{N*svv7bn9Y-9Y^K|9x=S6m#G$rc(wM0aXw+(%A(J6C`6S z+jY@&Q3v8v$9>(}aL&d)Mz+jc8?^qi8FJ|+3TS_^d-=vx zKFR8FKAp!#ex_PL&W?_3Fw~_S;9jSiqaVR=65uVF2ImC3+dre!&uGe7NGn>-_jI%g zj1)1_#*OVA*!_CK(Ido zaR)cL>XJ5VK%w3MpW!cuVY9{^!l)JzJDwr6Wt#I@(nF-1rw-P0a_b2_`=<8rYuS%R zn@fUwb*pJhgylPNKPBuoI=lT3=wNYD@S8PXU>Ng(7z5dny=~6v-k$-tPIftYNyJ>U z?xgCCsQddaz=^zurlg+=_-(qqp4(*B$J19*IALzYuZaQ`@11i_r(kQ$$XLPN?V5ul ztIh)9K-#Qb2YiJJQQ=e?GR;ixB86K%-GlKjt=0`kRqn(XMeM=VLhc}^&#Nrh!uS!Z z%=x8p;9w~NqLaz$`v-5wrJWwMoZfd%!M#ExN&m;a5sYxy|6BkR&5lBpR{mTh@@O&V_ar;XKeAZ*~?F4PEGzjal z(F_R1QT?90Le7%LUCR^%S*B;lk?&Xf}{r(5{mwO-Y zdtT=}pA~+SSKH!J@e;dPI{T-7&!;Mo) zhWCtZ*wr{k8#RuE|LSgxnf`TL;vhKSL}Fe|-fQT_#Hv^@r}wor1OAm;t{17?V|QkK!+JqCehFni7@_sOh_S3HiwgNHRV6>J%EwIQdXB>rIBo^_yCT zUx(?^>NTtUQtkCi*6#=vlTx4KDH0{p%lDMb9ehT3K$6PS-39q>{<>NR zm;Q?W6vAX|ck2|BQDgYMp<*klK(QoAYGrbq4=m$~a^5f-DqP;d0LZwv)>vdBEqUwF z?B35U0^_!80O1I<#q$a!MkU*&>y`J=Xe70qdF45 zLGzB#Blk3N57~M-L{F*;N60obdO(5`~06DL?qHL$^kx= zZ&>@B(*8Qimsl>B)(;P+#*q84%;u=Ek}`aI!aucI3mFLhzspI#YoT0@i0}~-nO3_E zDiu&ZT^j5Nw_7~R0Uc8X{;+!2{NSTvIC|ETwaxem?A9u;`||VXmc*7E#)F&*ATbHv zj?(kR-LL>|!!}D=?QFPEMFY&xYl<>o-kl9bfhoN-f55_9j3*M>KMa%&U+A6Q==?T8*J;%dbIRf-;pYA&M@X;-D*1i z7wouNogBnKFJa&IvY1vA|Np5K0%Y}@FW<8GM&%{p(haA776W?f?_Mv${1}+&Q zwqiY{_>6{XZd(sSnX*69BnIb?zu+cD?|-WnbeUiUiP=Cb7RpQ7%e7+5?s6eMIPGjU zMc(O&B1N##BW-b~)1~Ec+1X2sfFAAk)10mHJw|})SYZD6SK$eyt{$9OJ5RosaMzLJ z@qN0pgrW5!b4zH;U{o#0Oxkph2JD)ao%=C$+BD)s}q-aJI zRv_?_7i8^a!G8}&9D*%hrhKzbbt~5$gZ}tty!?XPp?@Ohg+sdgud6Z$evIBSgEkXT zFr1qTb2_M+kCX*=cE4qSxQO0Am%3QRI=FZmSq1WSmxnWwXg9UZ0pewPh_EQq!vT$B zr>S6+p;SF961n^rFJk%>Kj-21{K4c)iIG$o^~lR*fyyIkfmj4G*VJ3y?UlA;T)-*a zp=(PXBLDCBos+S9)o-U49|Q;`3cK>Etz7xJ!nSU!y1itzR) zcpaG+%B%9lU;Vz;WQ^FyHr(GW*FsyJg463D9G~_TC+so+tAqkWkS-!KHj40C#{`l* z@5g&wi85gFTWcxhtDn3UdjRJ}c5X`dE&Yc1j-vS8=yex>-1SUo&?YGzuD55o#H zqu;vsdRpMw`G`-_89A+FfdAZcJ#8dhXy?z`q?WOEW2f^zGR>T^p?i$2tA|TIzp;O|ZwINSoEoHpO z^E$(+rz@ycjUiyXPQaOd?C_wNPj;M@oP$EzWCn~|6`|sxu74>Hp}A~W7KefshCT8b zZY3YJ-}z8ieFhH&N5sk1=sqV?ZB@rFo&V9j>vNdAyGs^Q74Y-L^v3&7USa)(Vqo1c z*5zUw$Za=yStsg^)izn$fK4x%YT71W=E>mxKY;sf4vwrkY(SY|Fjp_e{IVOMcoOc4 zBYBhHpj_^?LjFoa*>utBiIsMyQ@V}ACt~Wz&p*Z=u2;$4=%K9uhU=K}T6fqD3qnt6 z_Ex4S8z@F5T&vv?+}y$Pn2+97bMc2P!)8rU9w8Cxm-=O^ca2HiO^SPZ^kHQ^N3RZ3 zn+W1i7W+E(TVr>>r?uQoQ+&+)4>A`&%0+8##oi0TZ_aEC^L|Y{j6LF*@&GQ_?5jab zrX%chQIWK&3O!ckoBz6*12;xW2*!MMe)utN14?lyz_flV^mn2PeyuvTZ{Pz~mkkIT zr1h;iH3P;wql4n|Ul-NJdh5LF(CquRW$szN&1zH7&!q73bRHo4>4p z_O*+feaIKIZv$l?2Gf&nBNkyB^&~l@1^Q3dG@yj|SgBE~sQi*olYapT+1;qP(E>bwc?=sSAhQrrN8%ey; zNyxa1bNH2;zzrQCM0=>y?ZDv?KUsMKm%@$IezQbo_@!-LrzN8t3G=a3T@0a zB$-^g`m+gnEBCoI_3mL7Ge;chmf}$BJqKzRDc}&e3`-1tvp#zpbex7`E>-kQ&?V5D zkWlr)w}l|sG0r8O`?1v#OT6>NiuRwlNoE}v9m?EtsD539S1<-JyAHOvGW(MOqtivR zUB4Q;sFYMLIFAKT=UC1#c(OsEMdN4}N(^Zq&Z8jZFUuikG9>Ico@N`*let@10Tl(Y zbC$~O7v0(M5vm4Z+oCkt{#_J(M)qFM`u(zL!U213*Zz$$hVRCbb0cVg#W#mI6)wKqz$W>3pn>%45liDw^ETFqD7 z546xl)PqV8>K3nyXIzRANr|LDRv#!*t^i_!J?iea6g7O!@%edv&-;)sX=PAuebbj` zqEpWYQty;ciJrz*|Kr#seFjl)C~TS#4Ih^8k$!_A#CeVY@@!>jZ)W&*(%Tsr zj}x5JkSy%X3G|Zv3HdEXj6+p>{_qyd{MmjZ&}@cJp*ncyy`D~b>q7W5c~WvGCw9fM zNaFDRu#5~pGjbzF*2{1>A|n}^zn6s)%u+y$fIS8t{yUziuPEmB=+Wsbg3aB z7EG(0D^^&jBrb;}6|ftWg^pzVYVDc%nzm8BlQE}zQ|mCG>KU!47Otu}X*KH-1R`I= z)4z;tRejDuKHRN1*B1fL1VwgZ1>nmmpSO?Uj~`49|M#bIj)$#W9C*c>`Gehk?07k3 z(78ie-MDA#y(o2*M|;+BX}7$By<(i*_Xa##+seuG+HG=eH~@&fcYSN5-FIlu17Y*E z2_$t8*(BR_X4rhuvp+MTs9+YP{dyvo@iNGa-Mj0JtCoB-U%~-nIqt-xB?*}=> z!Q#P-xyS<}D9beLe4L>Zi=$P4<WAFo; z1Ik5R)Fjxf^$CpT&ueiU_YIUm`pf}vDZx(8A?rVxK4=Z%cKEL`0Jb!>PqtJYjIaDU zKhpWjZNCpjXWg}=86)5t8vLDqA>N$7%Sv93V{7^s47ba;MVFoI!dtYzOY4lLLHraP z{Y=_C2O5OG>}6~fQ);n(y!*!8gOq}HM&!ixtpb$Ui+17W2$zX+P@)YbqD7#Z7Uli@ zrBaXv_3QPT8-_iLxvgY&SSEYQfAa%5S=n{6$~%?4+)tzrzwZw zT9oli5B}_tx8nw}EAYME$%7l6^~*guhP7_*+|&J@9zd?Oovw*1$7qxG=RtGV6y%}b6qBb!V$-MA|P^@|a`8a$7bdCBCyi!vY_bmgYLMRl- zC%-38_HuR~B;;GTrED8rcYHy6*lTVa5=s}rBqW=k4$G%54}G`g`D$(!UGVeLts>`b zX&YhX&u!-8X@r_$1o}hKG^WKrW+{s6UTu_zk{_)}+9&ZZBNJcpnF>HJ+NF+zPVTLe zC`gtFHJvxE2sR`!ej2t$xyiSg@JRH|BE{jX_t8Q(xkFmFyo|;i9QMH#1m1AM)~i*d zTIk_OMO#hM`sjLjqTltyON}R#ZZvArA>`cua+RDPrn%e+5=P(<;Ah-3Vz4Lp4N&LH zxFthC3Pd#R>3@5}O64(uVZdIEBcGWk?Am*;&Z*F>usHRkvBd0*jQpX1?*)E^vjYY= zYkft|Zv{4_FmNj5&HkCEYsu$5J_r{A>k~PO_(1dJ=7$%DC%FOgM1$sU>8Zo<+Fu~p z*Q=UeemyYo&W}*W8z@1xM?C8KxauaW<-h`Pe60YT8g1atirF9wY4CVa97`{%{wv=; z+1u@n&6OWdOYmOgoto`9nd0RuKd&>1RD4LX^hNVT`OKcfM`ZyXMh-4fLu=X}QIxi>8fhws)z>zwT2V&}Dp=ov zjwy#+!j2DK(OvKeb9YW=MOyD` zHn>&8`!8^(u#|n@{FCd6DQuAQf@-&t->L#BaUzQUxV@5`cr*+w1yMhf)*=x zoV}dHfw3C!V@7Bp$F7vZWsJ)HjZfH!C*S(Kb*aS}>Lp!YXOK!kJ0i_y`faDq(0{xD z2nKPgCy!f>tS;~fHvM>m#5OGT3{UYbx{Fk>IQ7+)$Du0qsu}JQUG(tfXy{piOu5-Z zkz?7d-zLm-Kx4tYk?-DXIZ15C5PGD`+vJw90ZrWZxLXgDeIEVWy`@oi_L45W?ta$< zBh=UUHB$jU0?W}v{okg+(3ZlKg*x%X zHC`?fE9u5v?B)a`JCmh5_IysX;t>_gig{wKP81wYO9{SBx$nUv9T}2xaDa9k!ka?4 z&DbUi4gv@;bRiJWVL>8jdxUYU;8Pfn1~cVN`R_?Xi*sJGfqsoCbiK(uHypUK1>z!A zzcac|az+3kG3G|YIh~iHUwuMQs#il7Q@XDR(`(c~9Ou#QwU7A)c>#D{mj$BI^UsQB z7xL;e-g|u2fw^<$3=5!k}S?Xg7AhdpF^JUM^F zOR=@eQ?P3G^fD@hAATp$c>}y|;(kFo=|N_TZQM!K*wUvt|5;ABU))UOa{#8T8=p!D_~U8%ME>V2Irm^m$HnxvYMmNC$e1*MOmbXBYvJt*bW`1 zZl%R~Z_QFf%3Y7re)wrsQgiulGeY6N<00;VjPvB;e+PpC|KLiUb1}b z`5L?bC0VV^IW?ALoblV0#V?F57jW(KJ=;y%-;bb&k6> z!0N^Gqu>83e#7WZ`$k6l-^*%8ft&a@uz!c;G_D;OsdUPuZW_44LXBQ__Q(5^QL|z` zWp=nMwRRArI5a*G1PRzqnKU?jGy=MOA_knp2fEImd2qC8-M1(B+qU9O?5FO@g~`q@ ziUEPRl!rvLu5hd`=J|ojU?xJ=48cAEcC|Hf09TKV^Gf?R((Vw{{i)&#Swe1@dF_ z8bF7y|FPH!Ep$bKrghtD#m02`dBkvBzdsx(W*XooPL!RJ!_^jDZTs&a*I7Gb9M)hs z+C!(PgGdydXSb=V;dd#1YTSeYb~XavtesuF`G()j_UAli_Q-qbh5glUxc|&{6hQ3r ziu39m5)Z6t@7`?stYxs<7WY~pqtLi#@IPZcv(q0}=kfO9b4hyKeyJRERpi3jWuj3Nkcbl$TzOQTl|+a_wH&*%phVtk^V1ad--#iLN77V8e-0e?YT^! zf-HP+q75i=@h@uR7aS)VE_}KBaxahk+X!O%uYwB^P94otejug)@7Z3Smk0BMn*B6v zpMV354hSh?c~e8_r?@Ejo{6}9f-5|!J>mlv-R*u)`J4n;0UmEd++l+HQ;B>mZ~mNFY%`>JuCWKvbnPFLrOAxRE)+Xt}yt4YA&DG`lK z`7y57u`AO?yx_);#vn&)v1!MO&1;9o=l0aOqYy5ZZ z1?$>YqV;%#ds``o!_hVxyXpE4JEWHC@kz#hhZ=;tt3%0+z@_d?|A=NJD&79wGWo%P z(%wYTgS3r(0p#bZS{*x`8XR_0`thirMoGNqs4H`L`5)xT!q;>7s9dL4xF;iAC0TT1 zfP|s#-gv}OAEIj?N;S^BZe_oQ_h$_6gddG{ndaFJ z{3p4o5Z?DIu-fPK8|mU4dE{&pq&$9x}{~okfwzMlJ+Tjnua5nC<(Ge85&_ z`64SI==z}c8cueu@#f|oSyG^N3$Z*1>-~;V3o7|LKNe0MKe6>STsPbFOuZRb!R}zz zcFz@_i*lB(^B|J6rrT@Ya8V-vq)2Z8opKVK%SxV@4qOB$aU7e~1|>Mrq)Wa2dn^4Y zm8tFab)!=tG_x3jYhEmbe+(G`QT}dF#Ib_W=%M`wM5y2}$XWzOR+r=3xSscSDy1VS zDMimsiD~n%qigf;X+yE6@gt_V4=(f55_A4Rmnnmf8;gu<3acYF1ky+6-Zngk4|cA2 zgyChD{@&=f@4)6atG(O8+w0Nk_yQW>Y0+t2cJu`UT%6RxzSLN`UK+No{D8}$MLe%5Z7xd$z7+H zq_va|EGiLjYcUH9xi5511H5|1&kfa(>s0t#1^eMm5GKyaD+bCw4xax^0m9a%1R|Dx zEd1+sv_CkVrIy+^Txtd5L(1wNn=$)c>tu4w8r|#J3dQK0&F{aK#t1+sat2(mH(;1Q z=zOg*e?=Bf-e6@4YPMFKD-$^Q3b89UL9_R&L9YmcuLzdv53gQJm9)qglViHSw&l#z+UO)(6kwwhneyUv$=c z4&H zwY{VMxu?@_;7*V#@Hh=vZCQaooPCl(v||t{?w>40S2k&S{SArw1YqczbymV#lKXp8 zO;TC^Am-wvjQs0`V5sUl1pWa6(N9_h5cXaCl0X|bH7VOGLpBu|aOXcb^mQZ7+-+O+ zWwZi4gZ&cX_w_olH|F?d*Hb|E#Gy?T0);5%b}ajZwBJS>ncnpO_Q~0L=a0qLSy%}6 zKkc>Y?byWMqTL(ATr`x@r>T2un1M1cX%EEnEFjYmBdkmmS(^Cx>j7!31XiitqVsOB znK0ILnxm(VD?VS(^6KJ7L{&UuPOlF8B2Xc6>l@8>FfMw~Uvb2lCe{AqC!Ooh5t5rw z?6#CBZdJhUx)B7p}ImJCvuH2<%YgQ3N zo3;Os4HJxYYtnS|nqq`9$%vK@+m|f!u`nE@_!nRDk6{iE<4Lln_nH_&dUJLNe^ zL;DS3P(xnN@w+W))Rb{=^V2_Wgn*P`Oc{ynf1NPseSdg(lk&Cq$u16Z{C6B}4U>3=a)uaH0tg_D4~#r!ql5;4_VtN_)sb_o6B0(t)Ip)X7Ov6~Dq6e|Fw zpYm&PP(C)k9UHm7pwz`QsMse}gOYyTPDS!=-)-zNft-h!2S@euiZm86!15SCeRqgi zAkLdX*>8Wb!fFq$uU!IE!FYLRwmBJy)UGoQI=ueX`R!K!#1H?To*UY^Ik_oELCR`bWUXv9zn_v)e@D^=;u0Ms9Y|P7MD&>*TsBrGq4f5OL)4i# za<~Qos`b*53M0X?HI$NQ_)#qByNegESw(?*Z%Redvh~ZU7g0#cDI!|kO^U&R=LX*= zTG+}T_B%aW@NOrL+x2`Bh@`rX5OjKM>X*evOD7%q`z6eZQ`95xMZO+mvc%^?7s2=+ z!->Ust<%q(IyNmoj7YCjk~I&ry+cA|ZVL@7r9>(`^UeL`qbxT7^y2LSD}RQfMNO`c z#C=y1FC}eK%I}%m?JBhm3KObP#m0}uF*F}I1WFWN=XPH!e-FF!W+ep-7Dv!#0PjVC zT><#uJsSup`*_0S$2BCogeM{au9gl!9Zx)o1ml%hpa0lQN{4Ix+Vz0K0`Mz6?3avC z>ly^H6DRA1-NqUA$~IB@9Y~D1zN!^nS|QBkxz*K$P5IuM>yqotF(dxh8LY3k$P~GC zJNQa~_+Jv;ALsBCMv{41_o~bJr1kzKu<+UsY#7$3PuDaIX$ljg1TP?&c8dun`b6f+fPmOfc3*voorAuD8!)ALz z9zmE=$M(#ucTl0&f)2S$r7i%;8K-AK7e{pAhX6C}_7JKR!Q>=*E zI>zmtr1{dOf&z64lKZJ(FOABJ;)6a+3FP~I1>%;DVV~|x*b@YHBXHT8xY8#0=_2|4#`FMq=gy>8??~k+8Sri<=(^<)lp~ z(x7CwP&6=LW~EkW(uA;#Ip)W4GFVCdNL+Q3??o6xP~>Ize#cgUbMRg&d~VEgZ>@8D zV(L#8Bhc`&8jhMSpM1rQNcvVm<^fNn(c$ZFC-Z^v6>d@A48ne63-!K&@ezQI0NjcM zIm4fR4GVL52{XdHDj*+Mi0hq&PoJWMUGxj7HFZVAh2mzd*24onvm)(=CwVs;vtHb! z8(Nivy(f5J`3QNSY_l+kQvB7(G}iQ}XWJw{Rh!dbV;UeCP(eyS67`9(AOJmjvm&>$ zlAFXdqog{#Zg&OlxK}*-bZC9|lgrsqFXM(dbfl$&EaITOcg2A1wRA9|>s;nH7B-A;3h7$0;GOCM$ke znTned0rm$g0EK;N zDLIeIf4j~~dU|lsmuP;r(3G|gn)sT}*`Ie{1`H*kkBYZo{Da0SjiJl}@#nQ4HCTB1 z*ev>vS@?e*4;J6$pUL4-F`U>sXSMh%;F!^83$qK*nu*H!Spn#m2K?M`f4VidAc z964PLdw}u+G{J)IihQ#->zC5Cz&0Sm4}6}{*YPi3uh?S!^rTi>QJdLk4=~-7{QmA} z4usypjbj8c)}WgdJTLz({aR44rW)!b=(}?l55%NpA?+XY-4xE%MgFjYyi~y_UIw_H z5f;U*%QgQZ#-w8p;=|WtO{BNd)`}++rUNwaSKbG&Uq?iAq6rm37QfK3Hf8u1>9F_H zlYwaAtw6VV1n%)D_54O9xasz%W13G#^IPnDh4W)$^XK&(Ev6=yoqx86hIr{(YcPjqnS0dIglTK*jWdpr!eLkr;J&p5gns&Hb zc`F#s{4_L?{o>36d(v#65)*xDXY-LoHT7<3=vBza)TTL!wa1d^=By(Cz%w;b;g1@kCc95U9Rn zzI~K%GFGB(eMqj~a2Qcv3U@wx$6heU2BCF-EJyNxnruGA;cvtJbL!tlfVM=#lN{#) z4NK}~@~oVa?IvH+2w=%!tB7+bc0Ee*R-HnwFCL5!!f)jKj##!_aB*J>ygA}LGXF%f zm=XTk={<~2?$JeLLi3HD@^Wr|%hso?!~gVcGA7=`l1|sItgZ>L3yXP8Nc+#4J6iXJ zsWA!cj3s*FHLRd{5VSdvK@CW8t@5YDi$txkKc5|{c6a>2`X01E~3MgRA3_ws31vt+DENJiEr8BW+} zv%`C)s0`sD&%b}}b6{5l48Ko^Zh%fS(lKeqLBrgy2^mt-T+2y*@(<3}+>2{?xG5DM zl;?E3zf_IlZYqD41VTr(;C)6-CQ6#s=#KRpn;D{z{zg3BuOx4NyF|>LU?^S$VXN>- zdX?KJMwNO6QJuj&m!|{tYVcod>XJWAmk%Qd<1UH3e z3yX0ru`B%}3b)_}wFbrGL}5hZ($ThKeV%>Ausf!PTlF-bto&kBN>u&Fn+@jK8Q`Bi zh>v(+Z<>M%m*Z3Mea=a?vKn_$s@RqKUf<~$?;eKRnQ9HnZ0sFa!>-JBuk4G?m90Ps zmS#h0s9c7=;?ab+m&LOS*PfgHK)>ZZrKfM|tgJ*70C&1t$SWOFxaPeaQZiW4^Ka8M zTEJtc2DL{C(F|^j5%Iss5ZM?>WSS1XfMRl7_RwT)BF8rWuaxl8t_;SO<7o*N-Q3X} zfEytr(d6EQpers`Lna?0+fgJ!GyPDmUu?q7{{@3EzvX(I)H{W9kwO+fW++hAtP7$`Y@-OyKm|JCJij8#Te4JE&w3oa+S1`XXN4^!2|7Wsq?~-;?vr=a7N|`_E-FE zEPE&={pK8g?mQ4v2GXJ{W&?+FOUA$Vj_rBh=H_%mg{v8p6!%D*2z3>!G*rJqni7A8z;wiCOhVZt;3!|9xfM-^RWFyi{)#7W_zr{q67dT1+DxI{BvNk%ok zo@Dd!DU`@dQZ}=Lr0kY3d;f{0EX&*+^g&uWFP%PCZJ1PlQ@G**JQmp`#Wh3Tu>ZwN zsXigqr9eOo7g?vBcP8B|Z22-m{hIlvsc-6xW4$@6{Fs z=eX>H3uwH*eUQjtLAm1cgY83?^BG#+@(*~RibD}UXfAp4(F4PvNukrBruIW22l-~v zd>6Bg56qE?YpbrcT%KPP%7Xz%WWjA;2O_ zzy0!a)Wkby1BaVnMdzVNz(TRWN9GO2E%WjB_8W|TxL|G(fjY<^1qm;4#Ci9(1a7}F z$qz(1QUUpOICJ_7R52-pMh6<93VAyj89U9(pc}4&nT?H~c#cy@ECDB_5||$G_#1L` z`{>zqRgXjx2+a!sQehS<8!*+oyt-=ESJU)=Xv_l{H-662Zj_NQfAV`Kmg?J*xPjXB z6ga{9RaE#UMt=Upy$J%3zq4<&r))&V=vd268jsvXDONCeRcq6{4k%0v>&7}vVvY8G zrvWEdqe^V9rEqzoiG%Z|1Rx}OsCtJL^u5-b8f}V4!P8EjDSpd-3-D_i`C4;P4pR7p zt4KrKxV^f#xB5dO!e>_%~x1xshps8f^f6`A1 zTP$J76FV&k@?A=>+lptg7~$S$;Mrzq?RJ+=nzCZ3rZwAtv>S7GQWA2m?tIcvk>WT_{TrDw+JD;PtZ$m!g7EYLiyx-oe z=3)h5oijW@*_^?OEaK!N=h~;WDdL9rviT=0aeU0oy-&fDO_Ol-!vOWFDpK-4KFHR6 z#Z;%K5Gn9ablk@?hF=p6Y7>TYFT~+}PG80Xu(hE6>)zt_H-B~&Q+&dPbeu=0McUr} z$ukJY2TB!Y+&+Ngh*a8R=j(J!rBt=cGIHTVi}xyHn9Iy#=yQj4-)8NxnMl?pP*%%| zCnc?1o9QvN`z4`zQ^r)`jb>JMRUX5=4y=zpl*Uq|TGZ17gu7oSa4_ql=LyWZB&{%i zV0|rDaygdKrEc*zDj6o8^W_nDyQ$uDBgKFd0SXY#{ZTDJ6M9loK!q~=z7T=Hx?dzh zm_#@H2s=}R>?8pu?3l+Ru5X&tVo<_0$cK>>7y$n|x=*F`Dr3SzeP0ZZ z(@N7Pw6(s}73u7Bz4l9;AC5kvUueD~vDG4!vZ5c9r^O)KN zAn0{r2(q$0=p2>DdGg_mOv-IT13Ev9cFsJx*$*fFb%#aw)XnVQbO#S=zy~*MhwY)jvcFvf|jPcZ%$FHf|o0N5lk7(0qZrGNHD?@@na2O-F zV>$x}+&H0tgn%LGbn4O&Iek@S^><|WIsoyx?#{11JnqKlIOm{_w_bl+G$A9IrUsiWgU3vh@d+TIWa}S(L+8$>>$^$Frv*N4q^1ZC^ zTY}4;1P?jawj$Z$KYzu&lub|2mcQ*gAz%sf5FWbJik5d^cI>>!ocPMp->1T>6PXZWh<7+ z%lLTajSwXwY5XvA+tCL28YY&^W7y~kWI-vjbHMYf(i zQ{4-7L=Wk$pbzGoefNMPmn2F+7QS6!lAID!LXO=$+YD6Z#G#1{Aid<-D_a9`xXMx4QI$7Q$r6eMcVaGxt!(Uv8QJcVl(dBX#_m%**6G=*M4z9ptE3%c=4X~fj?BfrFRI7fQ zXC2rX^LVjAySbJh!Ogh|z`L{ky^lH73F*n(7a4ot@Gq$z?+T_d!*d!u0<6YO$dawkN;1(go^0Fo2ffdmob*hx#)5N$(+N_T9 zKm`A&y^7Y+Mr|QqKG?I>KlaGw^6!7jCLx>aKWTfTMZ36kpq6p9jgGvsELP!AB#BF!)?Z6 ziHwYt!-vz0%dgb$6zDmHY>2`K`Y2sLjrfoDlSGkoVWq18JP^@X@DqX4?%`N@)bL*)5)V`W5u-@Ws6>w8h~w@iDAk~=Y&Dj+al}|F=3<~6 zf5izR$#$rhj`sE5YMGAnZt0Qg$#72BOt&JVl(LXYk@G&`kEZussaRJS3pms3_^lua zk}O7D5EdQN=0z1Vsu`En&P$sVZ&Z~ zuik`VN|eO&Db7)6YtB{?Ouh_2NaXCku*)j)jev!p7~a3(Z>g5I~{f4I?|d7 zWt>u6pM}H+J{Mc+8R=B~J%i?J(msew+X@XuD>f-qNv@B;`t{?upw5a#2Q_3xRbIo3 zL&y+sPi#q++PvA&MX2dwTX%6o>s$A%O-J@s&I+TIKDcwY-Si#JpyMnyE+d;ImUVjf z7oV~-0eXpPrfEzl}FPi=k8FEdXH|ARpw5J_+V_9vTtP#b35y z-F`r>nXm_b8S!_)(Z4xgP0`q3MV8oLJ%FFZNS#<$E#k3D%SIzeG&J5gk%ZZ4tbBcc z{S3a+vP(i!LVda6u=R2hX;_g`RLg5w6VX;eBB2!JyhFMNhj+7P^L>PcTAzebQG`=E zIGl~XzW5!1sf_+_>yi_%0bITNZ4#FlEbvKZsM~aq;m+o@z*@iM(bJdOdH0yZ>(|HW z{O{iqMm~`4u4hZ^5zxr>g<)URP_!;*&2~`4QPBNIG!5y~4Y@KHkOxO0^{TyqSZ&ri zh+m`#w!eUO*k2Nl6L4vpAP&X!U^Wf}(}Kz%>@{ge!}^~(-@!m_;;lID43G(S zmMc7-3+4RkO_d4+Gx5f#R-6^Sgg?BWo+#}z_!hmUY6y}~Bb|gE?`~)Ncj*lF zxm~F{8QZkI#ynizt0&GOr3J(}{8!NjeJFxG+nTDl{j&V%&?{!Y}a4 z-k=?%dL%~3X|3!Ujizd0W49PgiW@dx&<&#sMhU;gwznSSmAL~oaagI^4iJ_vZf^ZZ zsR0fNiWz>Db3GTbD&9y4I5pbR11{945~N_e8*j5t?oZva8-QS^LzL=H(f5#6=K}I2 ztzfJQ5;F7qR&6kT+_XISl_s1wWe`W!56|(zm_*%I@9z`)h5E=Nkn#DVYOdSj>~#@xg1do>VbZ3I&YPiX=G zsF3stE0q~1#!aADQwS@(`{X?%sFXa~U?8wU)0t)5N)?%+FT3YI9uz<^C?oak4+>pK zta-`Z!I7VJ6sgs_`A%m877UL*aw2|-BgADd8Ie@6qVTI&um?2X=y#4@YlUDj zNdUPKY@qT<86Qy2H?f){XVWtPDqj4Mk2STiQn>SRX5NzXpVV`uOR2Mv(A9vXiL9gKK&|P}GAM=|0^Aas_|a1xvpUdfwD!d|-FEB;lV|Fpu7>qR}qU$cKyILbUUp>{m5#j-_t zX!@`9!3)7e?1)FmT>xHZZ1KO560#`|moyt<&P5o}n_P8n=y)8xj+z&~H6iw$M+fzA zd(4!_%^U~?;a1v`KQX)tRl2PipwR<5lp}Rh*S7BtkZ4Hwp`uPKg^p9sdqtj zL(-LK9GOj7v+8(m3c*Kv`eXHq{Pw%}K6nY2SLxk3=<2rn;toGa&HB?Xqy0yveNuMd z`0^}zC`rQ*sAA`mNlEUT`BV8wF?3=$Ofh2<1@J--CF9(bjP4w8-39tdO=lK6;Zhtr zc+$o-)Nbzq&C^Or!x( z8A*)EpHX`0UDyRat$#0i{`QqD`Zv;4ix4$&O_J3OxABRpnF~06X=-K{Wc;)(bbR^K zzl}s1h+jIw9~_r}u_}l4+IBC)hNh;9V~$%S)6F;~iUV=&{M4g>9+@bf!G?uf*(^w0 zhGN=>#};(&jw>mE;1q$5z-7^^DCpeZ+tMPPDy!4&pMTmERlA_#U~|M#0S#tZPD$qz z6BrvLt@%(Y1&05;su^M?G7)l&p|KS?6w&Etwkz7{N^7Ti>3scv6`hGc6aF8^UBx#_ zCCa&!tCF))WGh1CsN99g8Oa>EXH#TuIYx+8lB-C`S(|(A$z6`wm}_E(W7Ce`exJYL z^LTtd@AvC?uC}?z!xkmbYed%L7^70p18+^m_q(UM#nKW%-OT>n+Bb+l zSqH8|`QAur+(M-);uX>tGc|kis&JCVLCiFTcIM*wLY%(W#b3b1A(PkVD65)K756nZ zU!1QDD_T(#ojel4xaZ=|lnA2wdcIZqO_-UrL~QZFOjIuJ=a4CWL+<4QMr#Lb=G>r} za}UK&8?CNGz1K^f!ekRokg5?WhAa*EQLe@kU$}BRBle zl~PIZkT17oV7f;I@M%24qOn&T#%ZhjPw0jl$xH3&1x5sALWow&=#7V%$|iVNEQO5p z4LqBiwQ&839J^6njLC@)M&JB)*hQr1dF<4ckKyN~1foa7T)D+A&o$9&94Y+h*=~x@ z%Hks#N{-F*wd0&ON;QE|2u(KiE8yby>4YE5&N$D|BXF_KlYo55o*(+2bx2|I4LB~^ z?5FKhc*p7S1e)v6Uy3V~x&nX&>BuW0ARwK5fJL9vPRPjbRbE|Ra*&*Ts-Ylh8sI^X zr9a8Sjk^6c^+DjZt=6CSeiMAPb}$oR6K{YWK2Q-qOU-;B4YhktnZHXPgXvpBeN^)^5%}xrU_rdc%d33*q;Y20HZM&X0bm zJO(=|)FlC&4kyHGrYO&qQ%GkcSR^c`9UIE@a&8g&rXT?Mm70nBFOpIC4Ila78t!Lrq{E!Q#_v*6R__?`ZP-ZeUz8`VfE{dGtsw#QMg;-0?0H%LxEK6Nt`L@w4?%v%Y=A~fpKd# zF@^&oS2_Jc#&&4l{aSvq-Yq({;}!Vx^8NV;pkgF#kiD8YREuKq*yTFv_#>$uRW=pU zjs6ku^j~5Z2{|^MN+M$%cg{<&9V`Gw60eyyf>9JT0q{M?J44f}8|zzX2BOWQU#jjZ zB|5_0pjSU-kG*~F#e#VC+6^e^FkE`V45_yi3TkvcnDI|#e4*6e*=pr$npT26OV;; zGS?{NSCyn1Zh!e;`expBc6$a~E;o63zh|YEaX{ixwL5FU_#t}BhAE>7bSv29=Dj6t z#O$Y|?9BgL2aqJR{Z~TWnY*W5sv;Rr4=TSMHuwnM;ST5jsN-2%ddJWIu+8{Bk$6S^ z5_Y#~rQQcf)|MCnZ{8HVUtRBU*uDLrdr@Skvl<@YL9;w=DwlVJ#;CqnPrzc2NtsoP zH=GQacFI{CS`dc6i8?w`Z2B3h_r=R=Z7eD8Umwa?I^W0M(72{;AX9NroIOx$J-avr z3D}0M39HmE%>&R&Mc|d$V{B3QMxV$WQPtcb`ZMSJ7MmfF18xNsRAHPfp3b*p7&*Ro zMN}7QMXfURQxwV$TNL>GLRc?+i3~Smjo99t80Ffn=MMKZ?9VnWTd&dYhy66ayIFY) z+=%5P4WG-Q<=}k^1N;BAtI|${GL#rSkb4uTFedDTJp78JN;b}Xy?!$ z_8rsf9Kt?ghHm#EMGY=|eHL8EIYn*925V#!w_+K(KezLZrq>}Svl%M|e_ z+2yZ3ak4Z&d?KjQzauYB0|ef0?|ty<4moc5Tf|7N(zpN9SdDl8@N!qF90VGQ8|yzK zd5hPFE@AOHJZ|{*q-aV$)O3-j2}|31_uf75-w$4bQpzvzCbi4iMtC^7Cn=>Gy!^#G z4^aK8RPL=auT;#@St{gdl%cUWXl^4!VG*@5_VMXn?=@RJ$zl=xNH4wcovlDccc#*8 zb=#*nMKzMh(w=y?!DqN7uR^Wp8S7;63ZEIv+S6(ZO{IQ8DV^D}jwueTTtE$N;LufxV^OO+#+psO~ocX-5I93%G6mctSgcFPGgxBzwLYI5NM1w_~nX{A%- zQ~=hgA4ezp@&>B)N8%dXPMo`!EA+VX8YxrY?LyLm5k|R7Q;J&c%a8+He}}Y*d+7ot z3jm=ZNO5QRf+MK_3&U9h!ZqQu;(&A7wl}{Fe^n91bm|caHnK^A4akvWjmIw- zR>sehuo(GwESIH_SFPuRA`b^K7W5VJZ6cUi4e!X-WiK9hBCHFF|Gk=*bQOK?{Dr{p#W(XqZOk*8qrS>u z=a;5ZQ9DH_5r&de032c*a?-p7T6f`b9elxdonok5a6mu#RJd4)vgSlZ`Td=nHyxP6 z*_#KuQqrJ9kiH}ES)RHw@yeYEJ7g!A+;4LN%5mv9^=Z?Qv+d7V7Q-ABzB_zFrRR$XL;n*&xnB?%ty0QwqX8=6`=H97Add5 zgEhoA+cZXOo_Rr4E#}}EZGF>C2PRo{4Zu~+J1M_6 z+B|+8Jhpp248{tsGq3Y>pI)@V>; zn&kyfS7nZdJPeDd1v%9~SaTIr=2<`o!O@uM!(F0RBCM#=>0R=5Nm;rzvuj5^YidNF zR``BOU+00>{Eb!e!mcB5>#Gp68Od{|L5Z^aqVUT<8SabV_M>tJuJE)WP7dbDL1ONc zVrhMivCHag8PMlW$Tz(z4(CqBszunvuvkSD?%TVrM2XFYhbQI!`?&Yd(^WH7>d)!< z{nN-d#(qJd$V1mT9cFja#ZgNe&LIl$?+Nu#BM8v!;>SfU5iv=uhBI!-aZ>>^(A&U$ zHh&XKymV0>zYo?0R)&CSuY~j#cxv) zI9T@!Jw=tz?c=Szwvt53?o_uPjImq+t2~L48}ewuEXCV%0ZgRBE|^l}vZI2)d7pXt z9%rO;7gnwd%f3oGaOd1+fcc5Zrpv-tC#><20gn{Or+$3Vv9rF|j1_?Aeg#6WO!RUd z>+nUWHMda35L=2@S%G)_nl!mh|FWTrHisA%6RK}J9SMXYVkR`s?l1D*oumUChlgSr z87&u&&8+F6UA5d9`kmOKK4Fxd^77`nwmOcJN2~vKy6J}4bbl4Q!#8;XVdJMp1;!H= zlbbX&P^%=tQ4^8*7-?N+G<}NRJyp>=+Yxm8r}NQ1cdRf-kaajIMtE*W9u%mj1bZCV58=2k zE_ORNGYs`vC#>wgbSV_ZlOPO&UMj~%5e<1LsXu|*=|qfOymXIPRHu7kQn?H?J*Fo6 zmF2{h2I}8NlEo4;4THSQ}dFv3UkI?<)NqdlxK@_#9ti2PrKLi%2 zaO*zEQiWN>(O=fO{uF#=(YIAyJrwNVslH3hQFi<*pKE7?MU1TBV%)U$E=R=V#n_m; z$i7*Vo}QqVOJ&#Mqk0TY7cUxfzg6OyLa*}UQc+A{e2C*w$h}KiFY)>QB#VSZ0wrgG z;>i+3J!SO(9#C%Qsi1E0A@JdR1W^P17T2A|*;3Fq=H1s52*~M|OZ(}ydlZ}ZUZn!` z5F5&xsid-4*m*Dz*lieL8WJg{6>kIlYlr4|@DMluPQzK2;5~`H8=nWtH&5}3OYWSj zXc4BFp+z&`D-p&{s;a*Z=rnB`IFBnk*MjD0FDg4@aQrdWGAYjj9$1Xu#pNiawx%+) z72r+Tv>&Yk$i)z9x(hlQ#QY&iLNk$Yy8Sn(l3m!Q(sqC6`s=g>beQXeXvB+Hbrdoc zyhm8{^D5Oj=PN^d=DrcE*LJDq&uc=fKJI(oYW`r{fJ=>s2MR9uZlp^l4#0C(w0qF<3R$nCK;ldd{ zlP=_V)gQ@d$EF&IRls|+6<}&70V>5YYmGBL32tu#`!&IjD+D-&05g~7bGQ$KOJfDc zz8}HR6%D6Wr-G<6Uwokb@(9NkYE%+;wik0!TSQdQ#MhSg8)WcVvb-kZgMR+EvtTx1 z=rU{5g=y$Us(m=sX>%UkT1^6TY(_HB6u~&HRp5ma;R4gfg9}kWj_h{A;>E+bznO;% z#LOz0{rRc%?ug%?91W~E6kU59#om^aM_;y)&mEXhS=KEZn{TaP?0=ZA`9y2flXk#B zWqmjV&|1>$Z?#XbEEF{V#h&B~BzQm0J!{M5PC!fX(0X_6UZ^IDa#t}F;4Zx5N;GQ` z-sXCBVR*&*N}_rZ$^}e|GWszC51zdRwJF`z9yDVT=^BEni%HT(76@%nv`2lO>kn=a z$tBk=3=Xx|XfnSCEK?Q*b+x^=j#{i?E|>c6NQhvHwRZ`)%&WcK{l0~<6CZL_ zBDeE#$JH3kt2Tpk;HpLYj%ui78J$s@f|>wxB; zV!n?%v@;e4kNmEKwod3BDn)&KN^wls}WE98?}`ogG~W7%*AbR-Xt7jhfh z#SZhfOyVPYs*AqSg?BQvajV2uHQmw_{XMbau*^&<$fJ#GM&Gowk*KWJdT3@}`F$qY zcOShO9^A252-M?~mBO|gXFI1FPtUyP5C={U zr9)lL_vbJvs)8-94qU%-fy3#QN2&nm3n$?cc0y&!gBLDfXy(T+|FG1R`FXi%WAxnH z-aknn@`?cS^&nt4KM}uRBU7;Fgr;uyJwXAIKY9HzOt^lVi;7`_E{&aB;uZgUdwm>}*NAV4eKUxa}N8$*BzCE}DS3MX>>eMm>eeYEy}#QXlt zX#Y-;I-odap3l4-13llvCJ6FP44l!i>s?B~Xxth_72%pV(}+y!p$8nGsyIz>sXE`2 zsbL=P%ssO1GLXRL!nVO7BZ;|V{eENNehua4>#T#1Y}!^B29^U%9z1yvkl#LhMGTZa z&rz0ARdx~F6zstom)bLkc4{6DbXh85}FxVEdkLi z$&Z_E!$W6Nxa})i>;>^%qF}fFbfT6#5720~gTxR{yR|%7m?!hX+T4Sf1Kb1Lvzc>& zfKX6;q)Bgq!#E9#{s2!dhkM7NyedKEh~fb~Y;y2Jx5a?)h*+zb_a6hV*c)x`;Q1#w z3xJ56(Thc9qEygNA%C!{`z+OlzSo;v0G3r3-5A8zt)@26_A}r>sl1)8n1%x_X+x?CwjqDxeM_(>kwQ?t zckV}7=1c^~J^588R}Yp}4M4jApk6l1qYv;FWwW93p6V})%ixtad8WyhYqet~1Gze~ z-tyxnHlIp#r#^oN1g}D_%%=DS%RY)@-3r~NPw+$kWIO+!f&R0I?>bH;3d468s({1B zXr@3jzvZZlCd}va-txmQ#mS?*+%=J;8yQy+ODkHXNTM4f38%IZ)hKKzkGPv^6r~^`$$~7=Cv38mE@XnbOb-2psK<3!<4&L|O{_KdwXGc%4-3eqSPFI>e zbKSrNYy76<*wnj%8JhrK%_RWj$LnccB>%+M*IQ(rY37Dw&lvoZNQ}~|Fkps(^Ouy- zc0*+%G#^z<8yYAdf?f6s@t#^S=KAKrhoZQ5GEN}DC%iOuZX*XDXp}u@u0xsYxW_ouBxwM}`0H_=wyA| zE8)_i>OKbmw$;eho9to8`su9p#>P@i{m>v!HYrMx`by5{s2fgqV%IN2u``G2{;S#} z7(C_JHL#g4!TVKzH-;cqyTWYUbYJYD51;o&OW{neeF^8u{&=>3MOrA~?FdpJV zSYd`@e7yIF=r>t}q62JMgr{OifCEZ+OqL@U0qnPCM~vzAVAWSinbTGsoAj%8aAv*o zuWD3^SdZJGJp`)nD#ZmjSqj)I^?gr($f>AJ$#J))lJ(;mu}!}FFX04CDff;uyZT$@ z44yzaWcc(;REg2B-keS7+|){0hao1Ky6u~P!(lZL$EGcIp3i^I>#mUn%_C6l5a^P! z>!#Rsp#cEt6KG$x)xQV)s9bQ9Udl5Q!j2ysPa78L&HdLqdHuyUL@dr}NJnn_or0#u z)ho3h3FLS-gf8mRizhfvtzM0;@IyPk-^a6h9oP}I+0o=6~N{Rb6BX3y4 z5iV4cW^ZW|en}IQMT+TnetP+OC=>YD9ENf2e>0Cg{8J!oHPOl6dW}=^aM*Unss)1+rbRF+Sba7% zS^dsY{r8^f?G9m8-(u)oUlX_hU>wvBfuHDZcJ$scFzxx_sGe>&>$_MnNuJCsS&yi* z?S#{Ys<=ZKzX4zFL(&!$TFy;eGq<}lHtC1pKHZ{AsJ|Suh|q}G&Hj5`YQ6kg>-TLH z@Kyi8(;^duC=6+%3mPF4l)6`@ir!|39??Zz7I ztV%vhgYW=#7VO2Wemv>Gq}*g@;q;+w3>`V;kYxK;6FPKtq`3YYe^ONz(}&E_>Aq4d zi=*$Z4@FD3K~IDg#yC21E&p50#uK=4t=!6S^zF}6jtF|OY2C#@@z}oC8anXk#M0LC zd+<`)JID$k59QE^GI&PGf^LN=Mk)-?G zAp#plve>m9P|9#iZEcyjfDFB2Y_A!F^9a*j3Pm!I-(LKYNI0 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/foreground.png b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/mock/mock-config.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/module.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/module.json5 new file mode 100644 index 00000000..dd5b7a00 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/ohosTest/module.json5 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry1_test", + "type": "feature", + "deviceTypes": [ + "default" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/List.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/LocalUnit.test.ets b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/entry1/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigor/hvigor-config.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigorfile.ts b/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigorfile.ts new file mode 100644 index 00000000..4d72939a --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/oh-package.json5 b/ConnectivityKit/NFC/HCECardSimulationDevelopment/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/ohosTest.md b/ConnectivityKit/NFC/HCECardSimulationDevelopment/ohosTest.md new file mode 100644 index 00000000..8287c8a8 --- /dev/null +++ b/ConnectivityKit/NFC/HCECardSimulationDevelopment/ohosTest.md @@ -0,0 +1,7 @@ +# HCE卡模拟开发示例代码工程化 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------- | ------------ | ----------------- | ------------------------|--------- | -------- | +| NFC功能正常启动 | 设备支持NFC | 启动应用 | 应用停留在启动界面,输出预期日志 |否 | Pass | \ No newline at end of file diff --git a/ConnectivityKit/NFC/HCECardSimulationDevelopment/screenshots/image.jpeg b/ConnectivityKit/NFC/HCECardSimulationDevelopment/screenshots/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9129c2132ae22b21a5134cd75d5433dace7e2234 GIT binary patch literal 20946 zcmeI1X;c&0*7r*h85J3nR>9bUMn&Z+;J}b_!iY4c5fmp#+o%k-O$#D(>b43fC}}{Y z1+^3qM9?&%q6kDLBO-=TW{@z1QIZfsrmA`leeW~fwcfSf_x*DFLn=9IWv$eyoPEx3 z@BQC9L@V(HTCi`A(;jHntXa?x-~|!A&^iksE1=o>v()rw5tR@LtW_OYG-K31uUWIz z=BUpFOVZW>H@sK?manEZ8!T3R&Kz)e6!;#Rqpxo8?ZzE*4P8%YtT<=1>DR;unr1um z%N8D}7noc97a>rqpMTK#;0qz4Vd0l9N5{loxf++0eBklH`Y`Y+4=#V&nd z*KBYGb2Mh`nl(EF3^n~Z>fdghYp}yrk*hwIz3-JZGG2q%DuzT8D&jjd*Dnb_P0m z-by^|W9Ml1n;m0zsTTH#fWExEM-tf7zGDjdoS9WiE+cQE4vpV)pcspHlZw%y%~5Ci zNLLZT0p@ko=&5-G%f!FP<$2G@xcCH?W<-}Xz}-myKFoQ!AOQY2jGcCJjhz+~P<4os z8B<%lqvmfxl5-ees@F-g33A!==qvj!;$S;b#Wa$}xyWO$z8K#_lSed}CliqWA(NIQ zFC;I?2_DV7Ic;6av>8`?45Ul=1oSgAEr(ZSnZJvG$OJS_8)_Wa!bT`{Xg7<$EMsz% zCQZ3bKy~2+REA)$Q%lH(@mp0)siSU~kQGNtuFzSY1YQe!R;}!S{F1C|^`Uwcj!M@dU z2jAl7Cv48h*fF9Acq-6|gasuPTEp?(>jaf=z%CeuGWRFrcZ0Re2&g{r&_M=sYdmAZ z1jQ-}@$T9+(tO%@-G46A?46@o3>E8S#oq&!6Z~l>MXhE6;>4Ue&?z6CS{QSh8`mm$Bwdt(tM1;OUh9;5KRs@Z?&|b7=r1uGR^J!j*S+iGRUr79Vl&lW zf9z;`5^n6g(#xC<9Qhi%iigO3 z8f%!PR`mTy*;&LttXSiV!9fY3=*b>=F>I^=A07+OoI1um2xJRwH@5O>_+M8szox& z66KBrSYd1lOS?QIIB>GTRVc2z14{$jg8JypY^+m`U*piU=xEoDpn$M5

v5&OnXP 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 SK*fNH0Tlx(2DX!kw*LScNOj!+ literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/.gitignore b/ConnectivityKit/NFC/NFCReadAndWrite/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/app.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/app.json5 new file mode 100644 index 00000000..f2ded134 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "app": { + "bundleName": "com.samples.nfcreadandwrite", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/element/string.json b/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..30b97e99 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "NFCReadAndWrite" + } + ] +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/media/app_icon.png b/ConnectivityKit/NFC/NFCReadAndWrite/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/README.md b/ConnectivityKit/NFC/NFCReadAndWrite/README.md new file mode 100644 index 00000000..b51be9b4 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/README.md @@ -0,0 +1,84 @@ +# NFC标签读写开发指南 + +### 介绍 + +本示例通过使用[NFC标签读写开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-tag-access-guide.md)中各场景的开发示例,展示在工程中,帮助开发者更好地理解NFC标签读写功能并合理使用。该工程中展示的代码详细描述可查如下链接: +[NFC标签读写开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-tag-access-guide.md) + +### 效果预览 +|启动界面| +|-------| +| | + +### 使用说明 + +1.启动应用 +2.应用停留在启动界面 +3.输出预期日志,功能启动 + +### 工程目录 +``` +entry/src/main/ets/ # 前台读取标签 +|---entryability +| |---EntryAbility.ets +|---entrybackupability +| |---EntryBackupAbility.ets +|---pages +| |---Index.ets +entry1/src/main/ets/ # 后台读取标签 +|---entryability +| |---EntryAbility.ets +|---entrybackupability +| |---EntryBackupAbility.ets +|---pages +| |---Index.ets +``` + +### 具体实现 + +#### 前台读取标签 + +1. 在module.json5文件中声明NFC标签读取的权限,以及声明NFC标签特定的action。 +2. import需要的tag模块和其他相关的模块。 +3. 判断设备是否支持NFC能力。 +4. 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能。 +5. 获取特定技术类型的NFC标签对象。 +6. 执行读写接口完成标签数据的读取或写入数据到标签。 +7. 退出应用程序NFC标签页面时,调用tag模块退出前台优先功能。 + +#### 后台读取标签 + +1. 在module.json5文件中声明NFC标签读取的权限,声明NFC标签特定的action,以及声明本应用程序的能够处理的NFC标签技术类型。 +2. import需要的tag模块和其他相关的模块。 +3. 获取特定技术类型的NFC标签对象。 +4. 执行读写接口完成标签数据的读取或写入数据到标签。 + +### 相关权限 + +[ohos.permission.NFC_TAG](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionnfc_tag) + +### 依赖 + +不涉及 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo ConnectivityKit/NFC/NFCReadAndWrite/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/build-profile.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/build-profile.json5 new file mode 100644 index 00000000..a06288f8 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/build-profile.json5 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + { + "name": "entry1", + "srcPath": "./entry1", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/code-linter.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/code-linter.json5 new file mode 100644 index 00000000..4bacc9e2 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/.gitignore b/ConnectivityKit/NFC/NFCReadAndWrite/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/build-profile.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry/build-profile.json5 new file mode 100644 index 00000000..4e956928 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/hvigorfile.ts b/ConnectivityKit/NFC/NFCReadAndWrite/entry/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/obfuscation-rules.txt b/ConnectivityKit/NFC/NFCReadAndWrite/entry/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/oh-package.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry/oh-package.json5 new file mode 100644 index 00000000..dbacc308 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..d244d203 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start front_get_nfc_tag_ets] +import { tag } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { AbilityConstant, UIAbility, Want, bundleManager } from '@kit.AbilityKit'; + +let nfcTagElementName: bundleManager.ElementName; +let foregroundRegister: boolean; + +async function readerModeCb(error : BusinessError, tagInfo : tag.TagInfo) { + if (!error) { + // 获取特定技术类型的NFC标签对象 + if (tagInfo == null || tagInfo == undefined) { + hilog.error(0x0000, 'testTag', 'readerModeCb tagInfo is invalid'); + return; + } + if (tagInfo.uid == null || tagInfo.uid == undefined) { + hilog.error(0x0000, 'testTag', 'readerModeCb uid is invalid'); + return; + } + if (tagInfo.technology == null || tagInfo.technology == undefined || tagInfo.technology.length == 0) { + hilog.error(0x0000, 'testTag', 'readerModeCb technology is invalid'); + return; + } + + // 执行读写接口完成标签数据的读取或写入数据到标签 + // 使用IsoDep技术访问这个NFC标签。 + let isoDep : tag.IsoDepTag | null = null; + for (let i = 0; i < tagInfo.technology.length; i++) { + if (tagInfo.technology[i] == tag.ISO_DEP) { + try { + isoDep = tag.getIsoDep(tagInfo); + } catch (error) { + hilog.error(0x0000, 'testTag', 'readerModeCb getIsoDep error = %{public}s', JSON.stringify(error)); + return; + } + } + // 如果需要,使用其他技术访问这个NFC标签。 + } + if (isoDep == undefined) { + hilog.error(0x0000, 'testTag', 'readerModeCb getIsoDep is invalid'); + return; + } + + // 使用IsoDep技术连接到这个NFC标签。 + try { + isoDep.connect(); + } catch (error) { + hilog.error(0x0000, 'testTag', 'readerModeCb isoDep.connect() error = %{public}s', JSON.stringify(error)); + return; + } + if (!isoDep.isConnected()) { + hilog.error(0x0000, 'testTag', 'readerModeCb isoDep.isConnected() false.'); + return; + } + + // 向连接的标签发送数据。 + let cmdData = [0x01, 0x02, 0x03, 0x04]; // 请根据需要修改原始数据。 + try { + isoDep.transmit(cmdData).then((response : number[]) => { + hilog.info(0x0000, 'testTag', 'readerModeCb isoDep.transmit() response = %{public}s.', JSON.stringify(response)); + }).catch((err : BusinessError)=> { + hilog.error(0x0000, 'testTag', 'readerModeCb isoDep.transmit() err = %{public}s.', JSON.stringify(err)); + return; + }); + } catch (businessError) { + hilog.error(0x0000, 'testTag', 'readerModeCb isoDep.transmit() businessError = %{public}s.', JSON.stringify(businessError)); + return; + } + } else { + hilog.info(0x0000, 'testTag', 'readerModeCb readerModeCb error %{public}s', JSON.stringify(error)); + } +} + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + + // 判断设备是否支持NFC能力 + if (!canIUse("SystemCapability.Communication.NFC.Core")) { + hilog.error(0x0000, 'testTag', 'nfc unavailable.'); + return; + } + + nfcTagElementName = { + bundleName: want.bundleName ?? '', + abilityName: want.abilityName ?? '', + moduleName: want.moduleName, + } + } + + onForeground() { + // 当前Ability已进入前台状态 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + if (nfcTagElementName != undefined) { + // 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能 + let techList : number[] = [tag.NFC_A, tag.NFC_B, tag.NFC_F, tag.NFC_V]; + try { + tag.on('readerMode', nfcTagElementName, techList, readerModeCb); + foregroundRegister = true; + } catch (error) { + hilog.error(0x0000, 'testTag', 'on readerMode error = %{public}s', JSON.stringify(error)); + } + } + } + + onBackground() { + // 当前Ability已回到后台状态 + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + // 退出应用程序NFC标签页面时,调用tag模块退出前台优先功能 + if (foregroundRegister) { + foregroundRegister = false; + try { + tag.off('readerMode', nfcTagElementName); + } catch (error) { + hilog.error(0x0000, 'testTag', 'off readerMode error = %{public}s', JSON.stringify(error)); + } + } + } +} +// [End front_get_nfc_tag_ets] \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/pages/Index.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..ba890239 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Front end reads tags'; + + build() { + RelativeContainer() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/module.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/module.json5 new file mode 100644 index 00000000..b8826c54 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/module.json5 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + // {Start front_get_nfc_tag] + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home", + "ohos.nfc.tag.action.TAG_FOUND" + ] + } + ] + } + ], + "requestPermissions": [ + { + // 添加nfc标记操作的权限。 + "name": "ohos.permission.NFC_TAG", + "reason": "$string:app_name" + } + ], + // [End front_get_nfc_tag] + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/color.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/string.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..c175394f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "readAndWrite" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/background.png b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/foreground.png b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/dark/element/color.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/mock/mock-config.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..a99e1d70 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..f40533d1 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/module.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..be4685a1 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/List.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/LocalUnit.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..b7b035e9 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/.gitignore b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/build-profile.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/hvigorfile.ts b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/obfuscation-rules.txt b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/oh-package.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/oh-package.json5 new file mode 100644 index 00000000..c4e87688 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry1", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets new file mode 100644 index 00000000..3a17c53f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entry1backupability/Entry1BackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class Entry1BackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..6817624c --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start back_get_nfc_tag_ets] + import { tag } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + + // 获取特定技术类型的NFC标签对象 + let tagInfo : tag.TagInfo; + try { + tagInfo = tag.getTagInfo(want); + } catch (error) { + hilog.error(0x0000, 'testTag', 'getTagInfo error = %{public}s', JSON.stringify(error)); + return; + } + + if (tagInfo == null || tagInfo == undefined) { + hilog.error(0x0000, 'testTag', 'tagInfo is invalid'); + return; + } + if (tagInfo.uid == null || tagInfo.uid == undefined) { + hilog.error(0x0000, 'testTag', 'uid is invalid'); + return; + } + if (tagInfo.technology == null || tagInfo.technology == undefined || tagInfo.technology.length == 0) { + hilog.error(0x0000, 'testTag', 'technology is invalid'); + return; + } + + // 执行读写接口完成标签数据的读取或写入数据到标签 + // 使用IsoDep技术访问这个NFC标签。 + let isoDep : tag.IsoDepTag | null = null; + for (let i = 0; i < tagInfo.technology.length; i++) { + if (tagInfo.technology[i] == tag.ISO_DEP) { + try { + isoDep = tag.getIsoDep(tagInfo); + } catch (error) { + hilog.error(0x0000, 'testTag', 'getIsoDep error = %{public}s', JSON.stringify(error)); + return; + } + } + // 如果需要,使用其他技术访问这个NFC标签。 + } + if (isoDep == undefined) { + hilog.error(0x0000, 'testTag', 'getIsoDep is invalid'); + return; + } + + // 使用IsoDep技术连接到这个NFC标签。 + try { + isoDep.connect(); + } catch (error) { + hilog.error(0x0000, 'testTag', 'isoDep.connect() error = %{public}s', JSON.stringify(error)); + return; + } + if (!isoDep.isConnected()) { + hilog.error(0x0000, 'testTag', 'isoDep.isConnected() false.'); + return; + } + + // 向连接的标签发送数据。 + let cmdData = [0x01, 0x02, 0x03, 0x04]; // 请根据需要修改原始数据。 + try { + isoDep.transmit(cmdData).then((response : number[]) => { + hilog.info(0x0000, 'testTag', 'isoDep.transmit() response = %{public}s.', JSON.stringify(response)); + }).catch((err : BusinessError)=> { + hilog.error(0x0000, 'testTag', 'isoDep.transmit() err = %{public}s.', JSON.stringify(err)); + return; + }); + } catch (businessError) { + hilog.error(0x0000, 'testTag', 'isoDep.transmit() businessError = %{public}s.', JSON.stringify(businessError)); + return; + } + } +} +// [End back_get_nfc_tag_ets] \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/pages/Index.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..a3795272 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/ets/pages/Index.ets @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Read tags in the background'; + + build() { + RelativeContainer() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/module.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/module.json5 new file mode 100644 index 00000000..adbda334 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/module.json5 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "module": { + "name": "entry1", + "type": "feature", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + // [Start back_get_nfc_tag] + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home", + "ohos.nfc.tag.action.TAG_FOUND" + ], + "uris": [ + { + "type":"tag-tech/NfcA" + }, + { + "type":"tag-tech/IsoDep" + } + // 必要时添加其他技术, + // 例如: NfcB/NfcF/NfcV/Ndef/MifareClassic/MifareUL/NdefFormatable + ] + } + ] + } + ], + "requestPermissions": [ + { + // 添加nfc标记操作的权限。 + "name": "ohos.permission.NFC_TAG", + "reason": "$string:app_name" + } + ], + // [End back_get_nfc_tag] + "extensionAbilities": [ + { + "name": "Entry1BackupAbility", + "srcEntry": "./ets/entry1backupability/Entry1BackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/color.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/string.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/string.json new file mode 100644 index 00000000..cf7f724d --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "readAndWrite1" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/background.png b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/foreground.png b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/mock/mock-config.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/module.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/module.json5 new file mode 100644 index 00000000..dd5b7a00 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/ohosTest/module.json5 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry1_test", + "type": "feature", + "deviceTypes": [ + "default" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/List.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/LocalUnit.test.ets b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/entry1/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/hvigor/hvigor-config.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..3511c635 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/hvigorfile.ts b/ConnectivityKit/NFC/NFCReadAndWrite/hvigorfile.ts new file mode 100644 index 00000000..f3cb9f1a --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/oh-package.json5 b/ConnectivityKit/NFC/NFCReadAndWrite/oh-package.json5 new file mode 100644 index 00000000..87fd23ee --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/ohosTest.md b/ConnectivityKit/NFC/NFCReadAndWrite/ohosTest.md new file mode 100644 index 00000000..4e057f15 --- /dev/null +++ b/ConnectivityKit/NFC/NFCReadAndWrite/ohosTest.md @@ -0,0 +1,7 @@ +# NFC标签读写示例代码工程化 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------- | ------------ | ----------------- | ------------------------|--------- | -------- | +| NFC功能正常启动 | 设备支持NFC | 启动应用 | 应用停留在启动界面,输出预期日志 |否 | Pass | \ No newline at end of file diff --git a/ConnectivityKit/NFC/NFCReadAndWrite/screenshots/image.jpeg b/ConnectivityKit/NFC/NFCReadAndWrite/screenshots/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9129c2132ae22b21a5134cd75d5433dace7e2234 GIT binary patch literal 20946 zcmeI1X;c&0*7r*h85J3nR>9bUMn&Z+;J}b_!iY4c5fmp#+o%k-O$#D(>b43fC}}{Y z1+^3qM9?&%q6kDLBO-=TW{@z1QIZfsrmA`leeW~fwcfSf_x*DFLn=9IWv$eyoPEx3 z@BQC9L@V(HTCi`A(;jHntXa?x-~|!A&^iksE1=o>v()rw5tR@LtW_OYG-K31uUWIz z=BUpFOVZW>H@sK?manEZ8!T3R&Kz)e6!;#Rqpxo8?ZzE*4P8%YtT<=1>DR;unr1um z%N8D}7noc97a>rqpMTK#;0qz4Vd0l9N5{loxf++0eBklH`Y`Y+4=#V&nd z*KBYGb2Mh`nl(EF3^n~Z>fdghYp}yrk*hwIz3-JZGG2q%DuzT8D&jjd*Dnb_P0m z-by^|W9Ml1n;m0zsTTH#fWExEM-tf7zGDjdoS9WiE+cQE4vpV)pcspHlZw%y%~5Ci zNLLZT0p@ko=&5-G%f!FP<$2G@xcCH?W<-}Xz}-myKFoQ!AOQY2jGcCJjhz+~P<4os z8B<%lqvmfxl5-ees@F-g33A!==qvj!;$S;b#Wa$}xyWO$z8K#_lSed}CliqWA(NIQ zFC;I?2_DV7Ic;6av>8`?45Ul=1oSgAEr(ZSnZJvG$OJS_8)_Wa!bT`{Xg7<$EMsz% zCQZ3bKy~2+REA)$Q%lH(@mp0)siSU~kQGNtuFzSY1YQe!R;}!S{F1C|^`Uwcj!M@dU z2jAl7Cv48h*fF9Acq-6|gasuPTEp?(>jaf=z%CeuGWRFrcZ0Re2&g{r&_M=sYdmAZ z1jQ-}@$T9+(tO%@-G46A?46@o3>E8S#oq&!6Z~l>MXhE6;>4Ue&?z6CS{QSh8`mm$Bwdt(tM1;OUh9;5KRs@Z?&|b7=r1uGR^J!j*S+iGRUr79Vl&lW zf9z;`5^n6g(#xC<9Qhi%iigO3 z8f%!PR`mTy*;&LttXSiV!9fY3=*b>=F>I^=A07+OoI1um2xJRwH@5O>_+M8szox& z66KBrSYd1lOS?QIIB>GTRVc2z14{$jg8JypY^+m`U*piU=xEoDpn$M5

v5&OnXP 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 SK*fNH0Tlx(2DX!kw*LScNOj!+ literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/SecureElement/.gitignore b/ConnectivityKit/NFC/SecureElement/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/AppScope/app.json5 b/ConnectivityKit/NFC/SecureElement/AppScope/app.json5 new file mode 100644 index 00000000..5ff44d5f --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "bundleName": "com.samples.nfc_se", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/ConnectivityKit/NFC/SecureElement/AppScope/resources/base/element/string.json b/ConnectivityKit/NFC/SecureElement/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..475ddaf7 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "NFC_SE" + } + ] +} diff --git a/ConnectivityKit/NFC/SecureElement/AppScope/resources/base/media/app_icon.png b/ConnectivityKit/NFC/SecureElement/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/SecureElement/README.md b/ConnectivityKit/NFC/SecureElement/README.md new file mode 100644 index 00000000..60b4877b --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/README.md @@ -0,0 +1,65 @@ +# 安全单元访问开发指南 + +### 介绍 + +本示例通过使用[安全单元访问开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-se-access-guide.md)中各场景的开发示例,展示在工程中,帮助开发者更好地理解HEC功能并合理使用。该工程中展示的代码详细描述可查如下链接: +[安全单元访问开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/nfc/nfc-se-access-guide.md) + +### 效果预览 +|启动界面| +|-------| +| | + +### 使用说明 + +1.启动应用 +2.应用停留在启动界面 +3.输出预期日志,功能启动 + +### 工程目录 +``` +entry/src/main/ets/ +|---entryability +| |---EntryAbility.ets +|---entrybackupability +| |---EntryBackupAbility.ets +|---pages +| |---Index.ets +``` + +### 具体实现 + +#### 应用程序访问安全单元 +1. import需要的安全单元模块。 +2. 判断设备是否支持安全单元能力。 +3. 访问安全单元,实现数据的读取或写入。 + +### 相关权限 + +不涉及 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo ConnectivityKit/NFC/SecureElement/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/build-profile.json5 b/ConnectivityKit/NFC/SecureElement/build-profile.json5 new file mode 100644 index 00000000..f28b03dd --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/build-profile.json5 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/code-linter.json5 b/ConnectivityKit/NFC/SecureElement/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/.gitignore b/ConnectivityKit/NFC/SecureElement/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/build-profile.json5 b/ConnectivityKit/NFC/SecureElement/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/hvigorfile.ts b/ConnectivityKit/NFC/SecureElement/entry/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/SecureElement/entry/obfuscation-rules.txt b/ConnectivityKit/NFC/SecureElement/entry/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/oh-package.json5 b/ConnectivityKit/NFC/SecureElement/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..a680111a --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start access_security_unit] +import { omapi } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; + +let seService : omapi.SEService; +let seReaders : omapi.Reader[]; +let seSession : omapi.Session; +let seChannel : omapi.Channel; +let aidArray : number[] = [0xA0, 0x00, 0x00, 0x00, 0x03, 0x10, 0x10]; +let p2 : number = 0x00; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + + // 判断设备是否支持安全单元能力 + if (!canIUse('SystemCapability.Communication.SecureElement')) { + hilog.error(0x0000, 'testTag', 'secure element unavailable.'); + return; + } + hilog.info(0x0000, 'testTag', 'secure element available.'); + this.omaTest(); + } + + private async omaTest () { + // 获取服务 + await omapi.createService().then((data) => { + if (data == undefined || !data.isConnected()) { + hilog.error(0x0000, 'testTag', 'secure element service disconnected.'); + return; + } + seService = data; + hilog.info(0x0000, 'testTag', 'secure element service connected.'); + }).catch((error: BusinessError) => { + hilog.error(0x0000, 'testTag', 'createService error %{public}s', JSON.stringify(error)); + return; + }); + + // 获取读卡器 + try { + seReaders = seService.getReaders(); + } catch (error) { + hilog.error(0x0000, 'testTag', 'getReaders error %{public}s', JSON.stringify(error)); + } + if (seReaders == undefined || seReaders.length == 0) { + hilog.error(0x0000, 'testTag', 'no valid reader found.'); + seService.shutdown(); + return; + } + let reader: (omapi.Reader | undefined); + for (let i = 0; i < seReaders.length; ++i) { + let r = seReaders[i]; + if (r.getName().includes('SIM')) { + reader = r; + break; + } + } + if (reader == undefined) { + hilog.error(0x0000, 'testTag', 'no valid sim reader.'); + return; + } + hilog.info(0x0000, 'testTag', 'reader is %{public}s', reader?.getName()); + + // 获取会话 + try { + seSession = reader?.openSession() as omapi.Session; + } catch (error) { + hilog.error(0x0000, 'testTag', 'openSession error %{public}s', JSON.stringify(error)); + } + if (seSession == undefined) { + hilog.error(0x0000, 'testTag', 'seSession invalid.'); + seService.shutdown(); + return; + } + + // 获取通道 + try { + // 修改此处的aid值以打开逻辑通道。 + seChannel = await seSession.openLogicalChannel(aidArray, p2); + } catch (exception) { + hilog.error(0x0000, 'testTag', 'openLogicalChannel exception %{public}s', JSON.stringify(exception)); + } + + if (seChannel == undefined) { + hilog.error(0x0000, 'testTag', 'seChannel invalid.'); + return; + } + + // 发送数据 + let cmdData = [0x01, 0x02, 0x03, 0x04]; // 请根据需要修改原始数据。 + try { + let response: number[] = await seChannel.transmit(cmdData) + hilog.info(0x0000, 'testTag', 'seChannel.transmit() response = %{public}s.', JSON.stringify(response)); + } catch (exception) { + hilog.error(0x0000, 'testTag', 'seChannel.transmit() exception = %{public}s.', JSON.stringify(exception)); + } + + // 关闭通道。必须确保最后关闭通道。 + try { + seChannel.close(); + } catch (exception) { + hilog.error(0x0000, 'testTag', 'seChannel.close() exception = %{public}s.', JSON.stringify(exception)); + } + + } +} +// [End access_security_unit] diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/pages/Index.ets b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..7534811e --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'SecureElement'; + + build() { + RelativeContainer() { + Text(this.message) + .id('SecureElement') + .fontSize(50) + .fontWeight(FontWeight.Bold) + .alignRules({ + center: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/module.json5 b/ConnectivityKit/NFC/SecureElement/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/color.json b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/string.json b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..7f9c2173 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "SecureElement" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/background.png b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/foreground.png b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/backup_config.json b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/dark/element/color.json b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/mock/mock-config.json5 b/ConnectivityKit/NFC/SecureElement/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..8630f049 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..f40533d1 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/module.json5 b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/test/List.test.ets b/ConnectivityKit/NFC/SecureElement/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/entry/src/test/LocalUnit.test.ets b/ConnectivityKit/NFC/SecureElement/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/hvigor/hvigor-config.json5 b/ConnectivityKit/NFC/SecureElement/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..1e473e42 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ConnectivityKit/NFC/SecureElement/hvigorfile.ts b/ConnectivityKit/NFC/SecureElement/hvigorfile.ts new file mode 100644 index 00000000..f3cb9f1a --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ConnectivityKit/NFC/SecureElement/oh-package.json5 b/ConnectivityKit/NFC/SecureElement/oh-package.json5 new file mode 100644 index 00000000..14655ea1 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ConnectivityKit/NFC/SecureElement/ohosTest.md b/ConnectivityKit/NFC/SecureElement/ohosTest.md new file mode 100644 index 00000000..f3c71387 --- /dev/null +++ b/ConnectivityKit/NFC/SecureElement/ohosTest.md @@ -0,0 +1,7 @@ +# 安全单元访问示例代码工程化 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------- | ------------ | ----------------- | ------------------------|--------- | -------- | +| NFC功能正常启动 | 设备支持NFC | 启动应用 | 应用停留在启动界面,输出预期日志 |否 | Pass | \ No newline at end of file diff --git a/ConnectivityKit/NFC/SecureElement/screenshots/image.jpeg b/ConnectivityKit/NFC/SecureElement/screenshots/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9129c2132ae22b21a5134cd75d5433dace7e2234 GIT binary patch literal 20946 zcmeI1X;c&0*7r*h85J3nR>9bUMn&Z+;J}b_!iY4c5fmp#+o%k-O$#D(>b43fC}}{Y z1+^3qM9?&%q6kDLBO-=TW{@z1QIZfsrmA`leeW~fwcfSf_x*DFLn=9IWv$eyoPEx3 z@BQC9L@V(HTCi`A(;jHntXa?x-~|!A&^iksE1=o>v()rw5tR@LtW_OYG-K31uUWIz z=BUpFOVZW>H@sK?manEZ8!T3R&Kz)e6!;#Rqpxo8?ZzE*4P8%YtT<=1>DR;unr1um z%N8D}7noc97a>rqpMTK#;0qz4Vd0l9N5{loxf++0eBklH`Y`Y+4=#V&nd z*KBYGb2Mh`nl(EF3^n~Z>fdghYp}yrk*hwIz3-JZGG2q%DuzT8D&jjd*Dnb_P0m z-by^|W9Ml1n;m0zsTTH#fWExEM-tf7zGDjdoS9WiE+cQE4vpV)pcspHlZw%y%~5Ci zNLLZT0p@ko=&5-G%f!FP<$2G@xcCH?W<-}Xz}-myKFoQ!AOQY2jGcCJjhz+~P<4os z8B<%lqvmfxl5-ees@F-g33A!==qvj!;$S;b#Wa$}xyWO$z8K#_lSed}CliqWA(NIQ zFC;I?2_DV7Ic;6av>8`?45Ul=1oSgAEr(ZSnZJvG$OJS_8)_Wa!bT`{Xg7<$EMsz% zCQZ3bKy~2+REA)$Q%lH(@mp0)siSU~kQGNtuFzSY1YQe!R;}!S{F1C|^`Uwcj!M@dU z2jAl7Cv48h*fF9Acq-6|gasuPTEp?(>jaf=z%CeuGWRFrcZ0Re2&g{r&_M=sYdmAZ z1jQ-}@$T9+(tO%@-G46A?46@o3>E8S#oq&!6Z~l>MXhE6;>4Ue&?z6CS{QSh8`mm$Bwdt(tM1;OUh9;5KRs@Z?&|b7=r1uGR^J!j*S+iGRUr79Vl&lW zf9z;`5^n6g(#xC<9Qhi%iigO3 z8f%!PR`mTy*;&LttXSiV!9fY3=*b>=F>I^=A07+OoI1um2xJRwH@5O>_+M8szox& z66KBrSYd1lOS?QIIB>GTRVc2z14{$jg8JypY^+m`U*piU=xEoDpn$M5

v5&OnXP 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 SK*fNH0Tlx(2DX!kw*LScNOj!+ literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/.gitignore b/ConnectivityKit/Wlan/.gitignore new file mode 100644 index 00000000..6ff06d2b --- /dev/null +++ b/ConnectivityKit/Wlan/.gitignore @@ -0,0 +1,13 @@ +/node_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +/package-lock.json +/entry/package-lock.json +**/oh_modules +**/oh-package-lock.json5 diff --git a/ConnectivityKit/Wlan/AppScope/app.json5 b/ConnectivityKit/Wlan/AppScope/app.json5 new file mode 100644 index 00000000..e0496f6b --- /dev/null +++ b/ConnectivityKit/Wlan/AppScope/app.json5 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* 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. +*/ + +{ + "app": { + "bundleName": "com.samples.wlan", + "vendor": "samples", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "distributedNotificationEnabled": true + } +} diff --git a/ConnectivityKit/Wlan/AppScope/resources/base/element/string.json b/ConnectivityKit/Wlan/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..561c62fe --- /dev/null +++ b/ConnectivityKit/Wlan/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "Wlan" + } + ] +} diff --git a/ConnectivityKit/Wlan/AppScope/resources/base/media/app_icon.png b/ConnectivityKit/Wlan/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/README_zh.md b/ConnectivityKit/Wlan/README_zh.md new file mode 100644 index 00000000..25811dce --- /dev/null +++ b/ConnectivityKit/Wlan/README_zh.md @@ -0,0 +1,89 @@ +# P2P模式开发指南 + +### 介绍 + +本示例通过将[Connectivity Kit指南文档](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/connectivity)中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接: +[P2P模式开发](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/wlan/p2p-development-guide.md)。 +[Wi-Fi扫描](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/wlan/scan-development-guide.md)。 +[STA模式开发](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/wlan/sta-development-guide.md)。 + +### 效果预览 +|应用界面| +|主页 |建议网络连接 | WiFi列表 | +|---------------------------------------------|---------------------------------------|-----------------------------------------| +|![password](screenshots/main.png)|![password](screenshots/connect_wifi.png)|![password](screenshots/wifi_list.png)| +|P2p测试 |P2p连接 | 创建群组 | +|---------------------------------------------|---------------------------------------|-----------------------------------------| +|![password](screenshots/p2ptest.png)|![password](screenshots/p2pconnect.png)|![password](screenshots/creatgroup.png)| + + +|获取真实BSSID授权 | +|-----------------------------------------| +|![password](screenshots/GET_WIFI_PEERS_MAC.png) | + +### 使用说明 + +1. 启动应用后会判断WLAN是否激活,如果是激活状态,点击wifi列表会扫描并展示可用WiFi列表; +2. 点击首页建议击网络连接,填写可选参数,连接建议网络; +3. 点击首页P2p测试,进行P2p连接和创建群组场景测试。 + +### 工程目录 +``` +entry/src/main/ets/ +|---component +| |---P2pView.ets // P2p列表详情页 +| |---TitleBar.ets // 页面头部组件 +| |---WifiView.ets // wifi列表详情页 +|---entryability +| |---EntryAbility.ets // 应用入口,在这里请求相关权限和进入首页 +|---pages +| |---Index.ets // 首页 +| |---AvailableWifi.ets // 热点扫描信息列表 +| |---WifiConnect.ets // 建议网络连接 +| |---P2pTest.ets // P2p测试场景 +| |---AvailableP2p.ets // P2p扫描信息列表 +| |---P2pSetting.ets // 创建群组 +``` + +### 具体实现 + +* 开始测试前需打开设备WiFi, +首页:[Index.ets](entry/src/main/ets/pages/Index.ets)。 + +* 建议网络连接:[WifiConnect.ets](entry/src/main/ets/pages/WifiConnect.ets),根据提示填写参数信息通过connectwifi()发起连接。 +* wifi的扫描功能:首页点击wifi列表,在[AvailableWifi.ets](entry/src/main/ets/pages/AvailableWifi.ets) 通过(entry/src/main/ets/component/WifiView.ets)显示每一个WiFi信息,调用getScanInfos()获取扫描结果,调用定时器每3s获取一次。 +* P2p场景测试: + *p2p连接:[AvailableP2p.ets.ets](entry/src/main/ets/pages/AvailableP2p.ets) 通过(entry/src/main/ets/component/P2pView.ets)显示每一个P2p信息,点击列表信息通过connectP2p()函数发起连接。 + *创建P2P群组:在[P2pSetting.ets](entry/src/main/ets/pages/P2pSetting.ets) 填写参数信息通过createGroup()来创建群组。 +### 相关权限 + +[ohos.permission.GET_WIFI_INFO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionget_wifi_info) + +[ohos.permission.SET_WIFI_INFO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionset_wifi_info) + +[ohos.permission.GET_WIFI_PEERS_MAC](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/restricted-permissions.md#ohospermissionget_wifi_peers_mac) +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. 本示例需要使用DevEco Studio 6.0.0 及以上版本才可编译运行。 + +3. 本示例已适配API version 20版本SDK,本示例需要使用@ohos.wifiManager系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换,具体操作可参考[替换指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/faqs/full-sdk-switch-guide.md/) 。 + +4. 本示例需要使用ohos.permission.GET_WIFI_INFO、ohos.permission.SET_WIFI_INFO的权限为system_grant级别、ohos.permission.GET_WIFI_PEERS_MAC的权限为system_basic级别(相关权限级别可通过[权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md) 查看),需要手动配置对应级别的权限签名。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo ConnectivityKit/Wlan > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +``` \ No newline at end of file diff --git a/ConnectivityKit/Wlan/build-profile.json5 b/ConnectivityKit/Wlan/build-profile.json5 new file mode 100644 index 00000000..05d4900f --- /dev/null +++ b/ConnectivityKit/Wlan/build-profile.json5 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "products": [ + { + "name": "default", + "bundleName": "com.samples.wlan", + "signingConfig": "default", + "compatibleSdkVersion": "6.0.0(20)", + "targetSdkVersion": "6.0.0(20)", + "runtimeOS": "HarmonyOS", + } + ], + "signingConfigs": [] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/code-linter.json5 b/ConnectivityKit/Wlan/code-linter.json5 new file mode 100644 index 00000000..4bacc9e2 --- /dev/null +++ b/ConnectivityKit/Wlan/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/.gitignore b/ConnectivityKit/Wlan/entry/.gitignore new file mode 100644 index 00000000..e5d65b11 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.preview +/build +/.cxx diff --git a/ConnectivityKit/Wlan/entry/build-profile.json5 b/ConnectivityKit/Wlan/entry/build-profile.json5 new file mode 100644 index 00000000..a2d361ac --- /dev/null +++ b/ConnectivityKit/Wlan/entry/build-profile.json5 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": 'stageMode', + "buildOption": { + }, + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/hvigorfile.ts b/ConnectivityKit/Wlan/entry/hvigorfile.ts new file mode 100644 index 00000000..94b039ca --- /dev/null +++ b/ConnectivityKit/Wlan/entry/hvigorfile.ts @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +export { hapTasks } from '@ohos/hvigor-ohos-plugin' diff --git a/ConnectivityKit/Wlan/entry/obfuscation-rules.txt b/ConnectivityKit/Wlan/entry/obfuscation-rules.txt new file mode 100644 index 00000000..f722a31c --- /dev/null +++ b/ConnectivityKit/Wlan/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all hilog.info* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/oh-package.json5 b/ConnectivityKit/Wlan/entry/oh-package.json5 new file mode 100644 index 00000000..73bef04a --- /dev/null +++ b/ConnectivityKit/Wlan/entry/oh-package.json5 @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "license": "ISC", + "devDependencies": {}, + "name": "entry", + "description": "example description", + "repository": {}, + "version": "1.0.0", + "dependencies": {} +} diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/component/P2pView.ets b/ConnectivityKit/Wlan/entry/src/main/ets/component/P2pView.ets new file mode 100644 index 00000000..0762f36f --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/component/P2pView.ets @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + +import wifi from '@ohos.wifiManager'; +import hilog from '../model/Logger' + +/** + * P2pView Component of p2p test + */ +const TAG = 'wifiTestApp [P2pView]' + +@Component +export struct P2pView { + private p2p!: wifi.WifiP2pDevice + private securityString: Resource = $r('app.string.useful') + private p2pConnectState: number = 0 + @StorageLink('p2pLinkedDeviceName') p2pLinkedDeviceName: string = '' + @State isLock: boolean = true + + aboutToAppear() { + hilog.info(TAG , `aboutToAppear ${ JSON.stringify(this.p2p) }`) + + this.p2pConnectState = AppStorage.get('p2pConnectState') ! + this.p2pLinkedDeviceName = AppStorage.get('p2pLinkedDeviceName') ! + if ( this.p2p ) { + hilog.info(TAG , 'this.p2p is true'); + } else { + hilog.info(TAG , 'this.p2p is false'); + } + } + + build() { + Row() { + Column() { + if ( this.p2p ) { + if ( this.p2p.deviceName ) { + Text(this.p2p.deviceName) + .fontSize(20) + .width('100%') + } + } + if ( this.p2pConnectState == 1 && this.p2pLinkedDeviceName == this.p2p.deviceName ) { + Text($r('app.string.p2pConnected')) + .fontSize(18) + .fontColor(Color.Gray) + .width('100%') + } else { + Text($r('app.string.useful')) + .fontSize(18) + .fontColor(Color.Gray) + .width('100%') + } + } + .layoutWeight(1) + + Stack({ alignContent : Alignment.BottomEnd }) { + Image($r('app.media.wifi')) + .height(30).width(30) + .objectFit(ImageFit.Contain) + if ( this.isLock ) { + Image($r('app.media.lock')) + .objectFit(ImageFit.Contain) + .width(15).height(15) + } + } + .width(40).height(40) + .margin({ right : 10 }) + } + .backgroundColor(Color.White) + .width('100%') + .padding(10) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/component/TitleBar.ets b/ConnectivityKit/Wlan/entry/src/main/ets/component/TitleBar.ets new file mode 100644 index 00000000..7db1022c --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/component/TitleBar.ets @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import router from '@ohos.router' + +@Component +export struct TitleBar { + build() { + Row() { + Text($r('app.string.EntryAbility_label')) + .fontColor(Color.White) + .fontSize(25) + .layoutWeight(1) + + Button() { + Image($r('app.media.about')) + .size({ width: 60, height: '95%' }) + .objectFit(ImageFit.Contain) + } + .id('about') + .type(ButtonType.Normal) + .height('90%') + .backgroundColor($r('app.color.button_color')) + } + .width('100%') + .height('8%') + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .backgroundColor($r('app.color.button_color')) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/component/WifiView.ets b/ConnectivityKit/Wlan/entry/src/main/ets/component/WifiView.ets new file mode 100644 index 00000000..d131f130 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/component/WifiView.ets @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger' +import wifi from '@ohos.wifiManager' + +const TAG: string = 'WifiView' + +@Component +export struct WifiView { + private wifi: wifi.WifiScanInfo | null = null; + private securityString: Resource = $r('app.string.encryption') + @State isLock: boolean = true + + aboutToAppear() { + hilog.debug(TAG, `aboutToAppear ${JSON.stringify(this.wifi)}`) + if (this.wifi) { + if (this.wifi.securityType) { + if ((this.wifi.securityType as number) === 0 || this.wifi.securityType === 1) { + this.securityString = $r('app.string.open') + this.isLock = false + } + } + } + } + + build() { + Row() { + Column() { + if (this.wifi) { + if (this.wifi.ssid) { + Text(this.wifi.ssid) + .fontSize(20) + .width('100%') + } + } + Text(this.securityString) + .fontSize(18) + .fontColor(Color.Gray) + .width('100%') + } + .layoutWeight(1) + + Stack({ alignContent: Alignment.BottomEnd }) { + Image($r('app.media.wifi')) + .height(30) + .width(30) + .objectFit(ImageFit.Contain) + if (this.isLock) { + Image($r('app.media.lock')) + .objectFit(ImageFit.Contain) + .width(15) + .height(15) + } + } + .width(40) + .height(40) + .margin({ right: 10 }) + } + .backgroundColor(Color.White) + .width('100%') + .padding(10) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/entryability/EntryAbility.ets b/ConnectivityKit/Wlan/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..f09ffa47 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger' +import UIAbility from '@ohos.app.ability.UIAbility'; +import Window from '@ohos.window' +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import type { Permissions } from '@ohos.abilityAccessCtrl'; +import Want from '@ohos.app.ability.Want'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info('Ability onCreate') + const PERMISSIONS: Array = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']; + try { + abilityAccessCtrl.createAtManager().requestPermissionsFromUser(this.context, PERMISSIONS); + } catch (err) { + hilog.info(`catch err->${JSON.stringify(err)}`); + } + } + + onDestroy() { + hilog.info('Ability onDestroy') + } + + onWindowStageCreate(windowStage: Window.WindowStage) { + hilog.info('Ability onWindowStageCreate') + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(`Failed to load the content. Cause: ${JSON.stringify(err)}`) + return + } + hilog.info(`Succeeded in loading the content. Data: ${JSON.stringify(data)}`) + }) + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + hilog.info('Ability onWindowStageDestroy') + } + + onForeground() { + // Ability has brought to foreground + hilog.info('Ability onForeground') + } + + onBackground() { + // Ability has back to background + hilog.info('Ability onBackground') + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/model/Logger.ets b/ConnectivityKit/Wlan/entry/src/main/ets/model/Logger.ets new file mode 100644 index 00000000..9c193408 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/model/Logger.ets @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; + +class Logger { + private domain: number; + private prefix: string; + private format: string = '%{public}s'; + + constructor(prefix: string) { + this.prefix = prefix; + this.domain = 0x0001; // 设置域名 + } + + debug(...args: string[]) { + hilog.debug(this.domain, this.prefix, this.format, args); + } + + info(...args: string[]) { + hilog.info(this.domain, this.prefix, this.format, args); + } + + warn(...args: string[]) { + hilog.warn(this.domain, this.prefix, this.format, args); + } + + error(...args: string[]) { + hilog.error(this.domain, this.prefix, this.format, args); + } + + fatal(...args: string[]) { + hilog.fatal(this.domain, this.prefix, this.format, args); + } + + isLoggable(level: number) { + hilog.isLoggable(this.domain, this.prefix, level); + } +} + +export default new Logger('[Sample_NetConnection_Exploitation]'); \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableP2p.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableP2p.ets new file mode 100644 index 00000000..9a4606a8 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableP2p.ets @@ -0,0 +1,138 @@ +/** + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import promptAction from '@ohos.promptAction'; +import hilog from '../model/Logger'; +import wifi from '@ohos.wifiManager'; +import { P2pView } from '../component/P2pView'; + +const TAG = 'availableP2p'; + +/** + * available p2p page of WiFi test + */ +@Entry +@Component +struct WifiConnect { + @State p2pList: Array = [] + @State p2pLinkedInfo: wifi.WifiP2pLinkedInfo | null = null; + private selectIndex: number = - 1 + @State isSwitchOn: boolean = false; + + addListener() { + // 连接状态改变时,修改连接信息 + hilog.info(TAG, 'addListener'); + wifi.on('p2pConnectionChange', async wifiP2pLinkedInfo => { + hilog.info('p2p connection change receive event: ' + JSON.stringify(wifiP2pLinkedInfo)); + this.p2pLinkedInfo = wifiP2pLinkedInfo + let connectState = wifiP2pLinkedInfo.connectState + let p2pConnectionMessage = '' + switch ( connectState ) { + case 0: + p2pConnectionMessage = 'DISCONNECTED!'; + this.p2pLinkedInfo = null + promptAction.showToast({ message : 'connect disabled' }) + break; + case 1: + p2pConnectionMessage = 'CONNECTED!'; + promptAction.showToast({ message : 'connect success' }) + let curGp = await wifi.getCurrentGroup() + AppStorage.setOrCreate('p2pLinkedDeviceName', curGp.groupName) + break; + default: + p2pConnectionMessage = '未知状态'; + break; + } + AppStorage.setOrCreate('p2pConnectState', connectState) + }) + + wifi.on('p2pPeerDeviceChange', async (_: wifi.WifiP2pDevice[]) => { + hilog.info(TAG, 'p2pPeerDeviceChange:', JSON.stringify(_)) + try { + let devices = await wifi.getP2pPeerDevices() + this.p2pList = devices + } catch (e) { + hilog.info(JSON.stringify(e)) + } + }) + } + + aboutToAppear() { + // 如果wifi是开的,就记录下状态,然后扫描p2p设备,并获取连接信息 + if (!wifi.isWifiActive()) { + promptAction.showToast({ message : 'place active wifi' }) + return + } + this.isSwitchOn = true; + wifi.startDiscoverDevices() + this.addListener(); + } + + aboutToDisappear() { + wifi.off('p2pPeerDeviceChange') + wifi.off('p2pConnectionChange') + } + + + connectP2p(p2pScanInfo: wifi.WifiP2pDevice) { + promptAction.showToast({ message : 'connect to device' }) + hilog.info(TAG , `connect deviceAddress=${ p2pScanInfo.deviceAddress }`) + hilog.info(TAG , `p2pScanInfo:` + JSON.stringify(p2pScanInfo)) + let config: wifi.WifiP2PConfig = { + deviceAddress : p2pScanInfo.deviceAddress, + netId : - 2 , + deviceAddressType: 1, + passphrase : '' , + groupName : '' , + goBand : 0 + } + wifi.p2pConnect(config) + } + + + build() { + Column() { + Row() { + Text($r('app.string.p2p_available')) + .fontSize(22) + .fontWeight(FontWeight.Bold) + .height(40) + } + .width('100%') + .padding({ left: 16, right: 16 }) + + List({ space: 5 }) { + ForEach(this.p2pList , (item: wifi.WifiP2pDevice , index: number) => { + ListItem() { + P2pView({ p2p : item }) + } + .onClick(() => { + hilog.info(TAG , 'p2p click') + this.selectIndex = index + if ( this.p2pLinkedInfo !== null && this.p2pLinkedInfo.connectState == 1 ) { + promptAction.showToast({ message : 'this p2p is connected' }) + return + } + this.connectP2p(item) + }) + } , (item: wifi.WifiP2pDevice) => JSON.stringify(item)); + } + .layoutWeight(1) + .divider({ strokeWidth : 1 , color : Color.Gray , startMargin : 10 , endMargin : 10 }) + .margin(10) + } + .margin({ top : 15 , bottom : 100 }) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableWifi.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableWifi.ets new file mode 100644 index 00000000..288377b0 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/AvailableWifi.ets @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger' +import { WifiView } from '../component/WifiView' +import wifi from '@ohos.wifiManager' + +const TAG = 'AvailableWiFi' +let self: AvailableWifi | null = null; +@Entry +@Component +export struct AvailableWifi { + @State wifilist: Array = [] + @State wifilisttest: Array = [] + @State isSwitchOn: boolean = false; + private linkedInfo: wifi.WifiLinkedInfo | null = null; + @State isLinked: boolean = false; + + // 扫描wifi + async getScanInfos() { + // 不停地扫描wifi + let result: wifi.WifiScanInfo[] = await wifi.getScanInfoList(); + + if (this.isSwitchOn) { + setTimeout(async () => { + this.wifilist = result + await this.getScanInfos(); + }, 3000) + } + } + + addListener() { + // 连接状态改变时,修改连接信息 + wifi.on('wifiConnectionChange', async state => { + hilog.info(TAG, `wifiConnectionChange: ${state}`); + await this.getLinkedInfo(); + }) + // wifi状态改变时,先清空wifi列表,然后判断是否是开启状态,如果是就扫描 + wifi.on('wifiStateChange', state => { + hilog.info(TAG, `wifiStateLisener state: ${state}`); + if (state === 1) { // 1: wifi is enable, 0:wifi is disable + this.isSwitchOn = true; + this.getScanInfos(); + } + if (state === 0) { // 1: wifi is enable, 0:wifi is disable + this.isSwitchOn = false; + } + }) + } + + async getLinkedInfo() { + try { + let wifiLinkedInfo = await wifi.getLinkedInfo(); + if (wifiLinkedInfo === null || wifiLinkedInfo.bssid === '') { + this.isLinked = false; + this.linkedInfo = null; + return; + } + this.isLinked = true; + this.linkedInfo = wifiLinkedInfo; + } catch (err) { + hilog.info(`getLinkedInfo failed err is ${JSON.stringify(err)}`); + } + } + + aboutToAppear() { + if (wifi.isWifiActive()) { + hilog.info(TAG, 'wifi is active'); + this.isSwitchOn = true; + this.getScanInfos(); + this.getLinkedInfo(); + } + hilog.info(TAG, 'wifi is disabled'); + // 启动监听 + this.addListener(); + } + + aboutToDisappear() { + wifi.off('wifiConnectionChange'); + wifi.off('wifiStateChange'); + } + + build() { + Column() { + Row() { + Text($r('app.string.wlan')) + .fontSize(22) + .fontWeight(FontWeight.Bold) + .height(40) + Column() { + Toggle({ type: ToggleType.Switch, isOn: this.isSwitchOn }) + .id('switch') + .onChange((isOn: boolean) => { + hilog.info(`wifi swtich is: ${isOn}`); + this.wifilist = this.wifilisttest + }) + } + } + .width('100%') + .padding({ left: 16, right: 16 }) + + List({ space: 5 }) { + ForEach(this.isSwitchOn ? this.wifilist : this.wifilisttest, (wifiItem: wifi.WifiScanInfo) => { + ListItem() { + WifiView({ wifi: wifiItem }) + } + }, (wifiItem: wifi.WifiScanInfo) => JSON.stringify(wifiItem)); + } + } + .width('100%') + .height('100%') + .backgroundColor($r('app.color.index_bg')) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/Index.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..35bc487e --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger'; +import { TitleBar } from '../component/TitleBar'; +import router from '@ohos.router' + +const TAG = 'Index'; + +@Entry +@Component +struct Index { + build() { + Column({ space: 5 }) { + TitleBar() + Text($r('app.string.wifi_List')) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .borderRadius(5) + .width('100%') + // .fontColor($r('app.color.text_color')) + .backgroundColor($r('app.color.button_color2')) + .onClick(() => { + router.pushUrl({ url: 'pages/AvailableWifi' }) + }) + + Text($r('app.string.wifi_Connect')) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .borderRadius(5) + .width('100%') + // .fontColor($r('app.color.text_color')) + .backgroundColor($r('app.color.text_color')) + .onClick(() => { + router.pushUrl({ url: 'pages/WifiConnect' }) + }) + + Text($r('app.string.p2p_test')) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .borderRadius(5) + .width('100%') + // .fontColor($r('app.color.text_color')) + .backgroundColor($r('app.color.index_background')) + .onClick(() => { + router.pushUrl({ url: 'pages/P2pTest' }) + }) + } + .width('100%') + .height('8%') + .backgroundColor($r('app.color.index_bg')) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pSetting.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pSetting.ets new file mode 100644 index 00000000..2a9393ac --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pSetting.ets @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + +import hilog from '../model/Logger'; +import router from '@ohos.router' +import wifi from '@ohos.wifiManager'; +import promptAction from '@ohos.promptAction' + +const TAG = 'p2pSetting' + +@Entry +@Component +struct p2pSetting { + @State deviceAddress: string = ''; + @State netId: number = - 2; + @State passphrase: string = ''; + @State groupName: string = '' + @State goBand: number = 0; + + aboutToAppear() { + AppStorage.setOrCreate('deviceAddress' , this.deviceAddress) + AppStorage.setOrCreate('netId' , this.netId) + AppStorage.setOrCreate('passphrase' , this.passphrase) + AppStorage.setOrCreate('groupName' , this.groupName) + AppStorage.setOrCreate('goBand' , this.goBand) + } + + + async createGroup() { + try { + let deviceInfo = await wifi.getP2pLocalDevice() + let config:wifi.WifiP2PConfig = { + deviceAddress: deviceInfo.deviceAddress, + netId: this.netId, + passphrase: this.passphrase, + groupName: this.groupName, + goBand: this.goBand, + } + hilog.info(`deviceAddress: ${config.deviceAddress}, netId: ${config.netId}, pwd: ${config.passphrase}, gpname: ${config.groupName}, goBand: ${config.goBand}`) + wifi.createGroup(config) + promptAction.showToast({ message : 'createGroup success' }) + } catch (e) { + hilog.info(TAG, `createGroup Error: ${JSON.stringify(e)}`) + } + } + + build() { + Column() { + Row() { + Text('deviceAddress:').fontSize(16).width(120) + TextInput({ text : this.deviceAddress , placeholder : 'input peripheral deviceId.' }) + .fontSize('15vp') + .onChange((strInput: string) => { + this.deviceAddress = strInput; + //判断合法性 + if ( strInput.length >= 1 ) { + AppStorage.setOrCreate('deviceAddress' , this.deviceAddress); + } + }) + .width('80%') + .borderRadius(1) + } + .backgroundColor($r('app.color.moon')) + .padding(5) + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + + Column() { + Stack().height('0.25vp').backgroundColor('#000000'); + Column() { + Row() { + Text('netId:').fontSize(15).width(60); + TextInput({ text : this.netId.toString() , placeholder : '-2' }) + .fontSize('15vp') + .onChange((strInput: string) => { + this.netId = parseInt(strInput); + //判断合法性 + if ( strInput.length >= 1 ) { + AppStorage.setOrCreate('netId' , this.netId); + } + }) + .width('80%') + .borderRadius(1) + } + .padding(5) + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + .backgroundColor($r('app.color.spring')) + + Row() { + Text('passphrase:').fontSize(15).width(100); + TextInput({ text : this.passphrase , placeholder : 'input passphrase' }) + .fontSize('15vp') + .onChange((strInput: string) => { + this.passphrase = strInput; + if ( strInput.length >= 1 ) { + AppStorage.setOrCreate('passphrase' , this.passphrase); + } + }) + .width('80%') + .borderRadius(1) + } + .backgroundColor($r('app.color.spring')) + .padding(5) + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + + Row() { + Text('groupName:').fontSize(15).width(100); + TextInput({ text : this.groupName , placeholder : 'testGroup' }) + .fontSize('15vp') + .onChange((strInput: string) => { + this.groupName = strInput; + if ( strInput.length >= 1 ) { + AppStorage.setOrCreate('groupName' , this.groupName); + } + }) + .width('80%') + .borderRadius(1) + } + .backgroundColor($r('app.color.spring')) + .padding(5) + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + + Row() { + Text('goBand:').fontSize(15).width(80); + TextInput({ text : this.goBand.toString() , placeholder : '0' }) + .fontSize('15vp') + .onChange((strInput: string) => { + this.goBand = Number(strInput); + if ( strInput.length >= 1 ) { + AppStorage.setOrCreate('goBand' , this.goBand); + } + }) + .width('80%') + .borderRadius(1) + } + .backgroundColor($r('app.color.spring')) + .padding(5) + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + + } + + Stack().height('0.25vp').backgroundColor('#000000'); + } + + Row() { + Button($r('app.string.create_group'))// .dialogButtonStyle() + .fontSize('16fp') + .onClick(() => { + if(this.passphrase === '' || this.groupName === '') { + hilog.info(TAG, 'ssid || preSharedKey is null'); + promptAction.showToast({ message : 'passphrase or groupName is null' }) + return; + } + this.createGroup(); + }) + .height('100%') + } + .width('50%') + .height('6%') + .justifyContent(FlexAlign.SpaceBetween) + } + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pTest.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pTest.ets new file mode 100644 index 00000000..f1aea017 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/P2pTest.ets @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger'; +import { TitleBar } from '../component/TitleBar'; +import router from '@ohos.router' + +const TAG = 'Index'; + +@Entry +@Component +struct P2pTest { + build() { + Column({ space: 5 }) { + Text($r('app.string.p2p_Connect')) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .borderRadius(5) + .width('100%') + // .fontColor($r('app.color.text_color')) + .backgroundColor($r('app.color.moon')) + .onClick(() => { + router.pushUrl({ url: 'pages/AvailableP2p' }) + }) + + Text($r('app.string.create_group_test')) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + .constraintSize({ minHeight: 50 }) + .padding({ left: 15 }) + .borderRadius(5) + .width('100%') + // .fontColor($r('app.color.text_color')) + .backgroundColor($r('app.color.cyan')) + .onClick(() => { + router.pushUrl({ url: 'pages/P2pSetting' }) + }) + } + .width('100%') + .height('8%') + .backgroundColor($r('app.color.index_bg')) + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/ets/pages/WifiConnect.ets b/ConnectivityKit/Wlan/entry/src/main/ets/pages/WifiConnect.ets new file mode 100644 index 00000000..c1406a79 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/ets/pages/WifiConnect.ets @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import hilog from '../model/Logger' +import promptAction from '@ohos.promptAction' +import wifi from '@ohos.wifiManager' +import router from '@ohos.router' + +const TAG = 'WifiConnect' +@Entry +@Component +struct WifiConnect { + ssid: string = '' + password: string = '' + selectedSecurityType: wifi.WifiSecurityType = wifi.WifiSecurityType.WIFI_SEC_TYPE_INVALID + private linkedInfo: wifi.WifiLinkedInfo | null = null; + @State isLinked: boolean = false; + @State isSwitchOn: boolean = false; + @State wifiCandidateConfig: wifi.WifiDeviceConfig = { + ssid: '', + bssid: '', + preSharedKey: '', + isHiddenSsid: false, + securityType: 0 + } + private controller: CustomDialogController | null = null; + + async connectwifi(deviceConfig: wifi.WifiDeviceConfig) { + try { + promptAction.showToast({ message : 'connect to wifi' }) + hilog.info(`connectwifi failed err is ${JSON.stringify(deviceConfig)}`); + wifi.addCandidateConfig(deviceConfig).then(result => { + // 连接指定网络 + wifi.connectToCandidateConfig(result); + this.getLinkedInfo() + }); + }catch(error){ + hilog.error('sun failed:' + JSON.stringify(error)); + } + } + + async getLinkedInfo() { + try { + let wifiLinkedInfo = await wifi.getLinkedInfo(); + if (wifiLinkedInfo === null || wifiLinkedInfo.bssid === '') { + this.isLinked = false; + this.linkedInfo = null; + return; + } + this.isLinked = true; + this.linkedInfo = wifiLinkedInfo; + } catch (err) { + hilog.info(`getLinkedInfo failed err is ${JSON.stringify(err)}`); + } + } + + addListener() { + // 连接状态改变时,修改连接信息 + wifi.on('wifiConnectionChange', async state => { + hilog.info(TAG, `wifiConnectionChange: ${state}`); + await this.getLinkedInfo(); + }) + } + + aboutToAppear() { + // 如果wifi是开的,就记录下状态,然后扫描wifi,并获取连接信息 + if (wifi.isWifiActive()) { + hilog.info(TAG, 'wifi is active'); + this.isSwitchOn = true; + } + hilog.info(TAG, 'wifi is disabled'); + // 启动监听 + this.addListener(); + } + + build() { + Column() { + Column() { + Row() { + Text('ssid').fontSize('16fp').width('18%') + TextInput({ placeholder: $r('app.string.input_candidate_wifi_ssid') }) + .placeholderColor(Color.Grey) + .placeholderFont({ size: '16fp' }) + .caretColor(Color.Blue) + .width('80%') + .fontSize('16fp') + .fontColor($r('app.color.title_black_color')) + .onChange((value: string) => { + this.wifiCandidateConfig.ssid = value; + }) + } + .width('100%') + .margin({ top: '3%' }) + + // .height( CommonConstants.TEXT_INPUT_HEIGHT ) + // .backgroundColor( $r( 'app.color.input_background' ) ) + Row() { + Text('bssid').fontSize('16fp').width('18%') + TextInput({ placeholder: $r('app.string.input_candidate_wifi_bssid') }) + .placeholderColor(Color.Grey) + .placeholderFont({ size: '16fp' }) + .caretColor(Color.Blue) + .width('80%') + .fontSize('16fp') + .fontColor($r('app.color.title_black_color')) + .onChange((value: string) => { + this.wifiCandidateConfig.bssid = value; + }) + } + .width('100%') + .margin({ top: '3%' }) + + Row() { + Text('preSharedKey').fontSize('16fp').width('28%') + TextInput({ placeholder: $r('app.string.input_candidate_wifi_preSharedKey') }) + .placeholderColor(Color.Grey) + .placeholderFont({ size: '16fp' }) + .caretColor(Color.Blue) + .width('70%') + .fontSize('16fp') + .fontColor($r('app.color.title_black_color')) + .onChange((value: string) => { + this.wifiCandidateConfig.preSharedKey = value; + }) + } + .width('100%') + .margin({ top: '3%' }) + + + Row() { + Text('isHiddenSsid').fontSize('16fp').width('28%') + TextInput({ placeholder: $r('app.string.input_candidate_wifi_isHiddenSsid') }) + .placeholderColor(Color.Grey) + .placeholderFont({ size: '16fp' }) + .caretColor(Color.Blue) + .width('70%') + .fontSize('16fp') + .fontColor($r('app.color.title_black_color')) + .onChange((value: string) => { + this.wifiCandidateConfig.isHiddenSsid = parseInt(value, 10) === 1; + }) + } + .width('100%') + .margin({ top: '3%' }) + + Row() { + Text('securityType').fontSize('16fp').width('28%') + Column() { + Select([ + { value: 'WIFI_SEC_TYPE_INVALID' }, + { value: 'WIFI_SEC_TYPE_OPEN' }, + { value: 'WIFI_SEC_TYPE_PSK' }, + { value: 'WIFI_SEC_TYPE_SAE' } + ]) + .fontColor($r('app.color.title_black_color')) + .optionBgColor($r('app.color.input_background')) + .selectedOptionBgColor($r('app.color.input_background')) + .selectedOptionFontColor($r('app.color.input_background')) + .selected(0) + .value('WIFI_SEC_TYPE_INVALID') + .font({ size: 16 }) + .selectedOptionFont({ size: 17 }) + .optionFont({ size: 15 }) + .width('100%') + .onSelect((index: number) => { + this.wifiCandidateConfig.securityType = index; + }) + } + .width('70%') + .borderRadius(1) + } + .justifyContent(FlexAlign.Start) + .alignItems(VerticalAlign.Center) + .width('100%') + .margin({ top: '3%' }) + + Row() { + Button($r('app.string.confirm_button'))// .dialogButtonStyle() + .onClick(() => { + if(this.wifiCandidateConfig.ssid === '' || this.wifiCandidateConfig.preSharedKey === '') { + hilog.info(TAG, 'ssid || preSharedKey is null'); + promptAction.showToast({ message : 'ssid or preSharedKey is null' }) + return; + } + this.connectwifi(this.wifiCandidateConfig); + }) + .height('100%') + } + .width('70') + .height('6%') + .justifyContent(FlexAlign.SpaceBetween) + } + } + } + } \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/module.json5 b/ConnectivityKit/Wlan/entry/src/main/module.json5 new file mode 100644 index 00000000..f2740de4 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/module.json5 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "requestPermissions": [ + { + "name": "ohos.permission.GET_WIFI_INFO", + "reason": "$string:GET_WIFI_INFO", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + }, + }, + { + "name": "ohos.permission.SET_WIFI_INFO", + "reason": "$string:SET_WIFI_INFO", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } + }, + { + "name": "ohos.permission.GET_WIFI_PEERS_MAC", + "reason": "$string:GET_WIFI_PEERS_MAC", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } + }, + ], + "abilities": [ + { + "srcEntry": "./ets/entryability/EntryAbility.ets", + "name": "EntryAbility", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/base/element/color.json b/ConnectivityKit/Wlan/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..8919d0f5 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/resources/base/element/color.json @@ -0,0 +1,60 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + }, + { + "name": "index_bg", + "value": "#F5F5F5" + }, + { + "name": "button_color", + "value": "#0D9FFB" + }, + { + "name": "button_color1", + "value": "#007AFF" + }, + { + "name": "button_color2", + "value": "#D7ECF1" + }, + { + "name": "title_black_color", + "value": "#182431" + }, + { + "name": "cyan", + "value": "#70919F" + }, + { + "name": "spring", + "value": "#F5FFFA" + }, + { + "name": "moon", + "value": "#D7ECF1" + }, + { + "name": "main_blue", + "value": "#007DFF" + }, + { + "name": "index_background", + "value": "#E8E7EB" + }, + { + "name": "intput_background", + "value": "#D9B612" + }, + { + "name": "input_background", + "value": "#D9B612" + }, + { + "name": "text_color", + "value": "#8F8F8F" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/base/element/string.json b/ConnectivityKit/Wlan/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..3511e093 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/resources/base/element/string.json @@ -0,0 +1,156 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Wlan" + }, + { + "name": "entry_MainAbility", + "value": "eTSWLAN" + }, + { + "name": "description_mainability", + "value": "eTSWLAN Ability" + }, + { + "name": "cancel", + "value": "Cancel" + }, + { + "name": "sure", + "value": "Sure" + }, + { + "name": "wlan", + "value": "WLAN" + }, + { + "name": "available_wlan", + "value": "Available WLAN" + }, + { + "name": "wifi_List", + "value": "wifi_List" + }, + { + "name": "connected", + "value": "connected" + }, + { + "name": "ip_address", + "value": "IP address:" + }, + { + "name": "gate_way", + "value": "Gateway:" + }, + { + "name": "net_mask", + "value": "Netmask:" + }, + { + "name": "primary_dns", + "value": "Primary Dns IP address:" + }, + { + "name": "second_dns", + "value": "Second DNS IP address:" + }, + { + "name": "server_ip", + "value": "DHCP server IP:" + }, + { + "name": "lease_duration", + "value": "IP address lease duration:" + }, + { + "name": "country_code", + "value": "Country code:" + }, + { + "name": "infrastructure_feature", + "value": "Infrastructure Feature:" + }, + { + "name": "ghz_feature", + "value": "5 GHz Feature:" + }, + { + "name": "gas_anqp_feature", + "value": "GAS/ANQP Feature:" + }, + { + "name": "wifi_direct", + "value": "WiFi-Direct Feature:" + }, + { + "name": "soft_ap", + "value": "Soft AP Feature:" + }, + { + "name": "wifi_aware", + "value": "WiFi Aware Feature:" + }, + { + "name": "encryption", + "value": "encrypted" + }, + { + "name": "open", + "value": "open" + }, + { + "name": "location_permission", + "value": "Allow app to obtain device location information" + }, + { + "name": "approximately_location_permission", + "value": "Allow app to obtain device ambiguous location information" + }, + { + "name": "GET_WIFI_INFO", + "value": "Allow applications to obtain Wi Fi information" + }, + { + "name": "SET_WIFI_INFO", + "value": "Allow applications to configure Wi Fi devices" + }, + { + "name": "GET_WIFI_INFO_INTERNAL", + "value": "Allow system processes to obtain Wi Fi related parameters" + }, + { + "name": "GET_WIFI_PEERS_MAC", + "value": "Allow applications to obtain the MAC address of peer Wi Fi devices" + }, + { + "name": "GET_WIFI_LOCAL_MAC", + "value": "Allow applications to obtain the MAC address of local Wi Fi devices" + }, + { + "name": "GET_WIFI_CONFIG", + "value": "Allow applications to obtain Wi Fi configuration information" + }, + { + "name": "SET_WIFI_CONFIG", + "value": "Allow applications to configure Wi Fi information" + }, + { + "name": "MANAGE_WIFI_CONNECTION", + "value": "Allow applications to manage Wi Fi connections" + }, + { + "name": "MANAGE_WIFI_HOTSPOT", + "value": "Allow applications to turn on or off Wi Fi hotspots" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/base/media/about.png b/ConnectivityKit/Wlan/entry/src/main/resources/base/media/about.png new file mode 100644 index 0000000000000000000000000000000000000000..2613fc352850e45f0582fa825183e3928cef3378 GIT binary patch literal 7007 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

3UGS@u#26i6ROG0PJCg1D(REzzvP zKT#Sy(^iS1D;Y&;LXq<9`R}GZ^%-aJv%Aydx$(rFi7Nck!lPz~2Uv^%=Q_|2^(!$O z@nnw6rAjr|0UFegwVr7F#vk7Ylx{xnq(mlu#f*&rp?7*^?}1PSSH=R6fDqXNthHD6 zcms1|yxHKc1nCU|V^Ui6RJCde@I!^zXx=Mt{~X5++kKH0TU_ZwhHGsMABQ8-&Xr>THu5TN9DWC?ac!MJIOdlf!S8DL!~d6O)`3q-Kav?Q|{ zzj@;lOk@UbgAMqzB4$rX&pI(Ifsjq2h)%0CVXy2O5SOQ_b)EoQqhnb@6N9_V)t|tn zTv16DSpsh;7?`v&Rm$Ayt{VO@u^v51$yxHZUFX-fgv8u*ib3Z#?dF(ec(!%)%4RpH za9?f%D&$-V!>6vAxoQHax==|#mI@+x>$K#7KNdY@Q*zU(9+lgK;8bVWvtkt3p=h5@ z84L3t&jvfQRMm=o8`coYR)~jY-k1k9>mO{ei@n=ip~(2d6Z2n#Ci_hxEQ{mwlzqED zCtgz;jJ4BFCu8WOBdD=Aj5I8P6)(Ivo{ib$#xs?aKs4-Pq_!lCYlZi5X83~0Mfq4~ zp`#~NU$^GZL?kjpUEtAR!1;piaFmSW7T$SoQq>X={Nad*fGeV5&v-|;N8yx>!!cwA z5XMyHd})@hz*jmVbY&!%9R<4FgPxjjmLj~m!n4~Q_*ABb(`p0Z^Kr0T#@bMEcnhoV zDN5hSQi)tel&)O8-8p&`CW!7ob2kRnSoJ^ofswapq`g*0N>s{Ox*)oXx(DaK#Iex` z3&SJUO@C8pjCdfr^+*Wj_xvIC4r*I5iOH|j0wc{1QWOJ8Dhnfz%^%f8mUS#r0_pE zLsEw&@w=i`2ky9b*AZV{+7f%t21Qq-lUndjLu|7>=L}ir1f0gF z1Rf1|$dYHXG}z$_%*X3u?#;C{!iI8pKk6ucx|XDfoDQ>V-vAC%2bHa( z*zg1}WYieUGi#TDifUs0=EcYZuqFzC>PU_77B@;#F#pqo&h=kC85jya?idc_Xj5LF#`xyFi zLh-B2EZEW1*RdiE9!x%q)6q? z%Y6}Xu=H)0z8u)XbgVrF;;M-jziQn$HGCY<0}eMZOImaQKbyeS1Mbh{)#-gF{Ipcz0dd2Q5@93BP-ph0UM+?edaREvAC z-Q$RCg)rURw*8F~iEBWmum3I(t^W_t4$icBTr zauFYB^FN$MUttvkdDwpy(BWRa?1<)kX6CWtKkYg1eT(VcTrWh8fEmNi75rz)VKUHd zzL4rt;;08a*&p0zMjayErqIuM-w0pcR!u$O&8kD+Fk(<6p41vqhtjGi6ZIs;MYP4X zNwAN+mIj4Td;6~*gd6h4tGW@yzVRCSBrw6Bm#M+M`XXtIkx$WVEOF$T_Cgr!^2jjn zcctfiztqMDkJf|k53~>~u4OCVyj2kg3iDHkHPL>nQ%g$1X-Imx^F3wsr}5Wwf9ilV zDrDAC8d#GfKeYb^wiSwtZ%IKO2Q3*&sBbj{JDF;Jr4)1ob8)0P8nnw^lr+i~T>oau gQkCxiMfhCkrQC*zKQ>R*fImGD^&ri)&Y8jeFHV5$2LJ#7 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/base/media/icon.png b/ConnectivityKit/Wlan/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 KV+h)}u>S+Q@eiT^ literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/base/profile/main_pages.json b/ConnectivityKit/Wlan/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..ae818d5d --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,10 @@ +{ + "src": [ + "pages/Index", + "pages/AvailableWifi", + "pages/WifiConnect", + "pages/P2pTest", + "pages/P2pSetting", + "pages/AvailableP2p" + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/en_US/element/string.json b/ConnectivityKit/Wlan/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 00000000..53657655 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,232 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Wlan" + }, + { + "name": "entry_MainAbility", + "value": "eTSWLAN" + }, + { + "name": "description_mainability", + "value": "eTSWLAN Ability" + }, + { + "name": "cancel", + "value": "Cancel" + }, + { + "name": "wlan", + "value": "WLAN" + }, + { + "name": "sure", + "value": "Sure" + }, + { + "name": "available_wlan", + "value": "Available WLAN" + }, + { + "name": "connected", + "value": "Connected" + }, + { + "name": "about", + "value": "About" + }, + { + "name": "ip_address", + "value": "IP address:" + }, + { + "name": "gate_way", + "value": "Gateway:" + }, + { + "name": "net_mask", + "value": "Netmask:" + }, + { + "name": "primary_dns", + "value": "Primary Dns IP address:" + }, + { + "name": "second_dns", + "value": "Second DNS IP address:" + }, + { + "name": "server_ip", + "value": "DHCP server IP:" + }, + { + "name": "lease_duration", + "value": "IP address lease duration:" + }, + { + "name": "country_code", + "value": "Country code:" + }, + { + "name": "infrastructure_feature", + "value": "Infrastructure Feature:" + }, + { + "name": "ghz_feature", + "value": "5 GHz Feature:" + }, + { + "name": "gas_anqp_feature", + "value": "GAS/ANQP Feature:" + }, + { + "name": "wifi_List", + "value": "wifi_List" + }, + { + "name": "getScanInfoList", + "value": "ȡɨ" + }, + { + "name": "wifi_Connect", + "value": "" + }, + { + "name": "cancel_button", + "value": "ȡ" + }, + { + "name": "confirm_button", + "value": "ȷ" + }, + { + "name": "input_candidate_wifi_bssid", + "value": "ѡWiFibssid(MAC) (ɲ)" + }, + { + "name": "input_candidate_wifi_preSharedKey", + "value": "ѡWiFi" + }, + { + "name": "input_candidate_wifi_isHiddenSsid", + "value": "10 (ɲ;1:ture,0:false)" + }, + { + "name": "add_task", + "value": "Ӻѡwifi" + }, + { + "name": "p2p_available", + "value": "Ե豸" + }, + { + "name": "p2p_test", + "value": "p2p" + }, + { + "name": "create_group_test", + "value": "Ⱥ" + }, + { + "name": "create_group", + "value": "Ⱥ" + }, + { + "name": "useful", + "value": "" + }, + { + "name": "p2pConnected", + "value": "" + }, + { + "name": "input_candidate_wifi", + "value": "ѡWiFi" + }, + { + "name": "input_candidate_wifi_ssid", + "value": "ѡWiFiSSID" + }, + { + "name": "p2p_Connect", + "value": "p2p" + }, + { + "name": "cancle_button", + "value": "cancle" + }, + { + "name": "wifi_direct", + "value": "WiFi-Direct Feature:" + }, + { + "name": "soft_ap", + "value": "Soft AP Feature:" + }, + { + "name": "wifi_aware", + "value": "WiFi Aware Feature:" + }, + { + "name": "encryption", + "value": "encrypted" + }, + { + "name": "open", + "value": "open" + }, + { + "name": "location_permission", + "value": "Allow app to obtain device location information" + }, + { + "name": "approximately_location_permission", + "value": "Allow app to obtain device ambiguous location information" + }, + { + "name": "GET_WIFI_INFO", + "value": "Allow applications to obtain Wi Fi information" + }, + { + "name": "SET_WIFI_INFO", + "value": "Allow applications to configure Wi Fi devices" + }, + { + "name": "GET_WIFI_INFO_INTERNAL", + "value": "Allow system processes to obtain Wi Fi related parameters" + }, + { + "name": "GET_WIFI_PEERS_MAC", + "value": "Allow applications to obtain the MAC address of peer Wi Fi devices" + }, + { + "name": "GET_WIFI_LOCAL_MAC", + "value": "Allow applications to obtain the MAC address of local Wi Fi devices" + }, + { + "name": "GET_WIFI_CONFIG", + "value": "Allow applications to obtain Wi Fi configuration information" + }, + { + "name": "SET_WIFI_CONFIG", + "value": "Allow applications to configure Wi Fi information" + }, + { + "name": "MANAGE_WIFI_CONNECTION", + "value": "Allow applications to manage Wi Fi connections" + }, + { + "name": "MANAGE_WIFI_HOTSPOT", + "value": "Allow applications to turn on or off Wi Fi hotspots" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/main/resources/zh_CN/element/string.json b/ConnectivityKit/Wlan/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 00000000..d8484995 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,232 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "模块描述" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Wlan" + }, + { + "name": "entry_MainAbility", + "value": "eTSWLAN" + }, + { + "name": "description_mainability", + "value": "eTSWLAN Ability" + }, + { + "name": "cancel", + "value": "取消" + }, + { + "name": "sure", + "value": "确定" + }, + { + "name": "wlan", + "value": "WLAN" + }, + { + "name": "available_wlan", + "value": "可用WLAN" + }, + { + "name": "connected", + "value": "已连接" + }, + { + "name": "about", + "value": "关于" + }, + { + "name": "ip_address", + "value": "IP地址:" + }, + { + "name": "gate_way", + "value": "网关:" + }, + { + "name": "net_mask", + "value": "掩码:" + }, + { + "name": "primary_dns", + "value": "主DNS服务器:" + }, + { + "name": "second_dns", + "value": "备DNS服务器:" + }, + { + "name": "server_ip", + "value": "DHCP服务端ip:" + }, + { + "name": "lease_duration", + "value": "IP地址租用时长:" + }, + { + "name": "country_code", + "value": "国家码:" + }, + { + "name": "infrastructure_feature", + "value": "基础结构模式特性:" + }, + { + "name": "ghz_feature", + "value": "5 GHz 宽带特性:" + }, + { + "name": "gas_anqp_feature", + "value": "GAS/ANQP特性:" + }, + { + "name": "wifi_List", + "value": "Wi-Fi 列表" + }, + { + "name": "getScanInfoList", + "value": "获取扫描结果" + }, + { + "name": "wifi_Connect", + "value": "建议网络连接" + }, + { + "name": "cancel_button", + "value": "取消" + }, + { + "name": "confirm_button", + "value": "确定" + }, + { + "name": "input_candidate_wifi_bssid", + "value": "输入候选WiFi的bssid(MAC) (可不填)" + }, + { + "name": "input_candidate_wifi_preSharedKey", + "value": "输入候选WiFi密码" + }, + { + "name": "input_candidate_wifi_isHiddenSsid", + "value": "输入1或0 (可不填;1:ture,0:false)" + }, + { + "name": "add_task", + "value": "添加候选wifi" + }, + { + "name": "p2p_available", + "value": "对等设备" + }, + { + "name": "p2p_test", + "value": "p2p测试" + }, + { + "name": "create_group_test", + "value": "创建群组测试" + }, + { + "name": "create_group", + "value": "创建群组" + }, + { + "name": "useful", + "value": "可用" + }, + { + "name": "p2pConnected", + "value": "已连接" + }, + { + "name": "input_candidate_wifi", + "value": "输入候选WiFi的配置" + }, + { + "name": "input_candidate_wifi_ssid", + "value": "输入候选WiFi的SSID" + }, + { + "name": "p2p_Connect", + "value": "p2p连接" + }, + { + "name": "cancle_button", + "value": "cancle" + }, + { + "name": "wifi_direct", + "value": "WiFi-Direct特性:" + }, + { + "name": "soft_ap", + "value": "Soft AP特性:" + }, + { + "name": "wifi_aware", + "value": "WiFi Aware组网特性:" + }, + { + "name": "encryption", + "value": "加密" + }, + { + "name": "open", + "value": "开放" + }, + { + "name": "location_permission", + "value": "允许应用获取设备位置信息" + }, + { + "name": "approximately_location_permission", + "value": "允许应用获取设备模糊位置信息" + }, + { + "name": "GET_WIFI_INFO", + "value": "允许应用获取Wi-Fi信息" + }, + { + "name": "SET_WIFI_INFO", + "value": "允许应用配置Wi-Fi设备" + }, + { + "name": "GET_WIFI_INFO_INTERNAL", + "value": "允许系统进程获取Wi-Fi相关参数" + }, + { + "name": "GET_WIFI_PEERS_MAC", + "value": "允许应用获取对端Wi-Fi设备的MAC地址" + }, + { + "name": "GET_WIFI_LOCAL_MAC", + "value": "允许应用获取本机的Wi-Fi设备的MAC地址" + }, + { + "name": "GET_WIFI_CONFIG", + "value": "允许应用获取Wi-Fi的配置信息" + }, + { + "name": "SET_WIFI_CONFIG", + "value": "允许应用配置Wi-Fi信息" + }, + { + "name": "MANAGE_WIFI_CONNECTION", + "value": "允许应用管理Wi-Fi的连接" + }, + { + "name": "MANAGE_WIFI_HOTSPOT", + "value": "允许应用开启或关闭Wi-Fi热点" + } + ] +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/mock/mock-config.json5 b/ConnectivityKit/Wlan/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..fec94bca --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/Ability.test.ets b/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/List.test.ets b/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/ohosTest/module.json5 b/ConnectivityKit/Wlan/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ConnectivityKit/Wlan/entry/src/test/List.test.ets b/ConnectivityKit/Wlan/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/entry/src/test/LocalUnit.test.ets b/ConnectivityKit/Wlan/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/ConnectivityKit/Wlan/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ConnectivityKit/Wlan/hvigor/hvigor-config.json5 b/ConnectivityKit/Wlan/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..48fb3469 --- /dev/null +++ b/ConnectivityKit/Wlan/hvigor/hvigor-config.json5 @@ -0,0 +1,5 @@ +{ + "modelVersion": "5.0.5", + "dependencies": { + } +} diff --git a/ConnectivityKit/Wlan/hvigorfile.ts b/ConnectivityKit/Wlan/hvigorfile.ts new file mode 100644 index 00000000..64b143a6 --- /dev/null +++ b/ConnectivityKit/Wlan/hvigorfile.ts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +export { appTasks } from '@ohos/hvigor-ohos-plugin' + diff --git a/ConnectivityKit/Wlan/oh-package.json5 b/ConnectivityKit/Wlan/oh-package.json5 new file mode 100644 index 00000000..5f609682 --- /dev/null +++ b/ConnectivityKit/Wlan/oh-package.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.5", + "license": "ISC", + "devDependencies": { + "@ohos/hypium": "1.0.6" + }, + "name": "wlan", + "description": "example description", + "repository": {}, + "version": "1.0.0", + "dependencies": {}, +} diff --git a/ConnectivityKit/Wlan/ohosTest.md b/ConnectivityKit/Wlan/ohosTest.md new file mode 100644 index 00000000..e02cd4bf --- /dev/null +++ b/ConnectivityKit/Wlan/ohosTest.md @@ -0,0 +1,10 @@ +# P2P模式开发测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------ | ------------ | ------------------------------ | ------------ | -------- | -------- | +| 拉起应用 | 设备正常运行 |点击运行 | 成功拉起应用 | 否 | Pass | +| 主页点击create group按钮 | 打开WLAN,位于主页 |点击create group按钮 | 主页显示success文字 | 否 | Pass | +| 主页connect按钮点击 | 打开WLAN,点击create group按钮后,位于主页 |点击connect按钮 | 输出预期日志 | 否 | Pass | +| 主页delete group按钮点击 | 打开WLAN,点击create group按钮后,位于主页 |点击delete group按钮 | 主页显示的文字被清除 | 否 | Pass | \ No newline at end of file diff --git a/ConnectivityKit/Wlan/screenshots/GET_WIFI_PEERS_MAC.png b/ConnectivityKit/Wlan/screenshots/GET_WIFI_PEERS_MAC.png new file mode 100644 index 0000000000000000000000000000000000000000..9735598afc20df84495b15be119750bd92d62f87 GIT binary patch literal 87638 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

PBR9tH_Un3W6%^eMb~c-|77Cj4z%HiZx|H{od5p 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 CfGuwT literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/screenshots/connect_wifi.png b/ConnectivityKit/Wlan/screenshots/connect_wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..29cfe4907984c6cc08f7dbafe51e47e74a0bcb2b GIT binary patch literal 61887 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 z⪙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 z zu2^v``_o@Y&g#mYHDe39OEeErlRyw=;>W%)9*VHoQz@%DI>KCQ}X;8^k zpF8wgt(WArh{F{$Ig8iJ${gJb&O~PgG3)pDS<+7^pN|i5GckH?=0mz(r-=IekS=%L zqwFjhgO?ttFOk3+597#T8O*ilSbvD)FI=YCfG|j_cS5BWnYf@x*fEoQu*krUHhErIhF%?*U}zMJPcd ziWR?B!2g&(*>f*7B>+d<6|$37@tU7jfH5hdM`>`qau!-Vu`@#|sYdwXF;9{PB^Zk_r+Hr8n9+gB{T$8W zv9k^P>Q0?C0hn^C``tIg5$cC^ zHrUG!D?Ivk_b{^J>o*2(lCOT-jxgpdf@U7jHmY|;392h33ge?^+^e^CO1R26^kW;_ z(r7oD*w&hyR#dinRRDeb@#FV^*6nig@}>!=xVTqq&^^EhY6-Xls0ePrdkHvJA$mQ* zEaO+ejO5=J4`@4*KsXFKouV%AvDu4`#pzn7scQQsqh?>_WC8HQ4LDvvKLJp0+u6qR z?HNpbV})6F8~`IX#?VEraojKf;0b>C^PTt>r6=&(0!=ue!;lA)vj960=py2|VU)m~ z#cDW@f)iS#TUqe^yHxH_{)iR!U0TcBL!pn~%Y>dn;Py83!j4(s!pQ=*?=XCD=B>#} zPVmyd{ck}F`GKMbycK}I0~zQA5M%?*1|YD0p8HMQW)0pQu&DtDHZbGd15XF5m$b)- zVb7=Y*OZG5AHtsSmQXyE6s~mWzDva$-4@;rGFKYr$dH zpG!ZmK5^D$A-uNd+LhiL@yiV+E^c8@LkCP>CcJ@$`ke)@;1dWA*&U;pik3S`)ySc& zUcP>bCQ%lC(fBuaqhij|^ial{OCsE}hGn?@S|`a=vAsR?ETDjl6*?~5WfV0yZ>GGT z)5B3$<|23%=QtPhR)1%}TRZj`pTWs9sDF{01E_BqrVCd6CKxp3!rV+x=r? zf;3JsF2&8%k~2TGe=v?25@X(@KJo$IOIaqvx4vr`p5!u<26x7d&3cRAr&L+{3H#la znG+nja=VHl-kc%G2ApCBr~3ymK6kx)tgP;U=1+!xHQx%aBHXl02QdymQu<4$;_~UD zCT^?FfL*r;*6`jMp&LG0bP9bh>UQ#JCct(UZ?tw%A|okoCb#v}R)vzsKU%&abNnW9 z!c~86FwSN6t|hKVt8m!1mUk-(_t9*BRyLH9-*)mPXfp%k0d<^jIh6Ac!W>%Bd{9ZSZ2P-?k>5y4LGdk z<#=G7s$cg>jj}5?*=DK=34jYlo2~KEOmKarI4<@&$u;2Xg&i+l09X?u;o)=RR$%Y6 z*6?X4N7;6&>VT)7UgT3AnDqxjpl0#+*0?hG>aJ^r?pDHclh`lu%$D*@hh%TCa$xaKYOF>PI2bOZK-8Ex;vZXAYq0ELwvwF48 zL$SjGFR&LXYZ{cgHc(OQEKcYi4 zM`*u|S&kM%%b}G?RfR(}CQBm9D-Gv7I@HsN4UWUE376ZBo;H??AI3lQhol4rU77s`0MbeubKzs(qk#(%bGefPoH(9l%v}13WcHC3O;b?E(m)8sp9h)Gj*GdtSqXCe~mYD+o7T zHZ^Yd=^@taLZPJlhOyY`Op1ia*>l>te0kbo)Xw-AgSS+Pz|s)U;gRYglw) zcQDyo*rgLU-s&y2cuL=IGP%veEk=>27LzZ-8 zpP|6Hd#G}c(7=`_*Wx0fy}AF9-eW&<4zs-Q{WRY-J zDsAs*pZLk$5KRlJhq$mDCF(@_%)lz_fMCBA)CL{bs%hO)AZXYmow)RtQsLGFC=X=D z66T#?m~nEV7q#-xIzxk>&+_CJuz3@5ON8z}O#q7aI@!NLN_uon3)udEZI;6oJ-t?6 z^sMUkwH5%agJ48||Nc;=^_WGPn;axgr`#M^2tt5*b1?>F_G_PjFElS38;DVIU^0<- zwQ|QOuoVQUN28L#O%Zz7-byz%JR=Qtx?K-Qus!jr|ERDv4kiOE{+z*G|IQ4+y#OiR zyLn4Mg}-|3_FJBJ#?~VRnu<2;a)7Z20k;bf)d23ns<`tc+8?m+G;lpo~0vdwg=h%qX7mlG)%$VgEb!Fbi}(96NYk1m>l9nr!?%>fju+ zKbaJ5%UP7gFA_G!pB%}Lo+I4&A&xcT}CA+%(+Q96{zR^-5D>W77EV1j!uQz8F{Qo9&25>+ULZ7dYH>|6>Y$DCf9SN)=|(%Lm*_ZCg3-q2ERMCs1Bmf z?Q4EVRV;B;ov$kOexgl*_24Zk%EoHM_&aY+flrF?3J@qkK~b+)3|wu#1qP-INmp60 z54kB)#*Z_vd;Muz>M7%ej@g{;{5oEY+p0H+K9U7ZJHNJcv2m`9+0Mls9`Q1#Jrt?N zld6JIdt6tteK%HK`ccd}j%1d3m)E3w&Cv(-sZFq}USVJ1$;8&*;k8+7!3YI+&oX8R z=&f>8w7;IUjW!AGDf8%L4eX>2-rKoq5@RiBeQ_RXI;TV~r1ofN5r1tVzr4vqNHusy z8T~oLH-CRzVH4@G-NKEScsI3Ql0f z21rP-YP<7M819>2zj^7DkFUQH43J+gF1SB2xb+LZK-AdibVSgDDM^5(0`B8-la9Ms z@iYl9-5c~v8Qid&W9`Bbr*nafHUcm}4FCmYtSp1sviD#XgvD4Xapm21xr|L)M@N4W zOaJMKSUNBsjilx?2ht#neqHR;VCiSzunLR}{|%1@l-QO27z#%0^yuGazdhW|@<)=A zO`swK$@s+uJMaWT0m5QmqI%6@iOp^Ce}1SmuqH#)c#VGipE}!5CTSWW%%@LMB&Js9 zc-|i{Fff$}xKmk#w2hYD*8~g1Dw|#Lr(#iggw-y)s7t2GxOSV@jO972Aa<@(9#*-L z=DwP6r2liVyhMXPx#5gP$Iqb5Q*%j|TfmlkI_2F1QPW}wJZr1|Xe4ho!=mY4Za;-x z*E1a(RaKvSyP=({Bxn(DwEDmnC@=jwR5S`_jnhzxO|CX9)!0eV{=72;M-qh7{kEHB z;gp$M&h+VJ*|I$7J~}yr6Qg|-fWHre#&v4T}HkTPL?uWM}r z-Zf6CPwz2yi(ZQH+U7N|{ev2cQO})meS}YO?}@2Q^1t{LV3TW5x85D4t31{zDivjl zkbIUeQ#4?F7Ynr^35wDUZ;GpC#`&6-iHzA!P84_@$@Na<&@&G;vQRx%664rw;!qN} zXi^(37P*uMb=9&bM_i4@Q920??)6xpc}t zZ;S@tXFc2)D*>4dhC3Lf(mSc&K=L#Ta(tiw%Fs9iwpw5q_#BYP>4EbGXgLtgU~DkZ zrGm4Ca}SDHIRq+;!_|S7dU&2q7^9@OC&+G|DsxOHN(Cc<4;J7?!wN@07WQv=7~qXZ zis3r3O`P{x20=;$mI1{4AUEp^rxm_;d+zMl>mGuttw#nw; zj^nv_rNa}=+`M$SPhD`Q2=i%)#_YA`T(QXO`*2#ZX?DTLO*{9U&fq^Z%7$*|^mqcX zaMhyOlVDGg?E#D*Q=J^emYwbcTK~|N#nc+_z3r1;CTl@E`s9~(xFX?Q^n%q(o0($k zbf*<`(b>EiXN%QK?1-d*!@h|FdSM=(7BnV#uaLp%c-+BkVr?P2+nV3KW}qb%-l3fG z!fd(8{m#we0WpVt=FDKO$apadal#1Cn}NxZqw>IIB$VA zj>pkTgwx|8ip!cbHsfzzO|&>%(2!B_KO603PcLO=)F&r$7%b=grePhG$D1E~O6+!8!VJOkoXBW4;ENkfpMIqh`pV@^K35`Whtx(A!h}m=YJc-K z-Yh=&!}R?1!Y6cTu!-^g_J}tR>2n#*PyIiY&tS@0GS#lianvXCoEm@rxRoP*t^H}Z z*He`}*Fd{-&M`}B48K(&DuxD6$L4m;>{z2FGYsWr1I8?LU1@D-2QJS5*8|hr#ohOV zA|ilwW{!(^pK&RdZUtyNNdMa$-=+N|PF9)BQq|zh!083JB?0M=GZy1@yfX)O$lLYK z{(c{zena%n_9P2pL6_{GH?$oOo@*RviQB`dV^Y0L6zAvLLNn#UPY%X@R~`Z5N=VF8 z@srg|K)S(jl~34!8^LR{v_tV*XA-|Ps7_0Y@;D%hRc^L3lLeZbW-koZz`$?df?!Z; z+*W4R4LlW&I+-H>iQ`yR;Rt%Ocn!4&)wWa1UMGC!JvEO0o2fgbsj=(}C1c)vrXQwj zC2vyQKva+7`k{Ae89dg?aH}{a%~%6Zhhn*8n-_4wos!(XyAPj%nx$lMGS-OgEPeqW zte!@H(CQkaoCaqNHDYkvf*7#f7e}FVkIo~T#Dv#sJLOMb-oj!^mG=2!EZ9zy;BQau zJZ2x?I1eZ|y&bV3F4Wj>^f|rxhT3^xHk}xk&t~Eq@>~Wn0jue(9Tm0SDd&w5mtzk` zFAl7;lmxU$3_8aIUt?EsEAguKa(UC#Y-uT&&MD@$KKx7CPpkNBS}U2V)pE!@oI$)# z<5-$y_7=L_-K@FZE3o~Dnr6%*2zQ^B@55r0Ywrjh?!_MRThV%#s%J~wmiQ^Ds`%N} z+JuGNH(qvK!z)6 zG;cbtb%Z6q{2b8znjmC5(^!A;=h(YtxB*Q;4rfTOSsd!;<5Svx!#U>Xll42B+sqCy zH2)`W$>`z47qbY{MF9DI;A;%C;bP9W*p|6x4{vw%E%{0jMA*><(+Ecc9Y-}|pb=&B zXzPDnO{>Nc!4KT}{Ev2ghkEP9P|5c@BjpKmu7dpzS2{u&3@~5)sM^HJ`8z&T zb(M=PcHX&iLl$eoZUK<{Wg)nQ7}l{K5y|-g;k9sqI*S#4A?mzPd;N+V53YmR&hY_} z3Yk6~7WdIE;)qZqgjqX`G7Qz4Uv_hp7sJlE`N}qu{y#22ZXoBR0lNd8PU4Q&+iWn` z9L1~P_DzE&1cc4w*p2JHe?Qd-tKfU&=DwrGW$(t#9ez}y(h1{SV=t@|%Oa0_6m=rL zD522g+N^*4DF{X7%Y(h9CoG}$5Z0Iu(HN8ore%@0GXr?a$ezK3X!3Tw&_YAf5dm@U zL?xE<7=s3*1VF=bp`HYFRE6e z|5$EOxfh|MH+w}fh@A@UXIftCsc>a&#-H&Y3g7?zn}pvyB3<4j0Cg@gpV|TA-z{tdXT}{IM-vo3gvV;s4QLP+oicX(?Y#?bn2%^Q-cQ3_|-I zF}V3N|zbfhJBz`$k!Nt}*pNM-38Js+zeX8t6n4oq_OWnnl z^BJUxEM!~cNL-AFlwlR-UaGyPbI0l>?(yu}mnto#-imEmXIto6e4(RF#%zgZUiNkDEkdi1(uAXKvr;~sBYt#fY_rwBZ-qnop z@;W;^$t!M=v(y)fa&dl(OAqjGp|UHT+Yvb27wpt_dzx++Txaf@mt(76a*;KAcFfXC z+^%dHXXW*3g{%f~DXz+n#n0io)EBkOt(2MJ z(mG^cej$m-VAb$uA)-gW@-7*N4zz#gx-Rt>dL;-6LmSauAv4mrRND5zKbT8#@@Zz37lzx<6{WP6@-p%osMRZK$Pp%s{ zURjpE7i7P-b6oEn-@MKs?I^;GPuN;q=wDP1qr{vm#qD)pU1sO(^}}>-it*QvsMm(K zn~qVZ8d`^~Rr%bmWautD&^G9OUR&9|%+Fx4Mu;`(EZVe?=sN!3BCT83{nt6#&or1p znw$>(Ljn+66T7+uj9z*M>a-C*GAQ^0_2H%!0f)B7R3z2Ii zpRfCxd|~Tdh}OBhizn=+h3FQ~vsp{QxwThrj|ywhex6a`boYSCABb~_noCMFj77gu%N z!t`=06z}yo$n<6~U6U%AI9=l5azCxUiDb`BwH3T2@~enN-Y9i}gMUHovr5)CCU=I$ zTVD1(3ool^^ZzjOShr(~u)6tJL@7AkD3wLQ{>~umYD^IU9cP4WaLgzSnWQhO(t6Vw z<}D$(MOw`!%-ozwcO@V`@@c@06Wl4B+kH6*`6Sp8?}KZTH0`EObeH_pe7@?mqRDjA zcf{BT9$eIHsb8I}SeC!w@;$Nd4n|tPwTG6 zgi+jYopcCrsag?%e5_?@_9`?{i*H#*tmKA`b2QCRv7p&4pp(=quT@Q<3bDDx@S?Af zWwKOmF12H9TU=(yBz4qc-m~_15Usbby}afk^l-|57L|Vdq}9TEwYjGY8+R+I-R+O^ zfhgs`TbXWn%$kiN1L;Zri&Z(7QF@H?B`F1MycE~E&l7u1zBfbWQvn` zRtj4dr)&`;Z5gQ=-S4}1VuLRk7p64a?R+4{s-S{D_1c`cYq5XU?M>sfMATT;PM-0( zU{Uz^ZKZrRizwUKdGsgR4S2JNM-+ykz(EV@@w=kfD76qiIpH|%Z$c#uaSZaDi~k&7 z-Z!^~A(OJ1`N>AL(s{JHZc_ij)J(r^Y@Y zv?}|$v4wq?r|kK?Tt}`i;~a*)yk~MeWxtFeqFY5JygOQ<9Q=mLwmYg-MCzwt6Hqr!IY;b-V$Bi7POY-8#S$)(P?U(hF z#>zRF6RyP2X}*l>qAB-*Cl6$EgPA1`M62`^2gLUxllzyt(hbhiu@q^4k;EWsR^ij@ zWnziaJoOSc?=)>$z$iX9Hev1+@a0!TJff%a)Upn0)|KDsjZd~KYlJulHQ^CThF#?( z8%Pdhi%;zHN24dWB;SkLzP~qS5-%BV^r5;AD`g>%43jr^71CO(_c&W&uPf5thVyB6 z6R+32MIu{sS{|i}D%g{b!mfOd`;v79F-jBni)4-NGUV_rl2dyF$7r?_SsfT&k@vFr zQ3Ib$Oa99~j$ja$A2Z*n{ly%rXmMjisAV{<%b~BUC7fUd`yNr4;p}gf@>tg*YV>{< zSX_8^tIp3+>MW-KOWS4<7naI}xf{f5Pa`}(L~nlK=wxhY*VCHtevh#{2ttZdaCVQe zrpG>&S3l-&F)*=l{@G4mz-~rGVo~Y(qhOMzNbuCUmSkSvyOgKNwcgP8$Dl%>PlkH- z98F&ME$5^dO#dO{`;r8s;)m9E6a+K|w9%AOsq8Ygcm8Ot=5@J>jo-X+#MD@=YN%{mO}+iSV8jjYFl_7 zaPFNNQoHw~aiQJrxEVS~nLQpOw%t1o!J2MJ_7v^D$!Wrn%N=HuZAfVTu_?+&YkRb? zIu=Cqdw&|W$E%D5J4JxkUym#o@SGktO8J4mA8#!gr~ep&>ebXh^sO;kjP&(8L^Y_& zs+8UEy-G{jy`zLHR+P7yp@2=G?g?KD>l7t+IJO?+WD$Dx@|8k^Dk@_D#oxI?Nu>qWb{Om%0pdiByKcAEu>FSl$}Q^OwX%12F3oIPK_ z;#Gp*jOfTTM~rhMmvq#Z(3E~YayHur)RfqS=oL$xh6>9as*KN3sRQ=n@&?>rOB6@{ z79kEsNjl6`3}fxcY8Tz&X~ggr=ZoF6hl#f~QH1QG(e>_r9uc#h8t7(ciNFg!wr1+@ zRpKutL_5}n9VZW`lTwHcwU@nZQ}!y|mT9{8tl#h=ITOl@|7P>I3yv99i;5d=_Z@}u z5w9txBbpp6qeiJ?jZP1VgrCN3}{ALo3uMPPAxBdZ$Ff4jHsKggnD=xygHRA7o zcOuzPUQ~Ed9f2fEtsMMdqWwfm`0Ej^&d(1nmcg@$_1Cs96up ztTqvY%o$e#rB-s0?hTl^4 zv(I8?KU!BtuUS&j->QajM4nu{OSNHW98`wymLjV10YE)_1>nP;f39|Fq1-x0kp1VDYz&^nAbR!)k)L zhlPp3Sg=n@*AW*c!BAYl2|wDyH60n$)n!&~abJHbRob>rbRy}hqwnWzn;}$bfCAK}GU8@1<(BnY*Vt*N z63ncKl_uo+eZAzbdzkSH7I;CjXeq%8DwH=;iJk8Kn=x_zW z6_`1;xgXzD>$vFKp!Vuyt#CRp+3B}&dAu#JkXM_g%W(D&Uc(+2rK`(k#O=aoF*X$Q z$jF9hPRP465B%lQJ}G6nt`g!nvHst-Zdm(%oeFMyHO08)mXyD)E=G>tL8I&SMOs~W zqtq7Ofnx71a$)Z~_%GRI**}U7E`uruoQ@1TU5m>8)SS1@$hR~{BBUCYcqK%+?Jf4l zY74{qX!l>aH;xP);lsun`y{7{vnZzV4Dp_@I3gBGa#OmNnENMe2pVa}@^MjWj~Z*)4f%g(3{taE!VdG^f!A3aF)`Irt7Xyw>|hdl!v-6vkj3^X`zWK{~tq z+UoHaSFNMm@ClX1)1tx>A3KSU1Ct-7{lmDbN7ibLob`5VW>g-}tanxjr)D6roRlLU zi``SSb>eGJNn@CAU~PMlFMr>A`MYW*?EFn#CT2B71igIC-N|n;g(LF~V))fFbjOqd zWLSi=)u|4@##}5zcP9hY@CCgmYlEmRzO_M0ef561CXL0&Eqi6NsO4c^$sRx znr)nSR+2R2dFEOpI7V&7oQ`pLid~e2N!fU3M?;&43Jo)6cn5G&ucV_+ocWY6@YSLR z8*Yb^I$2In4*9w5d5v13!W%VWH(D=_b2D`Z52TRdG7B7Dy!b~AexBzAeU#tXgHn>b zX13!xkIrgb2q{N|b|uQdVRIaR(_940hQE^*_Z`OW5mcP@y)5aH<{y}iWcD~Wn=|1-jI9$zRfFcp-#f)k3HYn$)?H@jMD}wojM75B87?@cSk>d zu2_z6;yp@zADU(v;vu{cGSYAu#Uz9|mYN?Kt9lrb1=C_=|9NXrGmz7Gva)~)7oP)w zXqt;=vnJOVACyU_^_T!XkC4wyqOD6J%K(R45jp_0Uwt6whuhh6WO)^>mrMYfNc?m%_CpXjCK=xvyumiXR#@rUz^~6mT454oidz z_mPEX!Y4JJH>*E~7G=3uOg9(3pa*zIW0GBSd4jLlogyYTWSqm|&WbE#K0bHiioD2` z7@O<>S+r)=Gvsp_i`_9N0z@xc#_4Sar#830RZWykJ;wlf!iW7(L2)wd?NJNGs>Earyg`) z-Q~acsXy;K9}aX&S&S2-lW$BL4F_xCHExC0S_uVnslaO_Z`KHyAPKrAYfdl;C79#4 zXwnmHKRDN85&49qTTF(EauE(RSx&_3GhZP&U$V{~HL%EFHKOSoryuJ|C}5+STnA`! zDz9zak%laTyxIp|`3~Oj4qpDQY(#Q`EY|eqXnf;PoVr0@*)gjygTj0v3#HBZ*P_Sp zlAU|9mjjXPS|#uCXk*Jlv4fN%7I$Xg2sT(@mPlZ_$K`rtepAy0iz16;KDWi0ZG1vCc|G(?o5FqB0H-&hoW1RLii#pmXw zaD>AMdRectnSMZDJn_m|@k5(mw$Kb`m+Hq`_B2@NKZ~*-a=zso=!qgZO^(Zr|B2HB zdp~c*^i>*NTLPUCc9p`T!8E36^j=PBV8M)OY2mPmJ(@(6B{1~*sQZ=u;*iXuueh;y zc@+_F@6^T^HE=&e(-c(tM_&~ey?W4hsew;n<;JMH?|#*HX7wnr`0{|&&U+iL(F-Dr zErX(04g?Uz`{Ry88{C>BqmRP(zliKfdN_7QkS@N3Ej}d6U<=V!;*u{h#%X|M70fNx zY?$6k|4Yuio47RLorFrVa;kJ~mPAu#l*f68EoTrv$weKjJ1#2`ZZhJKl(Je*QH3+d zBRm}$xQW+hdn~nOp8m9gyO^qD>UzCovWF|Hhn{i~uL*=u#}PrXiFwfRnrFCJXxhy% zby0jWaq_gbe{sh)y{j-&XZN1Uk&niZ+Zlo#zO7nyPAzVKBCg$Rg}%~z(dX7|j3 z{i`oed!lFid!9I1>3Y0PSsPe!Di6bTkU@@(Rgq<9Pf#n9;7os`?Y#YE^FqqJL|Bc$ zm5!q5i?McUYjAIP<@+2I{`vZkMUv0BhwKpT`E`+Mn)@T87&I^FDZN{s_S4%!hq@FRg* zPR{b80-W&al;(H>8l#HCB+cviSsZh&A?AA?)5vQg)v|f>geK|oc(?9{`j})8Z_qWn zi%!J*Zf3|H8X}AM#h8vUbQZkrLVg5Hl%L|?obkr8SrFe!GMwr>v{Z$DT+ zZ@+1FF<6g}e^VWE$~^n{K~Xg^^Tb(YiVq5@`1`<{cV$z|(ka^Ah8+9YqvaM(@Clq8 z^2^vQv`uTstLR4QXU5V*4>q;f&U=p+8Sz1zzImI}a}Tm(XNx9D_twK3C?8rMMBeuu zzKg&xWH|Y+PIDlYWF<0ROXN6>N&e7v2@1G1{PD8L(N(K*!&i2nmHYlqOc>I?T&Y8x zLzcMHF_H9?W|{*Ri9<5dN6ME%p zAHO6=alaJg{k5wNQ_5eZWWL(eCmgp;oxRKn*=_$B?G`@l){vuZ&fPt`o6H|y9+Uds z&9mz#7fP4l!T+R+;BmMqUWN)+dB76s`Te@|1B88H{HE`YMb7CIBb~j?PgR4Yqs5Mi z1wxFt9fS}QddKB_Z@(izODkE6kxj^9B5s9zk$zSd@<|b;PoAQE&lEe-{8l!IJ0NLy zmRHu`a*Rb3kz3?dH3@7KbKqI(0Z$p5hERD{kHE}9lji_eJub^F*oHbPcdS$L_|Kfr zMddF?;vnw0dZ$_I7@$Ddf_JLDcl}C7Cr3sc&2;MSn1KpxNYTUjJ`^_ZnK=u>4g5fp z+(xH5End%dr0F8%W{g~Jl>97aL`^PbgZN>7zL$NX;zGr9(&?7b<3_OsGt>x#+q>+Q zpcwsd6R*A&#lY#yP?5-w$2nJgC&OUGHi5^MacvQtkejDHc zHlX|*-zF{ayF|nW&;VKA%K#U!1&^lAr9YE>xy15iJVW8xKLCOI%eZm9WZvB?WZyxm z`{2ek04r31qRZxpWJLPXl~{lpJZZiJ@PjJwXp8V&1Y8KLSdIDNmrF$Blu|aOGmIJ} zm#@FQ62u)sbQN5C3OuSh^;-uQ`fri{eUks}$^Sn$4qmAMe(BP^7Z4d~jsNcS|H9FK zf&IVJ=f89OzhvXTwC%qH_`fXuzk27tqU^u&_P-kZzi!5VeWCxFSD+0Dez$9ZFOxK3W5sapOM@jHoaJ8Td;-B0TSY0$*-EaG(G-g(03v9O;T;ePG~Frk>)3sKb0KxmJ4#_yZ!;74JYo;t&ws z0(EaZ@CJ{Ia|ZtVC(>2+vuW<3LqH<8x?w^DF8<}oj!)$EucZ+Q=U*;?e-K#}nc`PQ GzW)c*O#L#;myUj|i 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 AJpcdz literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/screenshots/main.png b/ConnectivityKit/Wlan/screenshots/main.png new file mode 100644 index 0000000000000000000000000000000000000000..8c495d76df076285552397b93e61f7e45423dc15 GIT binary patch literal 34475 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/screenshots/p2pconnect.png b/ConnectivityKit/Wlan/screenshots/p2pconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..e97c119452864f0314a52a4214b3dad983277719 GIT binary patch literal 23531 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�HZR(o|gD8GNtnBRU{x~>Ybuc89G&E?I&QKzM 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

qQc2E5PYbO07N_p5Rq$!x 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 literal 0 HcmV?d00001 diff --git a/ConnectivityKit/Wlan/screenshots/wifi_list.png b/ConnectivityKit/Wlan/screenshots/wifi_list.png new file mode 100644 index 0000000000000000000000000000000000000000..b80efef376dc41afe8a990444e05dd5f612cc410 GIT binary patch literal 99321 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

Gsq&` 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 ME7Rs)a>Kp<4=doN%>V!Z literal 0 HcmV?d00001 diff --git a/bluetoothSample/.gitignore b/bluetoothSample/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/bluetoothSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/bluetoothSample/AppScope/app.json5 b/bluetoothSample/AppScope/app.json5 new file mode 100644 index 00000000..61caeed5 --- /dev/null +++ b/bluetoothSample/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "app": { + "bundleName": "com.samples.bluetoothsample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/bluetoothSample/AppScope/resources/base/element/string.json b/bluetoothSample/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..1407cd98 --- /dev/null +++ b/bluetoothSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "bluetoothSample" + } + ] +} diff --git a/bluetoothSample/AppScope/resources/base/media/app_icon.png b/bluetoothSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/bluetoothSample/README.md b/bluetoothSample/README.md new file mode 100644 index 00000000..46ad38cf --- /dev/null +++ b/bluetoothSample/README.md @@ -0,0 +1,153 @@ +# 蓝牙示例代码工程化 + +### 介绍 + +本示例为开发指南中[蓝牙服务开发](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/Readme-CN.md)章节中**蓝牙设置**,**广播与扫描**,**通用属性协议**示例代码的完整工程,该工程中展示的代码详细描述可查如下链接: + +[蓝牙设置](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/br-development-guide.md) +[广播与扫描](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/ble-development-guide.md) +[通用属性协议](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/connectivity/bluetooth/gatt-development-guide.md) + +### 效果预览 +|Scan界面| Bonded界面 | Adveriser界面| Switch界面| +|-------|---------|--------|----------| +| | | | | + +### 使用说明 + +1. 启动应用,蓝牙权限申请点击同意。 +2. 切换到SWITCH页面,单击开启蓝牙,等待上方蓝牙状态变为BlueTooth State: Connected。 +3. 在SCAN页面单击设置过滤参数,可以设置扫描的过滤参数。 +4. 单击开始扫描,设备开始扫描设备,扫描到的设备ID会以弹窗形式展示,单击刷新,可以更新下方的设备列表。 +5. 单击停止扫描,停止扫描设备。 +6. 单击设备列表里的connect,连接设备,设备信息会在上方循环播放展示。 +7. 切换GATT页面,填写读写特征值和描述符的过滤参数,上方输入框为写特征值和描述符的过滤参数。 +8. 单击发现服务,可以获取已连接设备的服务列表,获得的内容在上方显示。 +9. 单击写特征值或写描述符,根据上方过滤参数写入特征值和描述符。 +10. 单击读特征值或描述符,读取特征值和描述符,读取到的内容以弹窗形式显示。 +11. 单击断开连接,断开与当前设备的连接。 +12. 在Adveriser界面,单击注册服务,可以注册服务,单击注销服务,可以注销服务。 +13. 单击订阅读写特征值可以订阅读写特征值的操作。 +14. 单击设置广播内容,在打开的弹窗中设置广播的内容和参数。 +15. 单击开始广播,设备开始进行广播操作。 +16. 单击暂停广播,设备暂时停止广播。 +17. 单击继续广播,设备继续进行广播。 +18. 单击关闭广播,设备停止广播操作,关闭广播服务。 +19. 切换到SWITCH界面,单击关闭蓝牙,关闭设备的蓝牙服务。 + +### 工程目录 +``` ++--- src +| +--- main +| | +--- ets +| | | +--- bluetoothService +| | | | +--- BluetoothAdvertising.ets +| | | | +--- BluetoothScan.ets +| | | | +--- BluetoothSwitch.ets +| | | | +--- GattClientManager.ets +| | | | +--- GattServerManager.ets +| | | +--- common +| | | | +--- AdvertisingDialog.ets +| | | | +--- ScanData.ets +| | | | +--- ScanDialog.ets +| | | | +--- ToastReport.ets +| | | +--- entryability +| | | | +--- EntryAbility.ets +| | | +--- entrybackupability +| | | | +--- EntryBackupAbility.ets +| | | +--- pages +| | | | +--- Index.ets + +``` + +### 具体实现 + +#### 蓝牙设置 + +1. import需要的access模块。 + +2. 需要SystemCapability.Communication.Bluetooth.Core系统能力。 + +3. 开启蓝牙。 + +4. 关闭蓝牙。 + +5. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。 + +6. 如何验证: 执行开启蓝牙代码,记录日志“bluetooth statues: STATE_ON”,则表示开启蓝牙成功。执行关闭蓝牙代码,记录日志“bluetooth statues: STATE_OFF”,则表示蓝牙关闭成功。 + +#### 广播与扫描开发指导 + +##### 开启/关闭广播 + +1. import需要的ble模块。 +2. 开启设备的蓝牙。 +3. 需要SystemCapability.Communication.Bluetooth.Core系统能力。 +4. 开启广播,对端设备扫描该广播。 +5. 关闭广播。 +6. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。 + +##### 开启/关闭扫描 + +1. import需要的ble模块。 +2. 开启设备的蓝牙。 +3. 需要SystemCapability.Communication.Bluetooth.Core系统能力。 +4. 对端设备开启广播。 +5. 本端设备开启扫描,获取扫描结果。 +6. 关闭扫描。 +7. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。 + +#### 通用属性协议开发指导 + +##### 连接server端读取和写入信息 + +1. import需要的ble模块。 +2. 创建gattClient实例对象。 +3. 连接gattServer。 +4. 读取gattServer的特征值和描述符。 +5. 向gattServer写入特征值和描述符。 +6. 断开连接,销毁gattClient实例。 +7. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。 + +##### server端操作services和通知客户端信息 + +1. import需要的ble模块。 +2. 创建gattServer实例对象。 +3. 添加services信息。 +4. 当向gattServer写入特征值通知gattClient。 +5. 移除services信息。 +6. 注销gattServer实例。 +7. 错误码请参见[蓝牙服务子系统错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。 + +### 相关权限 + +[ohos.permission.USE_BLUETOOTH](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionuse_bluetooth) + +[ohos.permission.DISCOVER_BLUETOOTH](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissiondiscover_bluetooth) + +[ohos.permission.ACCESS_BLUETOOTH](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all-user.md#ohospermissionaccess_bluetooth) +### 依赖 + +不涉及 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo bluetoothSample/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/bluetoothSample/build-profile.json5 b/bluetoothSample/build-profile.json5 new file mode 100644 index 00000000..51fb5b5e --- /dev/null +++ b/bluetoothSample/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/bluetoothSample/code-linter.json5 b/bluetoothSample/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/bluetoothSample/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/bluetoothSample/entry/.gitignore b/bluetoothSample/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/bluetoothSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/bluetoothSample/entry/build-profile.json5 b/bluetoothSample/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/bluetoothSample/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/bluetoothSample/entry/hvigorfile.ts b/bluetoothSample/entry/hvigorfile.ts new file mode 100644 index 00000000..c6edcd90 --- /dev/null +++ b/bluetoothSample/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/bluetoothSample/entry/obfuscation-rules.txt b/bluetoothSample/entry/obfuscation-rules.txt new file mode 100644 index 00000000..272efb6c --- /dev/null +++ b/bluetoothSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/bluetoothSample/entry/oh-package.json5 b/bluetoothSample/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/bluetoothSample/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothAdvertising.ets b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothAdvertising.ets new file mode 100644 index 00000000..bcba2b8d --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothAdvertising.ets @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start open_close_advertising] +import { ble } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { ToastReport } from '../common/ToastReport'; + +const TAG: string = 'BleAdvertisingManager'; + +export class BleAdvertisingManager { + private advHandle: number = 0xFF; // default invalid value + private manufactureValueBuffer: Uint8Array = new Uint8Array(); + private serviceUuids: string = '00001888-0000-1000-8000-00805f9b34fb'; + private serviceBuffer = new Uint8Array(); + private manufactureId: number = 0; + private includeDeviceName: boolean = false; + public toastReport: ToastReport = new ToastReport(); + + public setAdvertisingParameter(manufactureId?: number, manufactureValueBuffer?: Uint8Array, + serviceUuids?: string, serviceBuffer?: Uint8Array, includeDeviceName?: boolean) { + if (manufactureId != undefined) { + this.manufactureId = Number(manufactureId); + console.info(TAG, 'manufactureId is ' + manufactureId); + } + if (manufactureValueBuffer != undefined) { + console.info(TAG, 'manufactureValueBuffer is ' + manufactureValueBuffer); + this.manufactureValueBuffer = manufactureValueBuffer; + } else { + + } + if (serviceUuids) { + this.serviceUuids = serviceUuids; + } + if (serviceBuffer) { + this.serviceBuffer = serviceBuffer; + } + this.includeDeviceName = includeDeviceName ? true : false; + } + + // 1 订阅广播状态 + public onAdvertisingStateChange() { + try { + ble.on('advertisingStateChange', (data: ble.AdvertisingStateChangeInfo) => { + console.info(TAG, 'bluetooth advertising state = ' + JSON.stringify(data)); + AppStorage.setOrCreate('advertiserState', data.state); + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 2 首次启动广播 + public async startAdvertising() { + // 2.1 设置广播发送的参数 + console.info('startAdvertising 2.1') + let setting: ble.AdvertiseSetting = { + interval: 160, + txPower: 0, + connectable: true + }; + // 2.2 构造广播数据 + console.info('startAdvertising 2.2') + let manufactureValueBuffer = new Uint8Array(4); + manufactureValueBuffer[0] = 1; + manufactureValueBuffer[1] = 2; + manufactureValueBuffer[2] = 3; + manufactureValueBuffer[3] = 4; + let serviceValueBuffer = new Uint8Array(4); + serviceValueBuffer[0] = 5; + serviceValueBuffer[1] = 6; + serviceValueBuffer[2] = 7; + serviceValueBuffer[3] = 8; + let manufactureDataUnit: ble.ManufactureData = { + manufactureId: this.manufactureId, + manufactureValue: this.manufactureValueBuffer.buffer + }; + let serviceDataUnit: ble.ServiceData = { + serviceUuid: this.serviceUuids, + serviceValue: this.serviceBuffer.buffer + }; + let advData: ble.AdvertiseData = { + serviceUuids: [this.serviceUuids], + manufactureData: [manufactureDataUnit], + serviceData: [serviceDataUnit], + includeDeviceName: this.includeDeviceName // 表示是否携带设备名,可选参数。注意带上设备名时广播包长度不能超出31个字节。 + }; + let advResponse: ble.AdvertiseData = { + serviceUuids: [this.serviceUuids], + manufactureData: [manufactureDataUnit], + serviceData: [serviceDataUnit] + }; + // 2.3 构造广播启动完整参数AdvertisingParams + console.info('startAdvertising 2.3') + let advertisingParams: ble.AdvertisingParams = { + advertisingSettings: setting, + advertisingData: advData, + advertisingResponse: advResponse, + duration: 0 // 可选参数,若大于0,则广播发送一段时间后,则会临时停止,可重新启动发送 + } + + // 2.4 首次启动广播,且获取所启动广播的标识ID + console.info('startAdvertising 2.4') + try { + this.onAdvertisingStateChange(); + this.advHandle = await ble.startAdvertising(advertisingParams); + this.toastReport.showResult('bluetooth startAdvertising start success'); + console.info('startAdvertising succeed'); + } catch (err) { + this.toastReport.showResult('bluetooth startAdvertising start fail'); + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 4 临时停止广播,该广播资源仍然存在 + public async disableAdvertising() { + // 4.1 构造临时停止广播参数 + console.info('disableAdvertising 4.1') + let advertisingDisableParams: ble.AdvertisingDisableParams = { + advertisingId: this.advHandle // 使用首次启动广播时获取到的广播标识ID + } + // 4.2 临时停止 + console.info('disableAdvertising 4.2') + try { + await ble.disableAdvertising(advertisingDisableParams); + this.toastReport.showResult('bluetooth disableAdvertising'); + console.info('bluetooth disableAdvertising success'); + } catch (err) { + this.toastReport.showResult('bluetooth disableAdvertising fail'); + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 5 再次启动广播 + public async enableAdvertising(enableDuration: number) { + // 5.1 构造临时启动广播参数 + console.info('enableAdvertising 5.1') + let advertisingEnableParams: ble.AdvertisingEnableParams = { + advertisingId: this.advHandle, // 使用首次启动广播时获取到的广播标识ID + duration: enableDuration + } + // 5.2 再次启动 + console.info('enableAdvertising 5.2') + try { + this.toastReport.showResult('bluetooth enableAdvertising continue'); + await ble.enableAdvertising(advertisingEnableParams); + } catch (err) { + this.toastReport.showResult('bluetooth enableAdvertising fail'); + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 6 完全关闭广播,释放广播资源 + public async stopAdvertising() { + try { + this.toastReport.showResult('bluetooth advertising stop success'); + await ble.stopAdvertising(this.advHandle); + ble.off('advertisingStateChange', (data: ble.AdvertisingStateChangeInfo) => { + console.info(TAG, 'bluetooth advertising state = ' + JSON.stringify(data)); + this.toastReport.showResult('bluetooth advertising stop'); + }); + } catch (err) { + this.toastReport.showResult('bluetooth advertising stop fail'); + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } +} + +let bleAdvertisingManager = new BleAdvertisingManager(); + +export default bleAdvertisingManager as BleAdvertisingManager; +// [End open_close_advertising] \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothScan.ets b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothScan.ets new file mode 100644 index 00000000..8aa2cecd --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothScan.ets @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start open_close_scan] +import { ble } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { ScanData } from '../common/ScanData'; +import { ToastReport } from '../common/ToastReport'; + +const TAG: string = 'BleScanManager'; + +const BLE_ADV_TYPE_FLAG = 0x01; +const BLE_ADV_TYPE_16_BIT_SERVICE_UUIDS_INCOMPLETE = 0x02; +const BLE_ADV_TYPE_16_BIT_SERVICE_UUIDS_COMPLETE = 0x03; +const BLE_ADV_TYPE_32_BIT_SERVICE_UUIDS_INCOMPLETE = 0x04; +const BLE_ADV_TYPE_32_BIT_SERVICE_UUIDS_COMPLETE = 0x05; +const BLE_ADV_TYPE_128_BIT_SERVICE_UUIDS_INCOMPLETE = 0x06; +const BLE_ADV_TYPE_128_BIT_SERVICE_UUIDS_COMPLETE = 0x07; +const BLE_ADV_TYPE_LOCAL_NAME_SHORT = 0x08; +const BLE_ADV_TYPE_LOCAL_NAME_COMPLETE = 0x09; +const BLE_ADV_TYPE_TX_POWER_LEVEL = 0x0A; +const BLE_ADV_TYPE_16_BIT_SERVICE_SOLICITATION_UUIDS = 0x14; +const BLE_ADV_TYPE_128_BIT_SERVICE_SOLICITATION_UUIDS = 0x15; +const BLE_ADV_TYPE_32_BIT_SERVICE_SOLICITATION_UUIDS = 0x1F; +const BLE_ADV_TYPE_16_BIT_SERVICE_DATA = 0x16; +const BLE_ADV_TYPE_32_BIT_SERVICE_DATA = 0x20; +const BLE_ADV_TYPE_128_BIT_SERVICE_DATA = 0x21; +const BLE_ADV_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF; + +const BLUETOOTH_UUID_16_BIT_LENGTH = 2; +const BLUETOOTH_UUID_32_BIT_LENGTH = 4; +const BLUETOOTH_UUID_128_BIT_LENGTH = 16; + +const BLUETOOTH_MANUFACTURE_ID_LENGTH = 2; + +export class BleScanManager { + private interval: number = 0; + private manufactureId: number = 4567; + private deviceName: string | undefined = ''; + private deviceId: string | undefined = ''; + private scanDataList: ScanData[] = []; + public toastReport: ToastReport = new ToastReport(); + + public setScanParameter(interval?: string, manufactureId?: string, deviceName?: string | undefined, + deviceId?: string | undefined) { + if (interval != undefined) { + this.interval = Number(interval); + console.info(TAG, 'interval is' + interval); + } + if (manufactureId != undefined) { + console.info(TAG, 'manufactureId is' + manufactureId); + this.manufactureId = Number(manufactureId); + } + this.deviceName = deviceName; + this.deviceId = deviceId; + } + + public getScanData(): ScanData[] { + return this.scanDataList; + } + + // 1 订阅扫描结果 + public onScanResult() { + ble.on('BLEDeviceFind', (data: Array) => { + if (data.length > 0) { + console.info(TAG, 'BLE scan result = ' + data[0].deviceId); + this.parseScanResult(data[0].data); + // [StartExclude open_close_scan] + this.toastReport.showResult(data[0].deviceId); + if (!this.scanDataList.some(item => item.getDeviceName() === data[0].deviceName)) { + this.scanDataList.push(new ScanData(data[0].deviceId, data[0].deviceName, data[0].rssi, data[0].connectable, + new Uint8Array(data[0].data))); + } + // [EndExclude open_close_scan] + } + }); + } + + private parseScanResult(data: ArrayBuffer) { + let advData = new Uint8Array(data); + if (advData.byteLength == 0) { + console.warn(TAG, 'nothing, adv data length is 0'); + return; + } + console.info(TAG, 'advData: ' + JSON.stringify(advData)); + + let advFlags: number = -1; + let txPowerLevel: number = -1; + let localName: string = ''; + let serviceUuids: string[] = []; + let serviceSolicitationUuids: string[] = []; + let serviceDatas: Record = {}; + let manufactureSpecificDatas: Record = {}; + + let curPos = 0; + while (curPos < advData.byteLength) { + let length = advData[curPos++]; + if (length == 0) { + break; + } + let advDataLength = length - 1; + let advDataType = advData[curPos++]; + switch (advDataType) { + case BLE_ADV_TYPE_FLAG: + advFlags = advData[curPos]; + break; + case BLE_ADV_TYPE_LOCAL_NAME_SHORT: + case BLE_ADV_TYPE_LOCAL_NAME_COMPLETE: + localName = advData.slice(curPos, curPos + advDataLength).toString(); + break; + case BLE_ADV_TYPE_TX_POWER_LEVEL: + txPowerLevel = advData[curPos]; + break; + case BLE_ADV_TYPE_16_BIT_SERVICE_UUIDS_INCOMPLETE: + case BLE_ADV_TYPE_16_BIT_SERVICE_UUIDS_COMPLETE: + this.parseServiceUuid(BLUETOOTH_UUID_16_BIT_LENGTH, curPos, advDataLength, advData, serviceUuids); + break; + case BLE_ADV_TYPE_32_BIT_SERVICE_UUIDS_INCOMPLETE: + case BLE_ADV_TYPE_32_BIT_SERVICE_UUIDS_COMPLETE: + this.parseServiceUuid(BLUETOOTH_UUID_32_BIT_LENGTH, curPos, advDataLength, advData, serviceUuids); + break; + case BLE_ADV_TYPE_128_BIT_SERVICE_UUIDS_INCOMPLETE: + case BLE_ADV_TYPE_128_BIT_SERVICE_UUIDS_COMPLETE: + this.parseServiceUuid(BLUETOOTH_UUID_128_BIT_LENGTH, curPos, advDataLength, advData, serviceUuids); + break; + case BLE_ADV_TYPE_16_BIT_SERVICE_SOLICITATION_UUIDS: + this.parseServiceSolicitationUuid(BLUETOOTH_UUID_16_BIT_LENGTH, curPos, advDataLength, + advData, serviceSolicitationUuids); + break; + case BLE_ADV_TYPE_32_BIT_SERVICE_SOLICITATION_UUIDS: + this.parseServiceSolicitationUuid(BLUETOOTH_UUID_32_BIT_LENGTH, curPos, advDataLength, + advData, serviceSolicitationUuids); + break; + case BLE_ADV_TYPE_128_BIT_SERVICE_SOLICITATION_UUIDS: + this.parseServiceSolicitationUuid(BLUETOOTH_UUID_128_BIT_LENGTH, curPos, advDataLength, + advData, serviceSolicitationUuids); + break; + case BLE_ADV_TYPE_16_BIT_SERVICE_DATA: + this.parseServiceData(BLUETOOTH_UUID_16_BIT_LENGTH, curPos, advDataLength, advData, serviceDatas); + break; + case BLE_ADV_TYPE_32_BIT_SERVICE_DATA: + this.parseServiceData(BLUETOOTH_UUID_32_BIT_LENGTH, curPos, advDataLength, advData, serviceDatas); + break; + case BLE_ADV_TYPE_128_BIT_SERVICE_DATA: + this.parseServiceData(BLUETOOTH_UUID_128_BIT_LENGTH, curPos, advDataLength, advData, serviceDatas); + break; + case BLE_ADV_TYPE_MANUFACTURER_SPECIFIC_DATA: + this.parseManufactureData(curPos, advDataLength, advData, manufactureSpecificDatas); + break; + default: + break; + } + curPos += advDataLength; + } + } + + private parseServiceUuid(uuidLength: number, curPos: number, advDataLength: number, + advData: Uint8Array, serviceUuids: string[]) { + while (advDataLength > 0) { + let tmpData: Uint8Array = advData.slice(curPos, curPos + uuidLength); + serviceUuids.push(this.getUuidFromUint8Array(uuidLength, tmpData)); + advDataLength -= uuidLength; + curPos += uuidLength; + } + } + + private parseServiceSolicitationUuid(uuidLength: number, curPos: number, advDataLength: number, + advData: Uint8Array, serviceSolicitationUuids: string[]) { + while (advDataLength > 0) { + let tmpData: Uint8Array = advData.slice(curPos, curPos + uuidLength); + serviceSolicitationUuids.push(this.getUuidFromUint8Array(uuidLength, tmpData)); + advDataLength -= uuidLength; + curPos += uuidLength; + } + } + + private getUuidFromUint8Array(uuidLength: number, uuidData: Uint8Array): string { + let uuid = ''; + let temp: string = ''; + for (let i = uuidLength - 1; i > -1; i--) { + temp += uuidData[i].toString(16).padStart(2, '0'); + } + switch (uuidLength) { + case BLUETOOTH_UUID_16_BIT_LENGTH: + uuid = `0000${temp}-0000-1000-8000-00805F9B34FB`; + break; + case BLUETOOTH_UUID_32_BIT_LENGTH: + uuid = `${temp}-0000-1000-8000-00805F9B34FB`; + break; + case BLUETOOTH_UUID_128_BIT_LENGTH: + uuid = `${temp.substring(0, 8)}-${temp.substring(8, 12)}-${temp.substring(12, 16)}-${temp.substring(16, + 20)}-${temp.substring(20, 32)}`; + break; + default: + break; + } + return uuid; + } + + private parseServiceData(uuidLength: number, curPos: number, advDataLength: number, + advData: Uint8Array, serviceDatas: Record) { + let tmpUuid: Uint8Array = advData.slice(curPos, curPos + uuidLength); + let tmpValue: Uint8Array = advData.slice(curPos + uuidLength, curPos + advDataLength); + serviceDatas[tmpUuid.toString()] = tmpValue; + } + + private parseManufactureData(curPos: number, advDataLength: number, + advData: Uint8Array, manufactureSpecificDatas: Record) { + let manufactureId: number = (advData[curPos + 1] << 8) + advData[curPos]; + let tmpValue: Uint8Array = advData.slice(curPos + BLUETOOTH_MANUFACTURE_ID_LENGTH, curPos + advDataLength); + manufactureSpecificDatas[manufactureId] = tmpValue; + } + + // 2 开启扫描 + public startScan() { + console.info(TAG, 'startBleScan success 1'); + // 2.1 构造扫描过滤器,需要能够匹配预期的广播包内容 + let manufactureId = this.manufactureId; + let manufactureDataMask: Uint8Array = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF]); + let scanFilter: ble.ScanFilter = { + // 根据业务实际情况定义过滤器 + manufactureId: manufactureId, + // manufactureData: manufactureData.buffer, + manufactureDataMask: manufactureDataMask.buffer, + }; + // [StartExclude open_close_scan] + if (this.deviceName) { + console.info('===lyk=== deviceName is not null ' + this.deviceName) + scanFilter.name = this.deviceName; + } + if (this.deviceId) { + scanFilter.deviceId = this.deviceId; + } + // [EndExclude open_close_scan] + + // 2.2 构造扫描参数 + let scanOptions: ble.ScanOptions = { + interval: this.interval, + dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER, + matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE, + } + try { + // [StartExclude open_close_scan] + this.scanDataList = []; + // [EndExclude open_close_scan] + this.onScanResult(); // 订阅扫描结果 + ble.startBLEScan([scanFilter], scanOptions); + // [StartExclude open_close_scan] + this.toastReport.showResult('startBleScan success'); + // [EndExclude open_close_scan] + console.info(TAG, 'startBleScan success'); + } catch (err) { + // [StartExclude open_close_scan] + this.toastReport.showResult('startBleScan fail'); + // [EndExclude open_close_scan] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 3 关闭扫描 + public stopScan() { + try { + ble.off('BLEDeviceFind', (data: Array) => { // 取消订阅扫描结果 + console.info(TAG, 'off success'); + }); + ble.stopBLEScan(); + // [StartExclude open_close_scan] + this.toastReport.showResult('stopBleScan success'); + // [EndExclude open_close_scan] + console.info(TAG, 'stopBleScan success'); + } catch (err) { + // [StartExclude open_close_scan] + this.toastReport.showResult('stopBleScan fail'); + // [EndExclude open_close_scan] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } +} + +let bleScanManager = new BleScanManager(); + +export default bleScanManager as BleScanManager; +// [End open_close_scan] diff --git a/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothSwitch.ets b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothSwitch.ets new file mode 100644 index 00000000..5b10dd2a --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/bluetoothService/BluetoothSwitch.ets @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ +// [Start open_close_bluetooth] +import { access } from '@kit.ConnectivityKit'; + +export class BluetoothSwitch { + public openBluetooth() { + + access.off('stateChange'); + access.enableBluetooth(); + access.on('stateChange', (data) => { + let btStateMessage = ''; + switch (data) { + case 0: + btStateMessage += 'STATE_OFF'; + break; + case 1: + btStateMessage += 'STATE_TURNING_ON'; + break; + case 2: + btStateMessage += 'STATE_ON'; + break; + case 3: + btStateMessage += 'STATE_TURNING_OFF'; + break; + case 4: + btStateMessage += 'STATE_BLE_TURNING_ON'; + break; + case 5: + btStateMessage += 'STATE_BLE_ON'; + break; + case 6: + btStateMessage += 'STATE_BLE_TURNING_OFF'; + break; + default: + btStateMessage += 'unknown status'; + break; + } + if (btStateMessage == 'STATE_ON') { + access.off('stateChange'); + } + console.info('bluetooth statues: ' + btStateMessage); + }); + } + + public closeBluetooth() { + access.off('stateChange'); + access.disableBluetooth(); + access.on('stateChange', (data) => { + let btStateMessage = ''; + switch (data) { + case 0: + btStateMessage += 'STATE_OFF'; + break; + case 1: + btStateMessage += 'STATE_TURNING_ON'; + break; + case 2: + btStateMessage += 'STATE_ON'; + break; + case 3: + btStateMessage += 'STATE_TURNING_OFF'; + break; + case 4: + btStateMessage += 'STATE_BLE_TURNING_ON'; + break; + case 5: + btStateMessage += 'STATE_BLE_ON'; + break; + case 6: + btStateMessage += 'STATE_BLE_TURNING_OFF'; + break; + default: + btStateMessage += 'unknown status'; + break; + } + if (btStateMessage == 'STATE_OFF') { + access.off('stateChange'); + } + }); + } +} +// [End open_close_bluetooth] \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/bluetoothService/GattClientManager.ets b/bluetoothSample/entry/src/main/ets/bluetoothService/GattClientManager.ets new file mode 100644 index 00000000..745998b1 --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/bluetoothService/GattClientManager.ets @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start generic_attribute] +import { ble } from '@kit.ConnectivityKit'; +import { constant } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { ToastReport } from '../common/ToastReport'; +import util from '@ohos.util'; + +const TAG: string = 'GattClientManager'; +// [StartExclude generic_attribute] +let encoder = new util.TextEncoder(); +// [EndExclude generic_attribute] + +export class GattData { + public serviceUuid: string = '00001810-0000-1000-8000-00805F9B34FB'; + public characteristicUuid: string = '00001820-0000-1000-8000-00805F9B34FB'; + public descriptorUuid: string = '00002902-0000-1000-8000-00805F9B34FB'; + public characteristicValue: string = ''; + public descriptorValue: string = ''; +} + +export class GattClientManager { + public device: string | undefined = undefined; + public gattClient: ble.GattClientDevice | undefined = undefined; + public connectState: ble.ProfileConnectionState = constant.ProfileConnectionState.STATE_DISCONNECTED; + public myServiceUuid: string = '00001810-0000-1000-8000-00805F9B34FB'; + public myCharacteristicUuid: string = '00001820-0000-1000-8000-00805F9B34FB'; + public myDescriptorUuid: string = '00002902-0000-1000-8000-00805F9B34FB'; // 2902一般用于notification或者indication + public myCharacteristicValue: string = '' + public myDescriptorValue: string = '' + public serviceResult: string = ''; + public found: boolean = false; + public toastReport: ToastReport = new ToastReport(); + + // 构造BLEDescriptor + private initDescriptor(des: string, value: ArrayBuffer): ble.BLEDescriptor { + let descriptor: ble.BLEDescriptor = { + serviceUuid: this.myServiceUuid, + characteristicUuid: this.myCharacteristicUuid, + descriptorUuid: des, + descriptorValue: value + }; + return descriptor; + } + + // 构造BLECharacteristic + private initCharacteristic(): ble.BLECharacteristic { + let descriptors: ble.BLEDescriptor[] = []; + let desLength = this.myDescriptorValue.length; + let descBuffer = new ArrayBuffer(desLength); + let descValue = new Uint8Array(descBuffer); + encoder.encodeIntoUint8Array(this.myCharacteristicValue, descValue); + descriptors[0] = this.initDescriptor(this.myDescriptorUuid, descBuffer); + let length = this.myCharacteristicValue.length; + let charBuffer = new ArrayBuffer(length); + let charValue = new Uint8Array(charBuffer); + encoder.encodeIntoUint8Array(this.myCharacteristicValue, charValue); + let characteristic: ble.BLECharacteristic = { + serviceUuid: this.myServiceUuid, + characteristicUuid: this.myCharacteristicUuid, + characteristicValue: charBuffer, + descriptors: descriptors + }; + return characteristic; + } + + private logCharacteristic(char: ble.BLECharacteristic) { + let message = 'logCharacteristic uuid:' + char.characteristicUuid + '\n'; + let value = new Uint8Array(char.characteristicValue); + message += 'logCharacteristic value: '; + for (let i = 0; i < char.characteristicValue.byteLength; i++) { + message += value[i] + ' '; + } + console.info(TAG, message); + // [StartExclude generic_attribute] + this.toastReport.showResult(message); + // [EndExclude generic_attribute] + } + + private logDescriptor(des: ble.BLEDescriptor) { + let message = 'logDescriptor uuid:' + des.descriptorUuid + '\n'; + let value = new Uint8Array(des.descriptorValue); + message += 'logDescriptor value: '; + for (let i = 0; i < des.descriptorValue.byteLength; i++) { + message += value[i] + ' '; + } + console.info(TAG, message); + // [StartExclude generic_attribute] + this.toastReport.showResult(message); + // [EndExclude generic_attribute] + } + + private checkService(services: Array): boolean { + for (let i = 0; i < services.length; i++) { + if (services[i].serviceUuid != this.myServiceUuid) { + continue; + } + for (let j = 0; j < services[i].characteristics.length; j++) { + if (services[i].characteristics[j].characteristicUuid != this.myCharacteristicUuid) { + continue; + } + for (let k = 0; k < services[i].characteristics[j].descriptors.length; k++) { + if (services[i].characteristics[j].descriptors[k].descriptorUuid == this.myDescriptorUuid) { + console.info(TAG, 'find expected service from server'); + return true; + } + } + } + } + console.error(TAG, 'no expected service from server'); + return false; + } + + public getResult(): string { + return this.serviceResult; + } + + public setGattData(data: GattData) { + this.myServiceUuid = data.serviceUuid; + this.myCharacteristicUuid = data.characteristicUuid; + this.myDescriptorUuid = data.descriptorUuid; + this.myCharacteristicValue = data.characteristicValue; + this.myDescriptorValue = data.descriptorValue; + } + + // 1. 订阅连接状态变化事件 + public onGattClientStateChange() { + if (!this.gattClient) { + console.error(TAG, 'no gattClient'); + return; + } + try { + this.gattClient.on('BLEConnectionStateChange', (stateInfo: ble.BLEConnectionChangeState) => { + let state = ''; + switch (stateInfo.state) { + case 0: + state = 'DISCONNECTED'; + break; + case 1: + state = 'CONNECTING'; + break; + case 2: + state = 'CONNECTED'; + break; + case 3: + state = 'DISCONNECTING'; + break; + default: + state = 'undefined'; + break; + } + console.info(TAG, 'onGattClientStateChange: device=' + stateInfo.deviceId + ', state=' + state); + if (stateInfo.deviceId == this.device) { + this.connectState = stateInfo.state; + } + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 2. client端主动连接时调用 + public startConnect(peerDevice: string | undefined) { // 对端设备一般通过ble scan获取到 + if (this.connectState != constant.ProfileConnectionState.STATE_DISCONNECTED || peerDevice == undefined) { + console.error(TAG, 'startConnect failed'); + return; + } + console.info(TAG, 'startConnect ' + peerDevice); + this.device = peerDevice; + // 2.1 使用device构造gattClient,后续的交互都需要使用该实例 + this.gattClient = ble.createGattClientDevice(peerDevice); + try { + this.onGattClientStateChange(); // 2.2 订阅连接状态 + this.gattClient.connect(); // 2.3 发起连接 + // [StartExclude generic_attribute] + this.toastReport.showResult('startConnect success'); + console.info(TAG, 'startConnect success'); + // [EndExclude generic_attribute] + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('startConnect fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 3. client端连接成功后,需要进行服务发现 + public async discoverServices() { + if (!this.gattClient) { + console.info(TAG, 'no gattClient'); + return; + } + console.info(TAG, 'discoverServices'); + try { + await this.gattClient.getServices().then((result: Array) => { + console.info(TAG, 'getServices success: ' + JSON.stringify(result)); + // [StartExclude generic_attribute] + this.serviceResult = JSON.stringify(result); + this.toastReport.showResult('getServices success: ' + JSON.stringify(result)); + // [EndExclude generic_attribute] + this.found = this.checkService(result); // 要确保server端的服务内容有业务所需要的服务 + }); + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('getServices fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 4. 在确保拿到了server端的服务结果后,he + public readCharacteristicValue() { + if (!this.gattClient || this.connectState != constant.ProfileConnectionState.STATE_CONNECTED) { + console.error(TAG, 'no gattClient or not connected'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no gattClient or not connected'); + // [EndExclude generic_attribute] + return; + } + if (!this.found) { // 要确保server端有对应的characteristic + console.error(TAG, 'no characteristic from server'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no characteristic from server'); + // [EndExclude generic_attribute] + return; + } + + let characteristic = this.initCharacteristic(); + console.info(TAG, 'readCharacteristicValue'); + try { + this.gattClient.readCharacteristicValue(characteristic).then((outData: ble.BLECharacteristic) => { + this.logCharacteristic(outData); + }) + // [StartExclude generic_attribute] + this.toastReport.showResult('readCharacteristicValue success'); + // [EndExclude generic_attribute] + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('readCharacteristicValue fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 5. 在确保拿到了server端的服务结果后,写入server端特定服务的特征值时调用 + public writeCharacteristicValue() { + if (!this.gattClient || this.connectState != constant.ProfileConnectionState.STATE_CONNECTED) { + console.error(TAG, 'no gattClient or not connected'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no gattClient or not connected'); + // [EndExclude generic_attribute] + return; + } + if (!this.found) { // 要确保server端有对应的characteristic + console.error(TAG, 'no characteristic from server'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no characteristic from server'); + // [EndExclude generic_attribute] + return; + } + + let characteristic = this.initCharacteristic(); + console.info(TAG, 'writeCharacteristicValue'); + try { + this.gattClient.writeCharacteristicValue(characteristic, ble.GattWriteType.WRITE, (err) => { + if (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + return; + } + // [StartExclude generic_attribute] + this.toastReport.showResult('writeCharacteristicValue success'); + // [EndExclude generic_attribute] + console.info(TAG, 'writeCharacteristicValue success'); + }); + } catch (err) { + // [StartExclude generic_attribute] + console.info(TAG, 'writeCharacteristicValue fail'); + this.toastReport.showResult('writeCharacteristicValue fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 6. 在确保拿到了server端的服务结果后,读取server端特定服务的描述符时调用 + public readDescriptorValue() { + if (!this.gattClient || this.connectState != constant.ProfileConnectionState.STATE_CONNECTED) { + console.error(TAG, 'no gattClient or not connected'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no gattClient or not connected'); + // [EndExclude generic_attribute] + return; + } + if (!this.found) { // 要确保server端有对应的descriptor + console.error(TAG, 'no descriptor from server'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no descriptor from server'); + // [EndExclude generic_attribute] + return; + } + + let descBuffer = new ArrayBuffer(0); + let descriptor = this.initDescriptor(this.myDescriptorUuid, descBuffer); + console.info(TAG, 'readDescriptorValue'); + try { + this.gattClient.readDescriptorValue(descriptor).then((outData: ble.BLEDescriptor) => { + this.logDescriptor(outData); + }); + // [StartExclude generic_attribute] + this.toastReport.showResult('readDescriptorValue success'); + // [EndExclude generic_attribute] + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('readDescriptorValue fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 7. 在确保拿到了server端的服务结果后,写入server端特定服务的描述符时调用 + public writeDescriptorValue() { + if (!this.gattClient || this.connectState != constant.ProfileConnectionState.STATE_CONNECTED) { + console.error(TAG, 'no gattClient or not connected'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no gattClient or not connected'); + // [EndExclude generic_attribute] + return; + } + if (!this.found) { // 要确保server端有对应的descriptor + console.error(TAG, 'no descriptor from server'); + // [StartExclude generic_attribute] + this.toastReport.showResult('no descriptor from server'); + // [EndExclude generic_attribute] + return; + } + + let length = this.myDescriptorValue.length; + let descBuffer = new ArrayBuffer(length); + let descValue = new Uint8Array(descBuffer); + encoder.encodeIntoUint8Array(this.myDescriptorValue, descValue); + let descriptor = this.initDescriptor(this.myDescriptorUuid, descBuffer); + console.info(TAG, 'writeDescriptorValue'); + try { + this.gattClient.writeDescriptorValue(descriptor, (err) => { + if (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + return; + } + console.info(TAG, 'writeDescriptorValue success'); + // [StartExclude generic_attribute] + this.toastReport.showResult('writeDescriptorValue success'); + // [EndExclude generic_attribute] + }); + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('writeDescriptorValue fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 8.client端主动断开时调用 + public stopConnect() { + if (!this.gattClient || this.connectState != constant.ProfileConnectionState.STATE_CONNECTED) { + console.error(TAG, 'no gattClient or not connected'); + return; + } + + console.info(TAG, 'stopConnect ' + this.device); + try { + this.gattClient.disconnect(); // 8.1 断开连接 + this.gattClient.off('BLEConnectionStateChange', (stateInfo: ble.BLEConnectionChangeState) => { + }); + this.gattClient.close() // 8.2 如果不再使用此gattClient,则需要close + // [StartExclude generic_attribute] + this.toastReport.showResult('stopConnect success'); + // [EndExclude generic_attribute] + } catch (err) { + // [StartExclude generic_attribute] + this.toastReport.showResult('stopConnect fail'); + // [EndExclude generic_attribute] + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } +} + +let gattClientManager = new GattClientManager(); + +export default gattClientManager as GattClientManager; +// [End generic_attribute] \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/bluetoothService/GattServerManager.ets b/bluetoothSample/entry/src/main/ets/bluetoothService/GattServerManager.ets new file mode 100644 index 00000000..aa38c2fb --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/bluetoothService/GattServerManager.ets @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +// [Start gatt_server_manage] +import { ble } from '@kit.ConnectivityKit'; +import { constant } from '@kit.ConnectivityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { ToastReport } from '../common/ToastReport' + +const TAG: string = 'GattServerManager'; + +export class GattServerManager { + public gattServer: ble.GattServer = ble.createGattServer(); + public connectState: ble.ProfileConnectionState = constant.ProfileConnectionState.STATE_DISCONNECTED; + public myServiceUuid: string = '00001810-0000-1000-8000-00805F9B34FB'; + public myCharacteristicUuid: string = '00001820-0000-1000-8000-00805F9B34FB'; + public myFirstDescriptorUuid: string = '00002902-0000-1000-8000-00805F9B34FB'; // 2902一般用于notification或者indication + public mySecondDescriptorUuid: string = '00002903-0000-1000-8000-00805F9B34FB'; + public toastReport: ToastReport = new ToastReport(); + + // 构造BLEDescriptor + private initDescriptor(des: string, value: ArrayBuffer): ble.BLEDescriptor { + let descriptor: ble.BLEDescriptor = { + serviceUuid: this.myServiceUuid, + characteristicUuid: this.myCharacteristicUuid, + descriptorUuid: des, + descriptorValue: value + }; + return descriptor; + } + + // 构造BLECharacteristic + private initCharacteristic(): ble.BLECharacteristic { + let descriptors: ble.BLEDescriptor[] = []; + let descBuffer = new ArrayBuffer(2); + let descValue = new Uint8Array(descBuffer); + descValue[0] = 31; + descValue[1] = 32; + descriptors[0] = this.initDescriptor(this.myFirstDescriptorUuid, new ArrayBuffer(2)); + descriptors[1] = this.initDescriptor(this.mySecondDescriptorUuid, descBuffer); + let charBuffer = new ArrayBuffer(2); + let charValue = new Uint8Array(charBuffer); + charValue[0] = 21; + charValue[1] = 22; + let characteristic: ble.BLECharacteristic = { + serviceUuid: this.myServiceUuid, + characteristicUuid: this.myCharacteristicUuid, + characteristicValue: charBuffer, + descriptors: descriptors + }; + return characteristic; + } + + // 1. 订阅连接状态变化事件 + public onGattServerStateChange() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + try { + this.gattServer.on('connectionStateChange', (stateInfo: ble.BLEConnectionChangeState) => { + let state = ''; + switch (stateInfo.state) { + case 0: + state = 'DISCONNECTED'; + break; + case 1: + state = 'CONNECTING'; + break; + case 2: + state = 'CONNECTED'; + break; + case 3: + state = 'DISCONNECTING'; + break; + default: + state = 'undefined'; + break; + } + console.info(TAG, 'onGattServerStateChange: device=' + stateInfo.deviceId + ', state=' + state); + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 2. server端注册服务时调用 + public registerServer() { + let characteristics: ble.BLECharacteristic[] = []; + let characteristic = this.initCharacteristic(); + characteristics.push(characteristic); + let gattService: ble.GattService = { + serviceUuid: this.myServiceUuid, + isPrimary: true, + characteristics: characteristics + }; + + console.info(TAG, 'registerServer ' + this.myServiceUuid); + try { + // this.gattServer = ble.createGattServer(); 初始化时已经构造,去除报错// 2.1 构造gattServer,后续的交互都需要使用该实例 + this.onGattServerStateChange(); // 2.2 订阅连接状态 + this.gattServer.addService(gattService); + this.toastReport.showResult('registerServer success'); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + this.toastReport.showResult('registerServer failed'); + } + } + + // 3. 订阅来自gattClient的读取特征值请求时调用 + public onCharacteristicRead() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + + console.info(TAG, 'onCharacteristicRead'); + try { + this.gattServer.on('characteristicRead', (charReq: ble.CharacteristicReadRequest) => { + let deviceId: string = charReq.deviceId; + let transId: number = charReq.transId; + let offset: number = charReq.offset; + console.info(TAG, 'receive characteristicRead'); + let rspBuffer = new ArrayBuffer(2); + let rspValue = new Uint8Array(rspBuffer); + rspValue[0] = 21; + rspValue[1] = 22; + let serverResponse: ble.ServerResponse = { + deviceId: deviceId, + transId: transId, + status: 0, // 0表示成功 + offset: offset, + value: rspBuffer + }; + + try { + this.gattServer.sendResponse(serverResponse); + } catch (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 4. 订阅来自gattClient的写入特征值请求时调用 + public onCharacteristicWrite() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + + console.info(TAG, 'onCharacteristicWrite'); + try { + this.gattServer.on('characteristicWrite', (charReq: ble.CharacteristicWriteRequest) => { + let deviceId: string = charReq.deviceId; + let transId: number = charReq.transId; + let offset: number = charReq.offset; + console.info(TAG, 'receive characteristicWrite: needRsp=' + charReq.needRsp); + if (!charReq.needRsp) { + return; + } + let rspBuffer = new ArrayBuffer(0); + let serverResponse: ble.ServerResponse = { + deviceId: deviceId, + transId: transId, + status: 0, // 0表示成功 + offset: offset, + value: rspBuffer + }; + + try { + this.gattServer.sendResponse(serverResponse); + } catch (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 5. 订阅来自gattClient的读取描述符请求时调用 + public onDescriptorRead() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + + console.info(TAG, 'onDescriptorRead'); + try { + this.gattServer.on('descriptorRead', (desReq: ble.DescriptorReadRequest) => { + let deviceId: string = desReq.deviceId; + let transId: number = desReq.transId; + let offset: number = desReq.offset; + console.info(TAG, 'receive descriptorRead'); + let rspBuffer = new ArrayBuffer(2); + let rspValue = new Uint8Array(rspBuffer); + rspValue[0] = 31; + rspValue[1] = 32; + let serverResponse: ble.ServerResponse = { + deviceId: deviceId, + transId: transId, + status: 0, // 0表示成功 + offset: offset, + value: rspBuffer + }; + + try { + this.gattServer.sendResponse(serverResponse); + } catch (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 6. 订阅来自gattClient的写入描述符请求时调用 + public onDescriptorWrite() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + + console.info(TAG, 'onDescriptorWrite'); + try { + this.gattServer.on('descriptorWrite', (desReq: ble.DescriptorWriteRequest) => { + let deviceId: string = desReq.deviceId; + let transId: number = desReq.transId; + let offset: number = desReq.offset; + console.info(TAG, 'receive descriptorWrite: needRsp=' + desReq.needRsp); + if (!desReq.needRsp) { + return; + } + let rspBuffer = new ArrayBuffer(0); + let serverResponse: ble.ServerResponse = { + deviceId: deviceId, + transId: transId, + status: 0, // 0表示成功 + offset: offset, + value: rspBuffer + }; + + try { + this.gattServer.sendResponse(serverResponse); + } catch (err) { + console.error(TAG, + 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + }); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } + + // 7. server端删除服务,不再使用时调用 + public unRegisterServer() { + if (!this.gattServer) { + console.error(TAG, 'no gattServer'); + return; + } + + console.info(TAG, 'unRegisterServer ' + this.myServiceUuid); + try { + this.gattServer.removeService(this.myServiceUuid); // 7.1 删除服务 + this.gattServer.off('connectionStateChange', (stateInfo: ble.BLEConnectionChangeState) => { // 7.2 取消订阅连接状态 + }); + this.gattServer.close() // 7.3 如果不再使用此gattServer,则需要close + this.toastReport.showResult('unRegisterServer'); + } catch (err) { + console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); + } + } +} + +let gattServerManager = new GattServerManager(); + +export default gattServerManager as GattServerManager; +// [End gatt_server_manage] \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/common/AdvertisingDialog.ets b/bluetoothSample/entry/src/main/ets/common/AdvertisingDialog.ets new file mode 100644 index 00000000..5fe1d7d4 --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/common/AdvertisingDialog.ets @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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 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. + */ + +import { util } from '@kit.ArkTS'; + +@CustomDialog +@Component +export struct AdvertisingDialog { + @Link textValueOfAdvManufactureId: string; + @Link inputValueOfAdvManufactureId: string; + @Link textValueOfAdvManufactureValueBuffer: string; + @Link inputValueOfAdvManufactureValueBuffer: Uint8Array; + @Link textValueOfAdvServiceUuids: string; + @Link inputValueOfAdvServiceUuids: string; + @Link textValueOfAdvServiceBuffer: string; + @Link inputValueOfAdvServiceBuffer: Uint8Array; + @Link textValueOfAdvIncludeDeviceName: string; + @Link inputValueOfAdvIncludeDeviceName: boolean; + decoder = new util.TextDecoder(); + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('set advertising parameters').fontSize(20).margin({ top: 10, bottom: 10 }); + Row() { + Text('ManufactureValueBuffer') + .margin(5) + .width('30%') + TextInput({ text: this.textValueOfAdvManufactureValueBuffer }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfAdvManufactureValueBuffer = value; + }) + .margin(5) + } + + Row() { + Text('manufactureId') + .width('30%') + .margin(5) + TextInput({ text: this.textValueOfAdvManufactureId }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfAdvManufactureId = value; + }) + .margin(5) + } + + Row() { + Text('serviceBuffer') + .width('30%') + .margin(5) + TextInput({ text: this.textValueOfAdvServiceBuffer }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfAdvServiceBuffer = value; + }) + .margin(5) + } + + Row() { + Text('serviceUuids') + .width('30%') + .margin(5) + TextInput({ text: this.textValueOfAdvServiceUuids }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfAdvServiceUuids = value; + }) + .margin(5) + } + + Row() { + Text('enableIncludeDeviceName') + .width('30%') + .margin(5) + TextInput({ text: this.textValueOfAdvIncludeDeviceName }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfAdvIncludeDeviceName = value; + }) + .margin(5) + } + + + Flex({ justifyContent: FlexAlign.SpaceAround }) { + Button('cancel') + .onClick(() => { + if (this.controller != undefined) { + this.controller.close(); + this.cancel(); + } + }).backgroundColor(0xffffff).fontColor(Color.Black) + + Button('clean up') + .onClick(() => { + this.textValueOfAdvManufactureValueBuffer = ''; + this.textValueOfAdvManufactureId = ''; + this.textValueOfAdvServiceUuids = ''; + this.textValueOfAdvServiceBuffer = ''; + this.textValueOfAdvIncludeDeviceName = ''; + this.inputValueOfAdvManufactureValueBuffer = new Uint8Array(0); + this.inputValueOfAdvManufactureId = ''; + this.inputValueOfAdvServiceUuids = '00001888-0000-1000-8000-00805f9b34fb'; + this.inputValueOfAdvServiceBuffer = new Uint8Array(0); + this.inputValueOfAdvIncludeDeviceName = false; + }).backgroundColor(0xffffff).fontColor(Color.Red) + + Button('confirm') + .onClick(() => { + if (this.controller != undefined) { + let manufactureValueBuffer = new Uint8Array(this.textValueOfAdvManufactureValueBuffer.length); + for (let i = 0; i < this.textValueOfAdvManufactureValueBuffer.length; i++) { + manufactureValueBuffer[i] = parseInt(this.textValueOfAdvManufactureValueBuffer[i], 10); + } + let serviceBuffer = new Uint8Array(this.textValueOfAdvServiceBuffer.length); + for (let i = 0; i < this.textValueOfAdvManufactureValueBuffer.length; i++) { + manufactureValueBuffer[i] = parseInt(this.textValueOfAdvManufactureValueBuffer[i], 10); + } + this.inputValueOfAdvServiceBuffer = serviceBuffer; + this.inputValueOfAdvManufactureValueBuffer = manufactureValueBuffer; + this.inputValueOfAdvManufactureId = this.textValueOfAdvManufactureId; + if (this.textValueOfAdvServiceUuids) { + this.inputValueOfAdvServiceUuids = this.textValueOfAdvServiceUuids; + } + if (this.textValueOfAdvIncludeDeviceName) { + this.inputValueOfAdvIncludeDeviceName = true; + } else { + this.inputValueOfAdvIncludeDeviceName = false; + } + this.controller.close(); + this.confirm(); + } + }).backgroundColor(0xffffff).fontColor(Color.Red) + }.margin({ bottom: 10 }) + }.borderRadius(10) + } +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/common/ScanData.ets b/bluetoothSample/entry/src/main/ets/common/ScanData.ets new file mode 100644 index 00000000..4c5d3b83 --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/common/ScanData.ets @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +export class ScanData { + private deviceId: string = ''; + private deviceName: string = ''; + private rssi: number = 0; + private connectable: boolean = false; + private data: Uint8Array = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF]); + + constructor(deviceId: string = '', deviceName: string = 'null', rssi: number = 0, connectable: boolean = false, + data: Uint8Array = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF])) { + this.deviceId = deviceId; + this.deviceName = deviceName; + this.rssi = rssi; + this.connectable = connectable; + this.data = data; + } + + public setDeviceId(deviceId: string) { + this.deviceId = deviceId; + } + + public setData(data: Uint8Array) { + this.data = data; + } + + public getDeviceId(): string { + return this.deviceId; + } + + public getData(): Uint8Array { + return this.data; + } + + public setDeviceName(deviceName: string) { + this.deviceName = deviceName; + } + + public getDeviceName(): string { + return this.deviceName; + } + + public setRssi(rssi: number) { + this.rssi = rssi; + } + + public getRssi(): number { + return this.rssi; + } + + public setConnectable(connectable: boolean) { + this.connectable = connectable; + } + + public getConnectable(): boolean { + return this.connectable; + } +} + +let scanData = new ScanData(); + +export default scanData as ScanData; + diff --git a/bluetoothSample/entry/src/main/ets/common/ScanDialog.ets b/bluetoothSample/entry/src/main/ets/common/ScanDialog.ets new file mode 100644 index 00000000..a5d99a4f --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/common/ScanDialog.ets @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +@CustomDialog +@Component +export struct ScanDialog { + @Link textValueOfInterval: string; + @Link inputValueOfInterval: string; + @Link textValueOfManufactureId: string; + @Link inputValueOfManufactureId: string; + @Link textValueOfDeviceName: string; + @Link inputValueOfDeviceName: string; + @Link textValueOfDeviceId: string; + @Link inputValueOfDeviceId: string; + controller?: CustomDialogController + cancel: () => void = () => { + } + confirm: () => void = () => { + } + + build() { + Column() { + Text('set scan filtering parameters').fontSize(20).margin({ top: 10, bottom: 10 }); + Row() { + Text('interval') + .width('30%') + .margin(5) + TextInput({ placeholder: 'default is 0', text: this.textValueOfInterval }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfInterval = value; + }) + + } + + Row() { + Text('manufactureId') + .width('30%') + .margin(5) + TextInput({ placeholder: 'default is 4567', text: this.textValueOfManufactureId }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfManufactureId = value; + }) + } + + Row() { + Text('deviceName') + .width('30%') + .margin(5) + TextInput({ placeholder: 'default is \'\'', text: this.textValueOfDeviceName }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfDeviceName = value; + }) + } + + Row() { + Text('deviceId') + .width('30%') + .margin(5) + TextInput({ placeholder: 'default is \'\'', text: this.textValueOfDeviceId }) + .height(40) + .width('65%') + .onChange((value: string) => { + this.textValueOfDeviceId = value; + }) + } + + Flex({ justifyContent: FlexAlign.SpaceAround }) { + Button('cancel') + .onClick(() => { + if (this.controller != undefined) { + this.controller.close(); + this.cancel(); + } + }).backgroundColor(0xffffff).fontColor(Color.Black) + + Button('clean up') + .onClick(() => { + this.textValueOfInterval = ''; + this.inputValueOfInterval = '0'; + this.textValueOfManufactureId = ''; + this.inputValueOfManufactureId = '4567'; + this.textValueOfDeviceName = ''; + this.inputValueOfDeviceName = ''; + this.textValueOfDeviceId = ''; + this.inputValueOfDeviceId = ''; + }).backgroundColor(0xffffff).fontColor(Color.Red) + + Button('confirm') + .onClick(() => { + if (this.controller != undefined) { + this.inputValueOfInterval = this.textValueOfInterval; + this.inputValueOfManufactureId = this.textValueOfManufactureId; + this.inputValueOfDeviceName = this.textValueOfDeviceName; + this.inputValueOfDeviceId = this.textValueOfDeviceId; + this.controller.close(); + this.confirm(); + } + }).backgroundColor(0xffffff).fontColor(Color.Red) + }.margin({ bottom: 10 }) + }.borderRadius(10) + } +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/common/ToastReport.ets b/bluetoothSample/entry/src/main/ets/common/ToastReport.ets new file mode 100644 index 00000000..80c12c4a --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/common/ToastReport.ets @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ +import { promptAction } from '@kit.ArkUI' + +export class ToastReport { + public showResult(message: string) { + promptAction.showToast({ + message: message, + duration: 2000, + showMode: promptAction.ToastShowMode.DEFAULT, + bottom: 80 + }) + } +} + +let toastReport = new ToastReport(); + +export default toastReport as ToastReport; \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/entryability/EntryAbility.ets b/bluetoothSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..6c3ac9ef --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import hilog from '@ohos.hilog'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import abilityAccessCtrl, { PermissionRequestResult, Permissions } from '@ohos.abilityAccessCtrl'; +import { BusinessError } from '@ohos.base'; + +const permissions: Permissions[] = ['ohos.permission.ACCESS_BLUETOOTH']; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + let context: Context = this.context; + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 + + atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => { + let grantStatus: number[] = data.authResults; + let length: number = grantStatus.length; + for (let i = 0; i < length; i++) { + if (grantStatus[i] === 0) { + // 用户授权,可以继续访问目标操作 + } else { + // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 + return; + } + } + // 授权成功 + }).catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) + + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/bluetoothSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/bluetoothSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/ets/pages/Index.ets b/bluetoothSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..c4d89de1 --- /dev/null +++ b/bluetoothSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,532 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { BleAdvertisingManager } from '../bluetoothService/BluetoothAdvertising'; +import { BleScanManager } from '../bluetoothService/BluetoothScan'; +import { BluetoothSwitch } from '../bluetoothService/BluetoothSwitch' +import { GattClientManager, GattData } from '../bluetoothService/GattClientManager'; +import { GattServerManager } from '../bluetoothService/GattServerManager'; +import { ScanData } from '../common/ScanData'; +import { ScanDialog } from '../common/ScanDialog'; +import { AdvertisingDialog } from '../common/AdvertisingDialog'; +import access from '@ohos.bluetooth.access'; +import { ToastReport } from '../common/ToastReport'; +import { ble } from '@kit.ConnectivityKit'; +import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; + + +@Entry +@Component +struct bluetoothSample { + private bluetoothSwitch: BluetoothSwitch = new BluetoothSwitch(); + private bleScanManager: BleScanManager = new BleScanManager(); + private bleAdvertisingManager: BleAdvertisingManager = new BleAdvertisingManager(); + private gattServerManager: GattServerManager = new GattServerManager(); + private gattClientManager: GattClientManager = new GattClientManager(); + @State scanData: ScanData[] = []; + @State textValueOfDeviceName: string | undefined = ''; + @State inputValueOfDeviceName: string | undefined = ''; + @State textValueOfDeviceId: string | undefined = ''; + @State inputValueOfDeviceId: string | undefined = ''; + @State scanFlag: Boolean = true; + @State textValueOfInterval: string = ''; + @State inputValueOfInterval: string = ''; + @State textValueOfManufactureId: string = ''; + @State textValueOfAdvManufactureId: string = ''; + @State inputValueOfManufactureId: string = ''; + @State inputValueOfAdvManufactureId: string = ''; + @State textValueOfManufactureValueBuffer: string = ''; + @State textValueOfAdvManufactureValueBuffer: string = ''; + @State inputValueOfAdvManufactureValueBuffer: Uint8Array = new Uint8Array; + @State inputValueOfAdvServiceBuffer: Uint8Array = new Uint8Array; + @State inputValueOfAdvServiceUuids: string = ''; + @State inputValueOfAdvIncludeDeviceName: boolean = false; + @State textValueOfAdvIncludeDeviceName: string = ''; + @State textValueOfAdvServiceBuffer: string = ''; + @State textValueOfAdvServiceUuids: string = ''; + @State currentIndex: number = 0; + @State gattState: number = 0; + @State serviceResult: string = ''; + @State refresh: boolean = false; + @State marText: string = ''; + gattData: GattData = new GattData(); + connectDeviceId: string = ''; + scroller: Scroller = new Scroller(); + @StorageLink('advertiserState') @Watch('onAdvertiserStateChange') advertiserState: ble.AdvertisingState = + ble.AdvertisingState.STOPPED; + + onAdvertiserStateChange() { + console.info(`onAdvertiserStateChange: advertiserState = ${JSON.stringify(this.advertiserState)}`) + } + + getAdvertiserStateDescription(): ResourceStr { + let description = 'Stopped' + switch (this.advertiserState) { + case ble.AdvertisingState.STARTED: + description = 'Started'; + break + case ble.AdvertisingState.ENABLED: + description = 'Enable'; + break + case ble.AdvertisingState.DISABLED: + description = 'Disabled'; + break + case ble.AdvertisingState.STOPPED: + description = 'Stopped'; + break + } + return description + } + + @Builder + tabBuilder(title: ResourceStr, targetIndex: number) { + Column() { + Text(title) + .fontColor(this.currentIndex === targetIndex ? '#F111C1' : '#6B6B6B') + } + } + + @State state: number = access.getState(); + + public FlushBlueToothState(): access.BluetoothState { + return this.state = access.getState(); + } + + advDialogController: CustomDialogController | null = new CustomDialogController({ + builder: AdvertisingDialog({ + cancel: () => { + this.onCancel() + }, + confirm: () => { + this.onAccept() + }, + textValueOfAdvManufactureId: $textValueOfAdvManufactureId, + inputValueOfAdvManufactureId: $inputValueOfAdvManufactureId, + textValueOfAdvManufactureValueBuffer: $textValueOfAdvManufactureValueBuffer, + inputValueOfAdvManufactureValueBuffer: $inputValueOfAdvManufactureValueBuffer, + textValueOfAdvServiceUuids: $textValueOfAdvServiceUuids, + inputValueOfAdvServiceUuids: $inputValueOfAdvServiceUuids, + textValueOfAdvServiceBuffer: $textValueOfAdvServiceBuffer, + inputValueOfAdvServiceBuffer: $inputValueOfAdvServiceBuffer, + textValueOfAdvIncludeDeviceName: $textValueOfAdvIncludeDeviceName, + inputValueOfAdvIncludeDeviceName: $inputValueOfAdvIncludeDeviceName + }), + cancel: this.exitApp, + autoCancel: true, + onWillDismiss: (dismissDialogAction: DismissDialogAction) => { + console.info('reason=' + JSON.stringify(dismissDialogAction.reason)) + console.log('dialog onWillDismiss') + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + alignment: DialogAlignment.Top, + offset: { dx: 0, dy: -20 }, + gridCount: 4, + customStyle: false, + cornerRadius: 10, + }) + scanDialogController: CustomDialogController | null = new CustomDialogController({ + builder: ScanDialog({ + cancel: () => { + this.onCancel() + }, + confirm: () => { + this.onAccept() + }, + textValueOfInterval: $textValueOfInterval, + inputValueOfInterval: $inputValueOfInterval, + textValueOfManufactureId: $textValueOfManufactureId, + inputValueOfManufactureId: $inputValueOfManufactureId, + textValueOfDeviceName: $textValueOfDeviceName, + inputValueOfDeviceName: $inputValueOfDeviceName, + textValueOfDeviceId: $textValueOfDeviceId, + inputValueOfDeviceId: $inputValueOfDeviceId, + }), + cancel: this.exitApp, + autoCancel: true, + onWillDismiss: (dismissDialogAction: DismissDialogAction) => { + console.info('reason=' + JSON.stringify(dismissDialogAction.reason)) + console.log('dialog onWillDismiss') + if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { + dismissDialogAction.dismiss() + } + if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { + dismissDialogAction.dismiss() + } + }, + alignment: DialogAlignment.Top, + offset: { dx: 0, dy: -20 }, + gridCount: 4, + customStyle: false, + cornerRadius: 10, + }) + + aboutToDisappear() { + this.scanDialogController = null + } + + onCancel() { + } + + onAccept() { + } + + exitApp() { + } + + build() { + Column() { + Row() { + Text('Bluetooth') + .width('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + } + + Column() { + Text('BlueTooth State: ' + (this.state ? 'Connected' : 'Disconnected')) + .margin(10) + Text('BleState: ' + this.getAdvertiserStateDescription()) + .fontColor(Color.Red) + .margin(10) + if (this.marText) { + Marquee({ src: this.marText, start: true }) + .margin(10) + } + } + + Tabs() { + TabContent() { + Column({ space: 5 }) { + Column({ space: 5 }) { + Button($r('app.string.Set_filtering_parameters')) + .width('80%') + .onClick(() => { + if (this.scanDialogController != null) { + this.scanDialogController.open(); + } + }) + Button($r('app.string.StartScan')) + .width('80%') + .onClick(() => { + this.bleScanManager.setScanParameter(this.inputValueOfInterval, this.inputValueOfManufactureId, + this.inputValueOfDeviceName, this.inputValueOfDeviceId); + this.bleScanManager.startScan(); + }) + Button($r('app.string.StopScan')) + .width('80%') + .onClick(() => { + this.bleScanManager.stopScan(); + this.scanFlag = false; + }) + Button($r('app.string.Refresh')) + .width('80%') + .backgroundColor(Color.Red) + .onClick(() => { + this.scanData = this.bleScanManager.getScanData(); + }) + } + .height('25%') + .margin({ top: 5 }) + + Scroll(this.scroller) { + Column() { + ForEach(this.scanData, (item: ScanData) => { + Row() { + Text('deviceId: ' + item.getDeviceId() + '\n' + 'deviceName: ' + item.getDeviceName() + '\n' + + 'rssi: ' + item.getRssi() + '\n' + 'connectable: ' + item.getConnectable()) + .width('70%') + .height(100) + .backgroundColor(0xFFFFFF) + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.JUSTIFY) + .margin(10) + + Button('connect') + .width('20%') + .margin(10) + .onClick(() => { + this.connectDeviceId = item.getDeviceId(); + this.gattClientManager.startConnect(this.connectDeviceId); + this.marText = 'deviceId: ' + item.getDeviceId() + ' deviceName: ' + item.getDeviceName() + + ' rssi: ' + item.getRssi() + ' connectable: ' + item.getConnectable(); + }) + } + .backgroundColor(0xFFFFFF) + .borderRadius(15) + .margin(10) + }); + + }.width('100%') + } + .margin({ top: 5 }) + .height('55%') + .scrollable(ScrollDirection.Vertical) + .scrollBar(BarState.On) + .scrollBarColor(Color.White) + .scrollBarWidth(10) + .friction(0.6) + .edgeEffect(EdgeEffect.None) + .onWillScroll((xOffset: number, yOffset: number) => { + console.info(xOffset + ' ' + yOffset); + }) + } + .height('100%') + } + .backgroundColor(Color.Gray) + .tabBar(this.tabBuilder('SCANNER', 0)) + + TabContent() { + Column({ space: 5 }) { + Scroll() { + Text(this.serviceResult) + .width('100%') + .height('100%') + .margin(30) + } + .width('80%') + .height('20%') + + Row() { + Text('serviceUuid: ') + + TextInput().onChange((value: string) => { + this.gattData.serviceUuid = value; + }).height('40vp').width('70%') + }.width('80%') + + Row() { + Text('characteristicUuid: ') + + TextInput().onChange((value: string) => { + this.gattData.characteristicUuid = value; + }).height('40vp').width('70%') + }.width('80%') + + Row() { + Text('descriptorUuid: ') + + TextInput().onChange((value: string) => { + this.gattData.descriptorUuid = value; + }).height('40vp').width('70%') + }.width('80%') + + Row() { + Text('characteristicValue: ') + + TextInput().onChange((value: string) => { + this.gattData.characteristicValue = value; + }).height('40vp').width('70%') + }.width('80%') + + Row() { + Text('descriptorValue: ') + + TextInput().onChange((value: string) => { + this.gattData.descriptorValue = value; + }).height('40vp').width('70%') + }.width('80%') + + Button($r('app.string.DiscoverService')) + .width('80%') + .onClick(() => { + this.gattClientManager.discoverServices().then(() => { + this.serviceResult = this.gattClientManager.getResult(); + }) + }) + + Row({ space: 30 }) { + Button($r('app.string.readChar')) + .width('30%') + .onClick(() => { + this.gattClientManager.readCharacteristicValue(); + }) + + Button($r('app.string.writeChar')) + .width('30%') + .onClick(() => { + this.gattClientManager.setGattData(this.gattData); + this.gattClientManager.writeCharacteristicValue(); + }) + } + + Row({ space: 30 }) { + + Button($r('app.string.readDes')) + .width('30%') + .onClick(() => { + this.gattClientManager.readDescriptorValue(); + }) + + Button($r('app.string.writeDes')) + .width('30%') + .onClick(() => { + this.gattClientManager.setGattData(this.gattData); + this.gattClientManager.writeDescriptorValue(); + }) + } + + Button($r('app.string.disconnect')) + .width('80%') + .backgroundColor(Color.Red) + .onClick(() => { + this.gattClientManager.stopConnect(); + this.marText = ''; + this.serviceResult = ''; + }) + } + .width('100%') + .height('100%') + } + .backgroundColor(Color.Pink) + .tabBar(this.tabBuilder('GATT', 1)) + .width('100%') + .height('100%') + + TabContent() { + Row() { + Column({ space: 12 }) { + Button($r('app.string.registerServer')) + .width('80%') + .onClick(() => { + this.gattServerManager.registerServer(); + }) + + Button($r('app.string.unRegisterServer')) + .width('80%') + .onClick(() => { + this.gattServerManager.unRegisterServer(); + }) + + Button($r('app.string.RegisterReadChar')) + .width('80%') + .onClick(() => { + this.gattServerManager.onCharacteristicRead(); + }) + + Button($r('app.string.RegisterWriteChar')) + .width('80%') + .onClick(() => { + this.gattServerManager.onCharacteristicWrite(); + }) + + Button($r('app.string.RegisterReadDes')) + .width('80%') + .onClick(() => { + this.gattServerManager.onDescriptorRead(); + }) + + Button($r('app.string.RegisterWriteDes')) + .width('80%') + .onClick(() => { + this.gattServerManager.onDescriptorWrite(); + }) + } + .width('50%') + + Column({ space: 12 }) { + Button($r('app.string.setAdv')) + .width('80%') + .onClick(() => { + this.advDialogController?.open(); + }) + + Button($r('app.string.startAdv')) + .width('80%') + .onClick(() => { + this.bleAdvertisingManager.setAdvertisingParameter(Number(this.inputValueOfAdvManufactureId), + this.inputValueOfAdvManufactureValueBuffer, this.inputValueOfAdvServiceUuids, + this.inputValueOfAdvServiceBuffer, this.inputValueOfAdvIncludeDeviceName); + this.bleAdvertisingManager.startAdvertising(); + }) + + Button($r('app.string.stopAdv')) + .width('80%') + .onClick(() => { + console.info('disable Advertising'); + this.bleAdvertisingManager.disableAdvertising(); + console.info('Advertising over'); + }) + + Button($r('app.string.continueAdv')) + .width('80%') + .onClick(() => { + this.bleAdvertisingManager.enableAdvertising(0); + }) + + Button($r('app.string.closeAdv')) + .width('80%') + .onClick(() => { + this.bleAdvertisingManager.stopAdvertising(); + }) + } + .width('50%') + } + } + + .backgroundColor(Color.Orange) + .tabBar(this.tabBuilder('ADVERTISER', 2)) + + TabContent() { + Column({ space: 12 }) { + Button($r('app.string.openBlueTooth')) + .width('80%') + .onClick(() => { + this.state = access.getState(); + if (this.state == 0) { + this.bluetoothSwitch.openBluetooth(); + } + setTimeout(() => { + this.state = access.getState(); + }, 2000) + setTimeout(() => { + this.state = access.getState(); + }, 5000) + }) + + Button($r('app.string.closeBlueTooth')) + .width('80%') + .onClick(() => { + this.state = access.getState(); + if (this.state == 2) { + try { + this.bluetoothSwitch.closeBluetooth(); + } catch (err) { + console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + + (err as BusinessError).message); + } + } + setTimeout(() => { + this.state = access.getState(); + }, 2000) + }) + } + } + .backgroundColor(Color.Yellow) + .tabBar(this.tabBuilder('SWITCH', 3)) + } + .onChange((index: number) => { + this.currentIndex = index + }) + .backgroundColor('#F1F3F5') + } + } +} + diff --git a/bluetoothSample/entry/src/main/module.json5 b/bluetoothSample/entry/src/main/module.json5 new file mode 100644 index 00000000..34afbf7b --- /dev/null +++ b/bluetoothSample/entry/src/main/module.json5 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": 'ohos.permission.USE_BLUETOOTH', + "reason": "$string:USE_BLUETOOTH" + }, + { + "name": 'ohos.permission.DISCOVER_BLUETOOTH', + "reason": "$string:DISCOVER_BLUETOOTH" + }, + { + "name": "ohos.permission.ACCESS_BLUETOOTH", + "reason": "$string:ACCESS_BLUETOOTH", + "usedScene": { + "when": "always" + } + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/resources/base/element/color.json b/bluetoothSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/bluetoothSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/resources/base/element/string.json b/bluetoothSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..6de3499e --- /dev/null +++ b/bluetoothSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,119 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "bluetoothSample" + }, + { + "name": "ACCESS_BLUETOOTH", + "value": "允许应用接入蓝牙并使用蓝牙能力,例如配对、连接外围设备等。" + }, + { + "name": "DISCOVER_BLUETOOTH", + "value": "允许应用配置本地蓝牙,查找远端设备且与之配对连接。" + },{ + "name": "USE_BLUETOOTH", + "value": "允许应用查看蓝牙的配置。" + }, + { + "name": "RegisterReadChar", + "value": "订阅读特征值" + }, + { + "name": "RegisterWriteChar", + "value": "订阅写特征值" + }, + { + "name": "RegisterReadDes", + "value": "订阅读描述符" + }, + { + "name": "RegisterWriteDes", + "value": "订阅写描述符" + }, + { + "name": "registerServer", + "value": "注册服务" + }, + { + "name": "unRegisterServer", + "value": "注销服务" + }, + { + "name": "Set_filtering_parameters", + "value": "设置过滤参数" + }, + { + "name": "StartScan", + "value": "开始扫描" + }, + { + "name": "StopScan", + "value": "停止扫描" + }, + { + "name": "Refresh", + "value": "刷新" + }, + { + "name": "DiscoverService", + "value": "发现服务" + }, + { + "name": "readChar", + "value": "读特征值" + }, + { + "name": "writeChar", + "value": "写特征值" + }, + { + "name": "readDes", + "value": "读描述符" + }, + { + "name": "writeDes", + "value": "写描述符" + }, + { + "name": "disconnect", + "value": "断开连接" + }, + { + "name": "startAdv", + "value": "开始广播" + }, + { + "name": "stopAdv", + "value": "暂停广播" + }, + { + "name": "continueAdv", + "value": "继续广播" + }, + { + "name": "closeAdv", + "value": "关闭广播" + }, + { + "name": "setAdv", + "value": "设置广播内容" + }, + { + "name": "openBlueTooth", + "value": "开启蓝牙" + }, + { + "name": "closeBlueTooth", + "value": "关闭蓝牙" + } + ] +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/resources/base/media/background.png b/bluetoothSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/bluetoothSample/entry/src/main/resources/base/media/foreground.png b/bluetoothSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/bluetoothSample/entry/src/main/resources/base/profile/backup_config.json b/bluetoothSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/bluetoothSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/main/resources/base/profile/main_pages.json b/bluetoothSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/bluetoothSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/bluetoothSample/entry/src/main/resources/dark/element/color.json b/bluetoothSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/bluetoothSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/mock/mock-config.json5 b/bluetoothSample/entry/src/mock/mock-config.json5 new file mode 100644 index 00000000..b9a78e20 --- /dev/null +++ b/bluetoothSample/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/ohosTest/ets/test/Ability.test.ets b/bluetoothSample/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/bluetoothSample/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/ohosTest/ets/test/List.test.ets b/bluetoothSample/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..1eac52fc --- /dev/null +++ b/bluetoothSample/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/ohosTest/module.json5 b/bluetoothSample/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..be4685a1 --- /dev/null +++ b/bluetoothSample/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + + { + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/bluetoothSample/entry/src/test/List.test.ets b/bluetoothSample/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/bluetoothSample/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/bluetoothSample/entry/src/test/LocalUnit.test.ets b/bluetoothSample/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/bluetoothSample/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/bluetoothSample/hvigor/hvigor-config.json5 b/bluetoothSample/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/bluetoothSample/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/bluetoothSample/hvigorfile.ts b/bluetoothSample/hvigorfile.ts new file mode 100644 index 00000000..f3cb9f1a --- /dev/null +++ b/bluetoothSample/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/bluetoothSample/oh-package.json5 b/bluetoothSample/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/bluetoothSample/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/bluetoothSample/ohosTest.md b/bluetoothSample/ohosTest.md new file mode 100644 index 00000000..ed4f1cc4 --- /dev/null +++ b/bluetoothSample/ohosTest.md @@ -0,0 +1,32 @@ +# 蓝牙示例代码工程化 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------- | ------------ | ----------------- | ------------------------|--------- | -------- | +| 应用正常启动 | 设备支持蓝牙 | 启动应用 | 进入应用界面,弹出申请蓝牙权限的弹窗 |否 | Pass | +| 应用正常获取蓝牙权限 | 设备支持蓝牙,申请蓝牙权限的弹窗点击“允许” | 切换到SIWITCH界面,点击打开蓝牙 | 弹出三方应用申请蓝牙权限的弹窗 |否 | Pass | +| 应用成功打开蓝牙 | 设备支持蓝牙,蓝牙权限申请成功。 | 切换到SIWITCH界面,点击开启蓝牙,在弹窗中点击“开启” | 设备打开蓝牙功能,上方Bluetooth State变为Connected |否 | Pass | +| 可以正确设置扫描的过滤参数 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开。 | 在SCAN界面,点击“设置过滤参数”,输入过滤参数,点击confirm,点击开始扫描 | 设备根据过滤参数正确过滤扫描设备 |否 | Pass | +| 正常扫描设备 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在SCAN界面,点击开始扫描 | 设备开始扫描设备,设备Id在下方以弹窗形式显示 |否 | Pass | +| 显示扫描到的设备 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在SCAN界面,出现过设备Id的弹窗后,点击刷新 | 扫描到的设备信息在下方以列表形式展示 |否 | Pass | +| 关闭扫描 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在SCAN界面,点击开始扫描后,点击关闭扫描 | 弹出停止扫描的弹窗 |否 | Pass | +| 连接设备 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已扫描到设备 | 在SCAN界面,点击下方设备列表的connect按钮 | 弹出连接成功的弹窗,设备信息开始在上方循环播放 |否 | Pass | +| 发现服务 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,点击发现服务按钮 | 弹出扫描到的服务内容的弹窗,并在上方文本框显示 |否 | Pass | +| 读特征值 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,设置过滤参数后,点击读特征值 | 弹出弹窗,显示读取结果 |否 | Pass | +| 读描述符 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,设置过滤参数后,点击读描述符 | 弹出弹窗,显示读取结果 |否 | Pass | +| 写特征值 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,设置过滤参数后,点击写特征值 | 弹出弹窗,显示写入结果 |否 | Pass | +| 写描述符 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,设置过滤参数后,点击写描述符 | 弹出弹窗,显示写入结果 |否 | Pass | +| 断开连接 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开,已连接到设备 | 在GATT界面,点击断开连接 | 弹出弹窗,显示断开连接成功 |否 | Pass | +| 注册服务 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击注册服务按钮 | 弹出弹窗,显示注册服务成功 |否 | Pass | +| 注销服务 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击注销服务按钮 | 弹出弹窗,显示注销服务成功 |否 | Pass | +| 订阅读特征值 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击订阅读特征值按钮 | 弹出弹窗,显示订阅读特征值成功 |否 | Pass | +| 订阅写特征值 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击订阅写特征值按钮 | 弹出弹窗,显示订阅写特征值成功 |否 | Pass | +| 订阅读描述符 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击订阅读描述符按钮 | 弹出弹窗,显示订阅读描述符成功 |否 | Pass | +| 订阅写描述符 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击订阅写描述符按钮 | 弹出弹窗,显示订阅写描述符成功 |否 | Pass | +| 设置广播内容 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击设置广播内容按钮 | 弹出参数弹窗,输入信息设置广播内容 |否 | Pass | +| 开始广播 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击开始广播按钮 | 弹出弹窗,提示开始广播 |否 | Pass | +| 暂停广播 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击暂停广播按钮 | 弹出弹窗,提示暂停广播 |否 | Pass | +| 继续广播 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击继续广播按钮 | 弹出弹窗,提示继续广播 |否 | Pass | +| 停止广播 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在ADVERISER界面,点击停止广播按钮 | 弹出弹窗,提示停止广播 |否 | Pass | +| 关闭蓝牙 | 设备支持蓝牙,蓝牙权限申请成功,蓝牙已打开 | 在SWITCH界面,点击关闭蓝牙按钮 | 设备关闭蓝牙,上方BlueTooth State变为 Disconnected |否 | Pass | diff --git a/bluetoothSample/screenshots/ADVERISER.jpeg b/bluetoothSample/screenshots/ADVERISER.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b0f2594ab6497ebc164c1dcbd168d546af2cf648 GIT binary patch literal 71541 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 literal 0 HcmV?d00001 diff --git a/bluetoothSample/screenshots/BONDED.jpeg b/bluetoothSample/screenshots/BONDED.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..da73c70a851c4679a221b379e491e5e8fcf85a4c GIT binary patch literal 60109 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%0A=b36qI*@iZhfL zR@NK;+}zRH;#6N=?B$o30MXLAWp~M^wLP`h5RIKnC@Byh%~S-Ka%^=xq79jZAB`~OvKJAa#{p?A&zU6z28E=ono#r_v5pM`L(F zX^+N3EXS3V&3Zl83=<4Z`Bbx;e>GdY);T?8VF+0zI;gWEA`Mmta^RP|y!?qO$&LWW zGv#jJ1v#1*N%n=5Q`Y)zqbw}$n3<8)m!^dgPtCN(jkd*YLe(9qAn$A&) zg`@VY_$&G`FTHh?tp$RH^=&0lH8lgl%?b|~ss`Nd>_aAaPC?Z?&^9)vRieaFjB=5b zlIO+bY1Mm6V@O)?VlOTkquB~mL72bNkf`0q|70F?4ilweTmhKh$t zOJb?oEWPc-ILkS8cY$JIh8m6md#T{8_p(uSDsm>=XH0i>>lj)gfKE2FaY5tW7eXQ(^x}1&{QA7R z%B}Zi(RkIg{YvO9E^IRSoiXEv$aUL>r;}6-E*Pr1yf4L{E_CjtGDqsQL|s@=|4{V& zmO#&@;g1Q~3;WP&9(X&@qkUvNzG2d5MKqrgn!VawWgC{s_4r-%SmeU$Cf`uaxLH8F zsT$X?VRg>2%&~8?9*?W(oiM7voqVQe2us#m;IViBwdq`3L{1hSS9pUN$A()obPeU4 z5wp`C0iI7<6xt*m5X$2v11DS}b1#0xx&*4#Wk>RGZzsLqo6F;|-|<$zVm(qcB~*B& zvKYcK7Tq3y*_VXm6f_v{iUDZ-nJu?kgdAEMtx=aNE57b%cTrG(Up=Kp{lGmRjgPWT zhD&6=UYiP&RMC&sr*HsWZX=_3j_*Ol7Fl{Ad4(DnUS=e?)#0=vyTp0dy1z!mfh&wh z6O&+{r;Nr9oEy*C@f9(KUSEmqYcR1g=5vgBBw;}$a_5t6DjfRgtLk*c1A%*ap)rvc z>BOWGEBj|-r7R$=O6=8i8AHRuM-!!GsjZx~9JK4@xavK4dIfzV>qf)A-fm~YiT}t@ z=d&uAC-n4F9?Oy7Zkm4UJ4kKx^s4gEbQ1v{Cjz_4%S_Fq9Q>KsUv1ihC8gA2%Vu}u zt@V#fUmk|w7?sJyi6hBYoN;}HQgW#Gm9DPYi?MfCqxHm7#Yw(_@Cpz^SIa?^u9AvJ zg;qoEVz*2vvau*nGn20X6}y*i#j&EuBJw02{26uW3}!RQB;lX-XZ zq5YML!$l{7$bDl9{^*M8TEK~?IsA&V(d`IAjrv=b_g=6bY+zwn?u~@(@=fLvR-OlK z<6oHkO0kcz;nQ3kMgoR(OTIOfvbj>Td-gj(oKfv_^yHsL;aB7Er>?oMD~lxBeY&Rf zrLWh6CkFh$Q~Hm!-@%nbI+}m=#1PWFax{H?5UYM+t3D#Kc+Q;9J{izG5AWVY` zM9wY#Psb_x<21daj|XWLU^|wio@5K^X2AOwa(L!JsUTA4uhHjdX>C@pRO6T~E~WlGS&r**)N{?gWk zN@}w>YzQ|oBEY|90hR#+RL`SR(2PO4w`yZ0)NP#@NT#ovNiTPaOpqH|h4t%mt6Sk5 z=${^iFT-F_b8q8m$T5BTo~NK%88)dl4)X9zaz^~x72qxL5nxqb9KQY2s}ldZPwat4 zhuRNWts)}_&b2EAH|Mh6k2t+$otv04D6KT(;SpZ~%MB*H=eb~GrlzbixFa7JAncZx z2QS0f?1P@L_b7JebYb0oE zScZM6vBurvDQcmu;S{uR?*nicDg@x2NpPy;y;IPMq492;LP`Opz1e;uO3o8{!qaI% z@XZCU0|l3xE{M90A;kPhJpo?>;MWQ`E|Q~~(3R@#LF=NqB#SKe_6m>j6EKZ4lNMIv}{6(4RNS#k7B2;f2)4>Srg*+$Rsl$0@g_p$$Tx#n*n@3O}aQKa8 zoz=Vnb!n7{)#K>k%vwy`Tqx()-A5qMxn~mR{$L{;APm#o5vYUl_H}9Ppe^iyF0%XN zSO+lyQ0%7x@9^?NF0dVn0`bQP0$(^rgK8JSIP5#0(`%&l2T#n-$y)cBHt7Jllao+N#@S-!H}s3l`_Y5c+uX)@0$~L zRz&~T=5+1vTI$z+sbCs}B~eDrC2$u17q`_=(l6V+1E~D_dtd!oll!+V0$ki*bW?vI zv;LV4zPF(<@DC)Zir|klEx+;IXN|YaHOwjK+YH0xyP`eFakpZApN()Y;SHS0B4bjp zc~fd|+ViJS!i3X>?feq<|^8yY)+4k}l^cVc(D-^KD4-*pv6_W+n6D!9HsQrfqzhF^d-N zsi6~ZW_VE+J*9o+KzH8cw(CaMps9WP`V9d4yZ`==Xo$Bksag6~+Ly--Wm;0{WzzPD zz7FPW)x0imH(WwxG)%QO4k7fd_?8r&1FRqzW@ zmuMbmojZK&b)4kY1TY|Pa&Wl$1uDPelD&s4kd>p>5dH;%{3DvfncvZOHuiFmuEi-s z_Ir}?ht8COGY+sgR`*B}v2JTC(fljfr1~GyeJeZKxJ|a}j;b;;rTvH7op}Ub>x{BV z#Bx`FW`MU(5oz=JT$!d|X7^RwR)>3A-sO2}M(K2S$~ke@sLN|HKOA?PusT<@tgnUM z%kS>hM_L5z;!QgFd4z{KN}TSMx`N(1cp(ADK)&7h45)Z!fE}-bn_eoXLLmr8!R9Gr z4tlL1cqigR2Snd1>4nHDOD9(3f`lUPz)QZ4w5K}@*4aI~=aShAf4*SS_g)3{gI3`F zvssIYqmWE84)aj9pk(26`i!{ZWxw$ZSDHSnaS|N=$~s1`ZFeArD54w4eK5bWHftB&7Qe373bHzs)N9xK`;O#F?h^ zSNS*E-GL_xo>Rwp8~NUD;Hqay(Sg|f{akCVCN;i=E;OfBz)LxoZomE_3R~?u?sn(| zbpYD{%j9uTkr8xbSr@LVRXEJJFRIH)Wd$O9G~EJnQM;Eg_(jw0j&|Y=*D;wm>|H?h zO<(+;>T`b4v8h?5O8Y=TQH`0KppcT~C~;m!T^TT2_B!$7}b|18c^4bL`e6I|&adF*E{~J-YOh zl@ZlO)nZW$eAa)8_bQ(TyVYYldxx?{mno#0>K-04HShQ?RapS)(=}chNx=3yr<75# zHmKgAuIl$mDsJZflZmEvY=5d>iA#XBXuGD;1&3%MLG(rEKIyPRFK&5()|f(0qr$mEDfU0 zlc&`RwPdZ^uDCEfu%{v1cvGL=?mpaoN!8y|(R~e;`iV4Slmc0i7 z8SpKSSgo= zg;iJkr*0BTaRH+^*A94!oQmyY2WY4SqG&=tfoh~-8O<3p(=dD z{S&RnsR6CppHG&rG)Q#6;)v6DHCivpH=^{zIK{qkh2!Dg&OC-&IVw1_x*A)O-0ELH zlo?!*>9Ih#>KZk)gor8Dcc0iWPuWkT96|$)DNUV43iLT*u5+wDD4SFBWTW3h=}Gl; zP99f~N?Ey>1)F_FUbW~sow)IjKpWqyoKwRRj(P`cRik!nO~>sJ`CEEXx`*|PWM{4xWweL zi)3=tF?xLko^(ZJ1g?J8DVJIV(Ev^3H&&{MZMw`2mFU8NrRbSAn*_^BKwXxM$IRer;}zd z+WE1@-lsLIT_%yWMf7?J6oR(KMrQz`F+098 zl5opqy_Fh^Dse~&;$rv}b^Y^Ktzd5M(0gl=`Z`FZG%+pK`E)Ya11=>w!xg&&Iu%<5 z;DvS2+arX-?$YDbZGwDNSpJE~N4Y6HukAo!Lf2v%VcXlA{0kO-L1nnE+j)Cslp)_E zkn@CFj$jPnz_N3H^d$6p6M=7K|uGPWMAH#nRd;vV5vOL_`= zE#)U)WfD|}VM$OmnokYrbQF_oCvhEK@i0ha9GbC3r;SGuIw=mAV7{I~bAJ_>g{1?3h2NZs-9pSaoK z6r^kYJ;C4qR0qxzNjf41n(a&iY_peV|EOv_NG6$Oicm249WPwBc!78V2k(#qP~c|^ zARatB)Vqq>_nve;-VF5*sw64l^AKX;65^N2H|nz^_q{leUU&x{wL=NM*s8=!_~!uL z&~yD1^pCQ+e;rA)wgcHE-KW}(!G5Q~ODo&qHDFM*xw$8w}u_KO#0#&kTiD^ePOneFYEc)qJOGZk(0s*^yZHl<+KtQpDdP zKKWb3|6Bk6*5Y3+(*H0+k=Z;|WhXyUuDSqTz1s$c7%j?uH?cA|(I>&1Qc0=@t|&u^ zqQ$T-zQdmwSwW zSSbcjfD)<6|0Ik0d(3}WQ}8dD=-)E@TZaF?bRc&OX4t=@7=dM%d75c+TR#2UhpI~? zH-PFprD>|w@D(e7y5-l6PYxf$r>@OZOWHL*+)OMAoMK(EFX~JJ82)u~C3ya06@pCu z>ZnCVcWgSbvf7@!{hM{4M#CJx~?-=5j_lgi0$>@_y%i8j9w6F_W{}q zL)3l_q6}hl~;08s8BTl(bq*3!EfTC;Bd)W zd%ELmKT{s;nm8{=K=@y+xwM3gGuM>*o6YKtb#0Hf6Iw5-u=_p^@nVVYgWN5=-t1^^KPe$@I}4_ z0K6jqcc7_&kD;?P05-ydt@OB3i=85WuGI`n9ZzPt@*2@$VE{IiUGxD$;_EU%_-BMY zLHYUf#24KTeEE@en`S5+2Z=qgu8yXTVYyw^AG5Uvx6ivTrvG6?gQ@jaB*kR~a`3H1 zcv2uinRy-W4^;l_*bI=RA@h3xobNwKReq-ltQC%9cO)q`c==l?cu(7%P^~VcexejADiO^m&)Q^-y z6Y2m;Mc%(t^c;q!SeE=u>D;hhnQxI?QR{No<5A%bcaL^ZJCE40$(_y9x;qU&9lWZW zBZGz)>3!aoc3(F1)v&_LpHKPo?}cs9Z!UbCA8^G) z29bRl`Nqtq60Fc4*(Ykn$g>3;jCtu^{gzPGdV>({6~xKK{as7{ZT>Fc1A|Mi14|3H zMC#5KyDAPm&2N@fmEnBm(k~LV)1MAx9$!=Z_1w#EQw2>i3;WvOg%81XsD(=F s2rXUl(8QBhAl##?!D5l}VkB5f?#z_uP8CbPE0upIt^a1<6P*tKFR)85!Th1p$IPg#>p95FkKscM6x_?u8XvKyY^{ zVCuc@nd$eYS9kya>iK(S{qNQ~RqJxkJ?y>jIs0t+_I;dtTm|4O$jHk8P*4B>6yyi+ zxBz$$c!rLSf&TOv1_s9S=g%;)330Hou&_yAyu>4jX3m?CL zppdZ0`w!AGvU2hYpENYJv~_fWre@|AmR2BZCubK|H+K)uz;8jpA)#U6@d@7(laha= zq-N*j=H(X@78O_5)I#d&8ycHBySjUN`}zk4C#Rs(GqZE^F!yy8*_E*mSV~hp-zvAqFF!n$Bf&s8mQIHQ0 zl>i_KxVmM^_QU+Yscp5mlq_viJ)4Hu5NkHohK$5`9+IMcmCbYJ??Y%j0^*IH}Gp4ni261CKiY^R+)UqvGEaXd1rz{R@{^h)%qCj#+w zQ@O~on4;;Kwi_OJM5EKKP+?3J0uM{mkAQ8ja=; z;B|`^72aixRLmnl8-om* z3m2`IUriky&I3Kx7yrnhJIX2m=5raIpwL+6v473P4}wp(aPXZyYrZq}kn!GM@{gL^ zB1Bo5&~FWQ-!^({|7RR0|70`tL-Xa;LR{pm+S{ju^CY=n;G}~A@5*_WyZDo{u7jt# zxs}+zJB4P`l5QxqOYmsVvi5p8b?~8-NfSMtp45|~KOXjbk+PK#4#)_X7X2<*IKmDf zRFnQsYWma>2;BVORXu`$PQWQk(rHwY+Y>&&xemx^K&K(O_C3gqIZwSR=kwVxhQ#`!G4QXx_JJ za=TXLUU#2*sL$D8kAT%-@JW*-L`>}w@NT5y0lV)JK>o|}y|mdjY&bP?)-_p6$OmLz>3VVoU$u z8y6#Ab_2W7;gZ$lAMp=v+GeVWmogTVxg%B4Aw)w~BFj}SrMok!sdIc}o=hIL1UIpf z2RC7(7=|Ki`7>gww8u6!O~BH8rGTd?B?!OmYMm0m1*&BiSSnp%mDKcIPW59u z&&xqBq0iU&HVXfw0M{Q_zyq8oc=w*vo2-?^p5@7)GEll(bT1vKMg@u@S)`1lAQewFVuCedmmumEoz z4dmICpq?Rh;mVb>Thj{HKa~Lto?rdK4b-ii%{{)z&&*xwBAVI{-`oktEMG~Pr5t$h zX`21%?xd2`YhXCK=x(S{-yTnS+b`j;&?_Su5;MlXC&HFm+GH(I^R(qvTBwMnVctYeV764>MED2`Y(Dp0{Vv=3FSyF&oZRE z$Sz;cgC>@(u#r?~SH|IiKTx7z&FJZ_0Kx9;gf&bP+KIv)V>Xen7v0vfB_z)3)$L0V zqt{#ywY9gHf+#xFi5ANE8p%+YIeK03XWFi&-IXa%UUdTzO{p-+6znGiWayO7`+$H5 zq#WZ1%D{6HlJ^Drmx;gR%XTDaQU_XE)rWLby@X}aggO?^g%BqO2lXKmBkQay_&z0W zFxweC`k~%M+bvg*ySDV5Ws2h~1pT@iwe{Jx zJY0mO-5+|PqnVOzGVM#MAW*)?GI)NDgqw$0T6W6L~C#v_24;(@e67E-ULD8!z)G($4O zbt<6iM=~HjqSk)AnNVc3V6>zwGwV89Ez1S37BP#?nVZQ22*^$9z=R2TgjjxGp_l0H zB#C&KT7n3lPOG&*uwrwtZZPYW;&gM&wP4-&cv-(NuiR`f6$-mXb%y+8?Gh6mH>Dg8 zrhi3d4r^Xb<;Es?_?u#Um#0+roHF`oAy23vVHMBamoM4r$4B=F(8xRtccF_ad^K*8 z^q*(lY_z?31Pn+(AF9CH(DJ%!F_mm^r!4#~o%Mj)^6b+0%HqCRNAP3JN0(nXa_!K9 zyX;1Gn+FB^V9C9x*$00EPY$T&=vQvtS52=L#8mS3Bti3+go$G5DJ!iGvtp*(Rw%b) zA$(D8L$=Bz7Tl1n{mY3rtW&z>iH3KAB#c8x*q`=T!XQ)Xk9|3FIrwH>$fFuy_0afV{&@-L-Q>FWrv;B+j7M~sg zFCL`&5Em8Nr9Q9Z8><^y+o2q$4ec$=n;^gA@v{>wI1z)STs+N9c{+`K5 zgnQwzoK$EjmXvg6=wzI_CQgH!o^P{IDt5pO3%vNJAd7fkpDdO^x@2nndns^RRG&(Q zyv=;h@SA{QmRFwoE^kya(It@xQY+wErKi_h_5Q`T4{DwM;~KR9HEF_sw2vM+Q2{NX zrJhfIzf}44B%JBrX)@-TY~28ncu#ePFuFroEh9}~Lcs2Sw*~$Sf4N#L9rz0Z`Mn}M z3`uh!uJZIIr3I8yl&phd%vsm7J*k41iS?13G%+Jqm+~&m!X#UPM}`IK?KcGc?YHOP zKl%loI10V99q6JF3sy!4>Xg+A#STIHO6qgTjWOUX?~li=&AY^~yIr++f&|Ht~QPAoV za7+I9Oa?d2QD4x#5YBs0RSxzNjpj zPE0hWlHKBY)}8s%o0$a4Un1(&43JF;`p6`aCu~%NrfvTScuu($+Jb#sA4IR~f&rrs zHfg61A)l^(3wQLqRWoiRq!NDV{XVS|JikHGAqhHbdf1m-S~!Y^%+8J`on7~Pt7hnw zv5$perXR#PPV#r3^9K}9a+M}Uh#G5e5e>qDp_4;HbpYB7nwakAV z^(Lw)KPU@`b?~_#&A7T(Maq9j(A%|?*~KWrQy)XEsXD;RnS2=#$E|k$zWJ1|QPyd; zuw1W0LZId(>F23ThV(wk%Y}rWmO0Facsq#w>-L^H3H(Xld1vhEe%FpCKS{}NQ5Glc z{GEPfw*;){Uze;slgY`Sm$I>V1n|kJ^Dm2<4hu^fqLkS`N60ldAgvuZ)rnGU6?EuJ zRA-{L-JsOAiiwb9qJ(PWigj}Pe3SISBOrOxClw>j!lBtZA@XuZXZiVw@kw+9M>bnj zLGst}8w-P*&Z5z;lC8H|oZTJ>1IoNktGY`0Tu5Z*m$*SYwcw@5N=dhIGNdOPawQ=a z@;1er+uT+>2By=j(2th_ag?yY$cMccSK9TwiUw~;BZ=A@Rr#YsjUl-q74y($_K@fX z^wClY5{cMzU;xHdC69fe2b@J3$4yc0jd~NUEm<#g;a`J0Z$CFfVY;uAw5b_bwdDJoMWfs&9vHogxX&C@GPj-+K%hX zFue0zy_8tbdsE6cAt40KSKdcai(cU6H5n8Dip`Slc?Ik_X{!qFAK7++IuFcZ4sZW!T!H`0;pT@19J3zV)zQlF}9Jp#&4 zz#@IuM(br{c$i(eyKdw2i!fqLOWP7UVzy_Dk&)|E(}^c4y>-CLQ(*?+zc_DVgT@u2rb^*Z9{V@*eon!}zgaku%N^33{lvsHw-BOt|QX zZozkq#t>gZrn{f?o?8_ThE;HKp$oiVpv(96-9t99g1#JPjGNgEcf4+T_+fqFwSBi# z*_wx2?t;AL7gNc@N>q$GNm>_-@%i@az%`urDvi}?@a24yhOq3f-d$bT;4zkj)z;vW z{JGuB+o-7NTnnA$*9~Dgi*m-@W=<0}h0_vr?nWP{mba}h>p#9?#;MJgb(%AFzD;e1 z8{t=k^F4Esu1ST;DeNa>2<>WIkskHESIqB#o|RDF2&Ii(;XQ-`FE&Lr>VJ*6w-tf$ zf+fW2vI-N3er^|x(5$k4c_Y{M6hx1+L@a#;al z^{Y_DlIsM6S&ri?o7!Np)xlw%n7b|NunNlx+$oMUxOTVbg3WaF%e=Zzv}=#Yl33V7;SJJD{z zT1Z6gJ>GlVOXBVn4uM!`&zSYYHdXCPp@diP5^*_-ynFeZ1~t;w*!2j^$! z#%R9l9H~O#Z^p=gR`G2;yrS(4;YUE+E4@cRg|K9z6ZO+lct}V5VlkeGSHbd9zbb%Q zYHZWSt%oczqvCj7r?s*{F~YL;J6qWJI?cnc8SRd-8+=pb%_)+3l&D1oCmhcXC8&1S zq%q8__x9gEVX5e}w7hmH2o{E&`k$YXBdi|*-9|Tzw`2ET9|7}0mfrNpmF$Kb!Qk~H zV0?tyOeDRBP)(gHJDdsdU(}wo-bd9Hd=`(|@HMa9R{yXl^G94pmaft0TGJ5o5%7!i zLFq3(%&fVzXl2#F`{TZjN+IV7dIqpBh{9Jov^-;Ga=CYj{eUL?8UAO}uqTDLD4*06 zR!w)?h$kSe?~saDwdSnc_8C`u>Rt^7z2950+nF9hRSeo<1kZ7Kh5MBgXp{Npp%YpV zDz!QWb)r$o?+1#&_n9&=icwz*SS(cc$=>A>B#$0GyC@F`cQdI1c6Kf(RtEHrO0vMv zo|D34 z2&Hz=Z=rtPLi@Bo?M^}-AWSeInn)e&fv~B|j;O4nAU=luj@9dqdrtz3>&?=X{e_w* z^4BN=fdL8rU>8lyJ7%alYDCNRCpcDfg5;&sJNW@Q3-eFcmZ--)&OpJC^9np*nh(n$ ztJN5LeUg0%mCBlp0+JZxaz*WH8@P}4%@GG1wo|{G+_;>o@CA)Srstkj-dFAeG4>pt z?HAjwmub#B@1N71ksL0~ZjO4~PDhb{m}-$UW^--^)6H>zO`C5N_b^eiQhQ6}LMbw< zHMLpU7BNzn;@Y1Uen_nYzM0(FS_4VL>v|i@qJ^7d9Fhj5{dTVJtAFIgN7PRQLh{_njufFSf=y%UsfR*1 z#e<_9rlx04O6AWtz+#&5_8>-Tq81q+wuAOW=Twd=P{j_uwJY0!t;9jlEC?Q+A@OUL zKMxzBaY93V_Qw_x#S0HwYLUeG5?RAwGCo|BEOgo*_v7$>FvP zXZVfxE9ubabs_$#Js@#KiM#nPsF-eUd4fnj12OGOQgYWi1g=9kTac^8^^a)9l}UJ&(Y<55@{IVklbSFDRH zG)q9r_uANlet{B#INLB!dSsNYGypk?rMbOxwk9K&@|gvq+8a$ zJA)}cmyb1-{CWz;+!Etn--Pm)DNLTSzmxVlAn0-7$ceC|9 zQERP?JO$c@pD1>;k}C`^)cNRz4rC^sl_%%NhOBx8Iqoptd;P0Gc+A5~BT|)0k9O-Y zLDQdKMwypiNk^;+M&(FB1n1i@KGuGeM<`(vSgr}=f%Dus4!2a|){-6RM@WV~1o>G| z-PauH;=8~6&^8%#6?{!>G35PuRVBi)-58|K6h35&LVtm)F6x&mDV+|Hh8D6!uLCkDMEgowG7K> zymr&3=-C&eS}hN~m{{tBz?GlOYfbVk+Ig^T0vkbFaY##9wa{izlGc}4LPq_c)Lp3? zM-^M`jn^)PMu3DdT9DB1#Rvo;Snzjk&A#yL-HYf+ldvVxdG>+ekxxMBL z;q2eQi5AnmJzyZ{ByXu~TZKz+`K^hY(Giolw3Ajl0rxtN`g1rmQze=S5&GhHvdjbB zS3%>;F}UW@+H{%k>uY&_1FgwR6FW=~fd|FxAIEOqeKeQ1Wb>0coIRQNSv0)5det$i z=+E!1stKyft}8x{+tEQ9c*i_=4x?vg=-Eo!nq{Rfiuk}UL8*Tddq#d%Tg=6Y@yKZD zgpzhKZ&j7QSzggjUP}&pF{W8p)$G1%)zed-Y8GOD?A-;RYI_7IEFT{RIa#jVt9)vm zW#_bKsFy3JssHvtBa+C1JVppj%}g{MH=-1{cl&`XJvrslqo!t9sjP$MX z=wR^e%Ha3I+nL#LZ&_3L64{zpO2U}cURIGLTItj4aQz7wdgxN|3Y1E@@5)m)J+fDja%m%kUH&qE4MR$cZ{@{~NO>Gbk-c+? z4KAElL4ZWzes%Snt`Z_n1wt4(6}h|V*VWIwSfX#PO-BpenRWxXaYDU3&qmw>^_phd zsP_mAbb9Q?gL7kd-;Hky6ACTw^sNq z;pQ!@$16%t`0uY$CmpWFespCT0;q#TX&Red)@)g3yLQSUz4zjmL`nRNqCc3{cRkKa zvrfpnHXm4>UJrJ$WoWoX*>x^0>Cvmv4&y0&>z-;QSlWj2({LnR> zMAL8~1O)Y4S2_2NbgcgJ%*DNE*Gz;%;YU@u1-dB0n*QbRoOtW}h_!o8{g(J%S|?l2 zh?WI|PLtS*D?f2*M+pYS8(*4h^X#_Z;ns+<+AI8J9$NP7i!z&knVf*QmyYV;sJU=7Rcey-@+DQ0pvUj*w6VnWxFjM-@<`a8oDw&fG=G=P$aN!K z=+T@-NS5wVQQskRhD*%OH<4biiKWmTF>P({N4aBwFQi;ufLCGXW4NVsm-1vD1NaLa zr184kvzV;0Y25-;G}lpZj2e)ZoG+|KO3Xr-?hU@o9|?%(!WU|i*LqhttUF9~c1Y7d z_~!C%i*YA4LO*_>jmKS=j>-N7R*a;*YQDf6-h=qfxZlxsc6i+X&L|HFa5m5xkH9c* zv&h7TvLIlII>PA*QnllX)p9Ty;l4 z)p}MWSJk$)Q94>zuxhbn+*F9#uhav90*{DNyC8M$=9POei`e9fS`Z%icp#bRT&vzd z$mVP-syvmcQU{T)jcpeDs90jpQ0HbDn9!%tTYv2ax6$ivjQL0!b(L$+T5G+W^}KJ# zK$`H7nAtj2IvQeC*Yu6bnU${pl^5r50nG+J=r%arvUpzJ5^PV|QyYjw5lHh0@V_e2 zP)E(2K)i(CW1bx(5u@0>g;fvH%k_)Dau7nWY}Ug^7`s(viHj_1LPxh(UK`-mJb6~8 zz|=qrWDGvf#OkS( zwuaAt|32?A$o8XcuB~r_#LpZ)+X|3^tjD>r;yLJdOJXBlKkXcD(prsbG>HdMae1QUxn`_JE*9q>{grWt0ZmwhjNd2n>V6b;yp;j@t$OsU5mau!GXGoBqpbb zaCFegO;i~j#^;)89S|ON_HtCgm0lUjp=VhzxTDYIX`9Dk{4$n8>?$#K0cFC>#q%>Q zs$?a+*K}&+7dB1g#Z`PS%A{HS73C(s)Qa;^imF5mLPA9GtG<}Udx%}UDM7lElVb7| z&r5(lS;i(44;ND)ao-)P#4>4s6HME`g+F@LEk_u4hc^bRP zv#j>O(P(BZGxGVbd;MYr+E&@CpZ6s2C;0EaH@4TXJ4Vzh5k`?8oWGXqznvZteK&cY z&bCvhr6z6R)Wl|omw~&#5fvJpwU|Ft* z7QNhutQw6P7sJ<1U#gy5pDetqXPM#ZxN>B9!r-LY4>xDmzFip#3i7(AQ${L|YmK{kPwIJuK# zs;Jt?2Y&BuGWqe*@GqYqMwn~%S3f)aym!iQniZQ#B-F>YW$a89h%j|Bx3uydbLyTL zp;w?VCFy$ED^x6yiRaB}>O~0^u^)SBA4O&9jFgl-b)NJ2r)Dft;7SNzCV>Fl#Av29W+9`UjY?oR8-_M=>d%3m$ zKU`-WLx{SqbK-Bu?Z(;=6NFe|5hkVFmC7I0bvHdtd#m$8|-oscst{;_g zHe9VRck+E%V37>Z_glWU3+H>bFB7VID?kI@vQ{WBj}M%}KOE^lmW`H_@AswMC1KY{-jo~mmrHJQZ9d2%yQ5cA-&hEM_-lQI6}46E#Mi{ zlhk_YaiC7i=K1}tOu1xn7vQeUfnaWidrL>Y4^ zKT^suGQrfermZ0hW5-iPjndi;ZM6^=#fU;$x4RMse?=c&P5uK5b}Z>eD5chWOk$l# zf9!9r7@2=GHsWp1xr0bY)gra37lx;@i*}kK$r69^b}^V|@VkEa+QY*e7#?c`=>CLbU zQ71?{gYCp1vP^jFT5O9APZ>fmHjt+AS$(hZp4Ua#?GA9m9@Ga-W_j z=pyVN#bq(72VzxJrxi*d^DSa69qp%kKm*{`%L0BzV#tT{Plg{N3*9u?T+5Y_X-H|J zgVM7W0{t$AqN{az6!Y6?sKJYDSQD}zna)HfUnogHhx`_5QNG?Xa4A?|mTQ<09;r-@ zu|lXXY=F$f6c(0qlpWBYaae{Ejta`bWj8@5{RuMFA9lC9Xuoez_ojCx!Y;>Mh)`M~ zuZ+wEx$b|R{qYC{|Cy<5!75zZZ6gXeyfx)JU@O-5<3WuT@xsh-85#Uid3LE>@nQ1r z=s{LqnoyJEzbbk4*Z=Dg<9{CIdDV$89ufxZT*^?bj9}VWIQxm{-pYXNOn2{O;GEz_ z8P^F=ao{g7n-tyuh?G%Qc^%`VqZ#3-JaSZ1Z_nr1fO#B*8S50O=U|g6Hl%EGpJG$I zZE2*MQ$B*IN|Xx4e@f$386&FRRD58e?03yvKpQ zH_eTh_&w0KrRzm{x-jtIMfnJTk(leHH{VUz%eJ#B%e$&*)cV8=+oaRoa5^uP;dM-b zw6$h2ff^Y!R2-3|s7`U$vx-IThO-*e7Sqn@TDFoJMoUWkCBa%Wcu60&%kr->8e&)0~Pokwss1YCBlZl4bapN~DNSEIAN-QzR_AKPbq$ z$}gJtmQ045GOrWn#}_Ba?|x5p^HNMbC~xL>EDL(byKiO;5>rm9A8@cU4_@Pgy;k+W zZADo%f3zK^f&X=LG2j{ZMYnU=!Zl{7GeRs)~2*i>y_sy{} zJv9nyZ&O%T;l&E_Dh~sV|Bh!T*KCJw)f~5OHZi0mc?}ob%QG2ky}uZ_VcR}%05sxU0Dwn#U9a|HibD+guZ z*H0msUEntyhVG0!n@Y_(7zky#i+dI#W`V;diIv%9dp4hEGGaBYdFXAd^M+S#Vdu5Z z+%7`42=3#_b@hn@6G%(aB>ri4vrZCAUd^uH%ZpMFLgEO1Vr#zITxdUyD(%Z*awgW% z@7Pi8Xj3`m&Fe#zB9T~XJyZl50n|rx);ycn`1;&fo{@TpUrQ3xW@3TkXB%6(GZaOG zy(z2{4}QjbyY{n4(3TI<^pwIy#7!aFadWeIYg$(qWN}a)qvR~W&R2MpHE}@+oK`La zJrj)pm&AR?*#7Eqd#6=Xoy{wZ>1Q560TAB}nvU9UO3D;(%RPoI9G)FqqMw~|@$|)o zxAJi>N-^-#xaX=zmreMS(9CLRRumv!c9d{f68~|TH(HwBsaPrS-J;6C&*Qf_rRgea67n4FL)HV5@mZ`HLog&NMgJ<8L zh$YRCiqbSdbR%{5OI1{?$E%Km(hEW=YKtsW;YU}H>7n}@$`JO0=+4I0pBZ6#vOA{_ zaR)w*kz_?8;kF9we5vvBd&Bz``DsIjbv)%+b;o^OB~dDJHNmixeG_&DITW_H_wGonvr!iDzDdn%YWJlYWl-WC$r$Mh5i? z8#^is-CKtsXq!6c9|2|s;f!Pw0v?i z*5bMdn}~2l{aTXYZ6r2xaEX4N7_ND%#5o5<1B;^4Pfc zGHAUH1YY5?C(WDk#7%jj_CL5}(tA%pmXg}(^Gu3*)QbxSa6u9VF8T|goGC?7&hF6@ z%J0CfXm4R#X9Jps+Qj@Yo$_OV?YHQ8REf^aiX8!oS2NByDl+wo!j|pPgH~DOS~@Gj z{X20nGs!(bCu=Z19}|63(u|rdZ;zPHVkDPT$7+n)qE=pJP(|MK0fgO4S0n-U!ZuqD zO)ZCdjpk(nqPUSFk0Ggk<&Z}wbSh7JFfXV72*;&4IkD|3FWSN)S?8n;@_HrY&rEie zd3}Azh!h1qDWeTR{F2ir&``;><52gN>dq%nliPe$Pwoqaa=P!#qvOxl+r&$9pe@|a zx5KHu5yb*&UOZ?G=(KE3DC3FZ&n`+*4Z|GlZ9J&TiWG|mJi6OV_9HpCA*x?YHb?29ofBq91CP@~lEI*5u{3r1mQjaW}Wa`Jilf#t+TMWw}!wn}$no>+!sGZaQU9 z>d{AKp5L?B2P3nk--xH!8*bvy_U?M~JCFdRnZ=!?hd1ebb{bL}%!#TOQjDtNCq1^; zHt&pZt>SjVB!5;lSNf#6TQHIg?EKXH6sWF}G-I@39@Qh`%px_ji(wci^{<(J69Bme&l%Yn$P{wiim=JMeLu~YjA|KQ+${br)Iy#*{{ zO9=SK**_%lzh@TwUyP$g8NDu0Ylhg0^iINUfwy4xayg74s`*2wk0Km31xnbLWFtK* zqiExXl`KPxfzjMRU@=H=j5x9A*@jnSt(t(8(5@6EjuQ-$xAKksmD&`9Jj|9pPD@cV zX*o~6m+*pUR(_cUOLnvVCZmnC=pA8}Iit@swETP)%&}|{T?Y2?D&q*s`^dgzdS+Md zddOX2oP)$`0i|+mfM1TsK9{PvH~&t>nnB~aqFE1+9Ltk7>l|An&Q0*nzg-rlVZ5%3 z#23G2JT8y-3blF859d1Ok8bMH z^ubC5`{&9^!M%LWbT(hdUbN_E`U%^@)WG1$(}%v^Feh+6r39rK8iU6k4M_X&XN9s5 z!g`u>Nl)=;@*({a3KP;eZb{M~ak8t}u~}ZM_rh&I!P!h)7mZ^T-I0r9>naTS3V#Gh zv;${OT=r)&h#Q+~e)iFD@5kYp> z2o@c8pVl}ZS;l~xTm0*VB->g&`vsE=<*S3sm>(OV)fu}E<9C6&o-2r`2eLu>5O1@UJr3z3Z)m4VYack-F*b)Ii<-kajqE%OfBwLE{n7mW*J{XhtG_r10*FkbqyC zY$MF#2K$57FRNSV=c^Bixv+50g=HUcoIRn*$g3lMlc;70R(2S?Mi%gg^v{m z6n-5UH4;QI?IX9F@k$PfyMx- zCk+(f-zwBmnzM(85G+b^r2te9@xi>2ZmCXtX+W&}s@WreCGb<*w5?0Jq+ZKJR3sNQ zoyXHbIWj?^4P1AzakMttDx@1GY-ciifnkwC-^H_z?XaV#x-ICymIXO@r@}1|(Bu0) z)=_A$SCXt`-Pf5U6j|a?*nZBkV}%;tQUxt*k_wEShuNw z-!X>BdGxJRd6IhH!;Y*2<1-E55TQrUU$M4VwBN$%q-H7{U#VlJ5XCSmC2;S7Is3Qs!sqHmsoZE0f>wQ>h-;)u`HS(l1 zE8}FQ@~D0H^*s%{i=n#}TzMaWjn_TTs!#cn3N|64>weMcnrzR+Tv5ZqxETM1{BKmE z5qE=^s!g*;b#~P)4f9m8FIWPe-%^ZY$m2kH=lfiv#gZfCNFD*sk(&)W7vj$6-HEwKuw z4;PA)t#lzoVeqADagU1$g@{#R9C2Q2_|n@nphuWLMVye96O+DqCs^6{>1a67@A4Y%RM#KsS@#Bf zo-mL_g828!Yjhp~u}C!Ey_Y-^Etd-DI=)Qzar^waNU3Z^*hLrkLT2g!36V{0g>qk~ z!k6;z2uDB5YyVrh9r)Km2*<6FLC0YcG07m7OcO;nW}A7 z(VYARjR`%R*>rxv6hWo_67kw=J*!|ZS){c-Xg{iZZTbF?K3tc5p^5>_rZMTRyoAy? zepJqPLt$_9MrlI8(_95jizBB$w$6eQzP;A#RvyDpIZA;KxA1mMBi676OkxjPYddS>xaH}`=#jO1WdMObrRjb940Nbj^Hgpq;w*FJ!+qu3 zEyM#WTyZa=l||0pjMD=o+QCbe8`yyeMHDBNrUr+s*@&~~-Efv35e!@SnuQjQF*ZB` z#EYYA+?T0lAdV@h>a}>!sL$rSe^4Pd{n*@X44c|dh!EPiy|7ijI^CTr{i43vTde|E zIfu8Itx00i%;>E5ARZ2V=658jWC*&i{kG=#e%BaBe1>!m?9fZ{03NLsW09D`xh!3> zKhzz61WfVYsQQMS{lZMeG~8<=tczDt-z7!Nva^}l8I$;RK@NS zQLA;AuR{q9mKm&yzcWvn7m&5N@{;GgGHFO{vssVSHna~KfT4x-cjRf3xI43vS23i> zc#)q)v{;72c*aWd%+K35kk8fYDl_FAdDwy-?!R*b#nxkze(30WORq={CfDiFB6W4; z;KO^#(7zfYpLtbSq)B=W<^Vhn&~bFuWqmx#_m-QL^&%dzeHnuGy*HAp*rIVALBr*_LmtYDm6|w*ORH4F_t@= zsFzvDNfLmaWUAVTa6Z?&&t|rF!FhN8+4iKzNniubnZY!{0EZ~odX!}#9luAbfJ$y~ z=ysvLe{9;>M%)4|dPj%P(%G?h!H{>i0Ajgtt-NHn*3jD42E}G?VrWWsEV}3w<{wx4 z@RtF;acgGb{^kC=Z~-z6GUwR@nNzWP#}qTrGe&X0-xRpe)VetPQdsWGmbe>7wjzcP z=vtJ|`uTmsGd!G}jMT*;%3zR>g6huKjuQP{g;UaU0<{i$E37FB4Uy#_^9mSy>*`m6 z`kdak<`Uh3Gqu}U%JM~w#m{DoNQ=XE>wJS)%Q&!FWqNOAVihg)dkLcozIKdJ!_`-G zr3&YjK#pnfMAyoPc3_n>#h416PwxGaFJ%j)ebZDPULx!*&_u2%1W^Ti?E>R8mvhg; zN*)27OyF(fS@1C%_=JCaLZd{J}i?h$ul^Ili>*llN#g6mndJIRMP~ zaKLcFyXpj^7+vE>fOWLEpP8+=j9i~Sg-g+efdHkEQfenWS0}G`ofIYbnV1>1LL+kI zuFf9-9I!sXnc9XLp=6XP9q`8)&Ub}7!%aCHRnHV?YJ>YlbSv;Oo>MZh(N5HkT$~`vO(Zkc2hc~rG@&QWfQ>viXyujXx0($Ic z9gNWs-*7-y35Xch(^^@OLw2GaB%W)AF3H^OmJek#Zy4O5X6>WFM|2- z{ZUQwNDPP~LrBbd)mJk|8lVaNLOacOvtKUg@rh%G73vk^>64hNMa%_!iJbp0^FWNAi1a6~+OIkv0VkT9=jx<8)c;-| zRg7G4=kLk(t>vqSYoiC2m}?y}ZN%O3BVYv!32@R*n|MnV_Xxm3RY02fUMqKS@O7~y z+!$nZcI5R4@aB935E&xf3Qt)C8xHG(&k^`22wCM_h_sjd^T1=RNB76=2u+VxLX>}( zlnbU`;aTx-lBazca*wQ1?`yw>f~~+)oCqXqWwMtNf;W;x4<--L zPO#)Evc%@X=x>Fi_IGkQtvJBDMOL@RfG-LkkcLaX(e)KFwh^=MZGY;^is-ug^c?XB zK>9oM)8M}q;onNHWU#$fawqu#S?4s9bNBus1-!m;Z!KAM(mrrqafWyBk@4&S4-upJ zZ_9<{Uy|@I2bJKlIJN+?p%?p^N{gG4S{M_djIwACt{@Yt$BS8TH)t$_7IF zCgxul6Mtuq{hcu}Oy3+f%3FH}z39;j0&*th0!4PT3N#JV8vk9B>|E{u9C~@*BBz*PkJur!VW(YgL8K!lZyzi*qMLB#l@{LnJQXx z-lacd`lKb>J6$F+<&@TpOhZF>kY9frU;DStS;nU-aDTd>*wWVE{Yj}h4L&dW;%uOz z9+p>K+0YQB2eKNk#F)A$bfHOHkS=z#8z5vtzAMb&@<)IDOoCobfQCYl(|Hj)pOX3m zp2U=LQwH0*w;C_@{o5Sa`{dN!j{PlPJ!{o$2pCQ>+rEthegya(JP_e5hZXBcZ7uE0 zs!IQ~PkN)4Swxs_6Qyk~lWoC^LCI%nggdSozW`sm%M#+3R)EcqJet~7-7{M`BTX~S0C}z3TQ+QYT)BeM6Qc_Ml&-`y0BUSLFadc*+wm=?*?<~8Nv-GDHiLs zscSMh`D>Xc6pBaT1d6;A0Cai&0yp@9^57wC(#FKD9G~ayH{N^9XsO$&M7f^%=I8I! zwdIDge{N4S(-&!f3f3Z_xg~1^`)S#DrNjr{a|oybF!M(ulg zJkx~M+7zdyjRR%vH+{v8?zzt9|JL4j$2FC1Yhy(LMFgY?%+Q-4y+{!;gfb9A@5o4x z^j`z5_d0T6_bEVMyC=kF^y#B8ULek38 z-J)t*l9S^j^@t38@myC?K0GM;pZl`FTI2){_9WGmKhT6iBtZaC!U zzAxWJ`qCgtE%WF&mi%GlfHNN(mfKHnD*|5h$!;u=A@rbQ zWPh1ODOW3sG2F*;A>2~|qPDZ4(Uw(Rcw|{Tq|Psim?#_1X8I^mQ{%aToF1I=qdy)_ zU~CT&1InRPEgDNJEp4rzOk@W(`z)mR4HH??W)_;A$JK9TWpLQlm5!0Esg6q?OgC-?krr*{JETXW8+s6mLMj{6=|uqzU1BIm!LxG z+-=yj|Evb}hQ}~9sq%}tY??~6cwb_rqx_a=n#=;rQ4zRB zbZY9*5q2pX6)qblnZP)o+99>j%{o^8*xJc>n~*yy)Z&=LJqyHhN~!q0l<*aJ&(WSq zm6VVZeeL#<{i}h{WSmG$B|$zSzVNX>IP1^|r$6*LS*7k575@pH;9iLilE*WEhR(nTg<60n<CXj-!;F#)q z@)l71EDCR9OiOS#rRL0RmNhj5F_hDg!di|j|PN$jmp#bMaUnMV`Mz2W+pqT z@uDRkeuM<39OJ~z+ltTIfJ;J`nO+KPYVjJ;ead+Lc+iefK-=4sKS5toKPlX^Vovzn zxdaY(_9LyFOG;O6%tT;Ej~noI$gv_s%98B;m}$Wz_uW}j@%=jvLdrqPW5q+N{n>0h zMhYmjzmEL9k_W=kJ~xS(@3C&@Y>lGp!XCU_cu7Wyk*K-1Iew;OH=HUBGKid+G*SFq zuiip6o#p&24t4J~h65TG(Jo7oGPgHaie24ybiZ{^ok5_nRLj!iMnwT@O6s}mq<2(F zqKrOg(DA*BO(0Zy#cz)|jsTJT)tbSjXPJmfi6n=CefXG`(}jtyN7qf7E=IX|xpZ^E zrc2u>neNTaok$}$dajQ$ZMZ$M%I+$RZFnSs5XAc1EUma;(d~opWqcYT5(8@>4_4Ui9!!D?IBE|}xD8dEW!ipPL zeyD$G@w!gg6C$V@8hzj2u}uUb^|@45Lx9q9aHB@Hf4Z|!U`uzv+F5=(CFp3O(tcoP z!(isn$LWM^vkI_#4N-hZpd*GRypn1q&aKsy5W@G zr$NLgdHPyak2x@~*W6xnzB5@Eqx`6<*ZI+;v>bZlz|Ew$z$bJ1P)*|zk?L^1wyxS6 z+R)#v*tWo}>9asju&cycAN%9bQdpbMvgS8}?%Q7p`$TV;xC_(3^VSM^fyeY=?yE%&3qhHo z{Hsxy{#6E?yF)3+NeOVR7gcD>%!OK1-LwNdPAD@wl9!U!a@GM)=|8azxaj|!A^rQm zt){_Cy)(~W8O2}eW^wlqm>;Z{&AIV@JgjftS7A?fvybcxjRW&&ZdYd9)63@{hN|J? zw)5o`9{yh``@a$|Ij67oDPrMRvTbCo*X|ya3lrOcDdO7(n^W+)uUC!go--9nph7}I!4;-=E)#(=4 zKyH6}ec_qK4+d?d=gzSftvX1hpu7($D1Z{}>`1mvyoA#s%=?|gs5~}+uPJ-$- zJqb4Ckssd99V{1iEokT{4;UbelBu2bI?u4cSs)uG7#ekQHLc~C#-hfceswA>{sh69 zq(G(RB;%JxhD$z{j)v1=)L5=cWSya4vc*kCy>vS(`JPhK{O$NY*UR{7K%+UdCe8xN z$?4v(UG-Wwg~`P?^}gAi5gk>Imrk5(&(V=PE$4GZ(H-k9?eo|ka`<&qaHi>+Bvtlw z-K>bu1Q#85g7(JP7X_0As9_-|ElMAJ@YuLz)UWFp&_35!{N;OZ9shWZ=X^8?T1@ic zr-V@j5s&?wNyE7gZ+9Q9Y_pV$`%5^48Ki*bcaU^P=@tnVW-L+lwIhJxm|3iT*L(m| zy4LqN)@`8PK0KkcEpTgoT^gyzKm5^pWT)#DjHPd1c2my~eC;SLsz&$)du}VI1Jo?> zxE)Yy`bxrjNJ@&MJCP+Q%)LhGjnKdg;rkn3fR|y`ar6DXov$QMe;zQ_ff7rA-QnVP zA_?3AKGfGtyc`B{fP#PRqmlLS%n6W+hA2=Ta^0dW2eEFjp2!g3bEo~DuEYN~Jn)>~ zXFw+L0FusMN!Dfo0v(CM`^L2ufaZ6;D{|D3a(Yq@LhDOz`8*A|p$#>&7LsWBS)YAS zE^*y!-nCQ8tEYDBV<=DY?frXyDND-7^oH>I5Z|5+Qx4zI(U~i^_ONe@ySY+&c}t5$ zrZO8Evu;Q^Gbu+(OT`hRiWZBKaGGNL9y^q`VbsmJW;64wI4SI?A(ZmRlo;4*m2Zp(H*{Yea5f>bvbzYK`3oaN^PSI75G@wm^KY$yJCSM7 z|4soD%(!c6wRqX}3Ar>?ZP{B&N0|P#hhZ&Us^N zXjgx244g3%^juD-FdbkaJS}Grpl(9vSEP8z{iMmgOSzTEROzr0`6fS*YheEh! z$jNH>M-Q!-A13;^Q+yf664iEw(**pY4pmjEV4sQL@!4&kH&eAaW};BZN&H{glHOOZ21pOH_oVHx2{_3BdL(1)VvJFC#lheST~cGhb5g%7jjM@H1-Vh1Uam54 zBf@;{v(`*(6KMy$y_)pBCgn~>dQ%&F%BLUBI5W5n{W9B&D$f}aAn*n_z~@h7W|}&W ztb6a0slN)5;+B)kBVO-cD(&~U69I-slEVtFeE@SEM2d*k<*qfY=^HaZ=Rd{8_>Y=8 z7S+m)nSCV@;k9^Jkc*m0+Ak~Hs=xpyzjAB;7TGl86(_@l_6HH6U5*vYcT>LX2`Vno z-Z}``H$MbBd6@DWBG~^rm}_fn`1QLRqZMXT z;EF?^qATnV622H2_&0NaBvKcc!K0`=J(oD6xS~nCL?qHYXZ=3!J!p(eL`;Ckz#Weh zvLw2vf>_Ec=F{~re3m06-aAQA5Zb*M+J6dIPloIS#!H3>IdY9`Mtl(dIbh|+1Up}| z6nbs2@X$@Av}`A&STH-U#bGPssp|ECO7!)`=u7SAV?!I?*;TMjfyyA1U2b-{cZ=Oz zS?=ch(VbiB3xp+A@a4y0B&|40D_(Mq7I!%okG6vZ#3kv?$hPFnJqITO<>ZxxUifon zP1s3zNlccfxCX>_TM4SxJQS^Vg_y-R>u1770qNUEI%yhbP36@Y*h43le6B7EMJ0OC zx91>zrhTQ|mt>sMG*HJ=W7+r=`c-9dIzCl#fNC9ZHk7Am@5R3wA$+?(X%r&pu`kOw zT=>vg5t(#k_G4DOijJu^L1DfxyJKBa(;4tE3WvZuJ^u>C`FkVqvw$Ypg))$#h=3dP zYNVt=X3I)1bT(>S@#aag{>wqBwBk58TPh9I{GtE*e|!b|Yh7-Ai}|RML%2q4OQm)z z=O_z5zwYA-!o#wwAI=>Ca(V%@5x(-1HzOwG2xCrfkclYy9_z3Npn=25ntoDkh| zrjTk4P@{(p%`dMJi=rzf@+q$JRdkTS;yPM!WCN19JjT9zr^o%afsc0^=`hi>pwG4l z{EMchyO5XIe9j?Zy8F`OCKx+mcu=v=BC2T0tp80GSUg4u} zZ-$G9JzHI=aLZF@qo+y}Z7Wn4EA1*(J+rk9(NH)WSkB_X$sC{1P($Qax5@Ah^pmox z`l92xCv(wTBUz&Pla1_XOMf9Aa{wvmUchMXipV=8qq&8K1oON^|ku(x?H&r~~Vf-r%V7AGYWbixEG0{w^h zo%!Qvr2m4vrP9fu_A1)W_Fb~(ss>kKHyV?~{;JdWSckU!fvO#K%7PuPIJ;>D4FX?l zfMLN;Lea_o!>njxh!w5(+5##)n;Qo|5eIk_@MA1M0De5z_>Ftv1IT+CG=AH&h|4W# z1gaV)ZUjs?-8TkC(CKV{ z<;9$??I{vYt?YlsCuB2vZ*#AKalPb6Ur9)bN`E*-gm%;8!IU)WvC$&1-SwLbE(duV z-EB7L*7mCnPW#}DV04oI$SgWAlP~ze+lOREJjF>4m7acU9EDFqd9waOb{SUF7W{gS z%q1)q8o8+z6Iwg2)ugOSa&@^t)j!lZ)Ohx7eyrw@1cZECM;B`#8=CTS_KOkRs{b;- zbh1B6%(P3HsM(1MXfWT(S+qye0zVek778nqvR_Fs6#9FmV^d4S^+4sQ%C3`PLWFK+ z)Mhs~0e_F!-wMBT>$g_6c>l&}NXLi~53&0rybr}XNngBTRs35ER;NUK-VtK~h;`yM zc)54ZifF*TuKR_H)`SM2vW(ZGM5 z5#@L0qj-`LO7t}PZ6X7|^`4J{p1c8$q)E3`Kna`ocA5V+6Zu~|7uO3_D7&4$hats< z@E=XU{$nQK-<~#q0F1MyCI-AceazGU=KluJULd57*dzbL5LkbOYzFhLaC4q{U}j+m zg~+8J4rn8^n(y43xCxwBU@gj)!&7asA5g;*LMNT%Uye2HG2+eLV7sUtZ8x%88W!df zQwAPrQ&Zaj!YSVGN*nOY<4gyA9%W*WM}r^LI(j;3CmocMk$EgZPvQ^D+IkD5pgLod zCl?2Rq)dC)zm>MKT{9BzEfVahj?f#un5G;Zefti@IW)#_WR+?yD$`%EHib~>8+0EN zv?pK{(scL>T)}>+RUZcpjoh^p`c_Gla|JvpF*Bf1mOdoQfLxcnb-ARfyv3^d)5q09 z@J>+VyRvuv<$m9&5(TT7iU~fqrgg#9Y_6lrP;Y~8@7CddqcI$P(>5VsU z+1X7B94Dma&a`saCkPjGAXDB;ueF!My!j@{-*~)|74D?|>CKRD$Ye7;yBuY`*^Zdr zkZmAGh%8O9W^ z1TW~8KJSf|mS*pN=uvQ7lsrELyAi7~mbSZi`z*UX`qih!&~<<6yksP+c14g3+0$BbzW^JD_)gM$IB!@?Fber z?SSo&XW2-fvflPnr%c4XA;0Ow(570r6rL0pu!@@0Yp7||S_lpb8#LnD9s;epRQTRM zn6%D-Q@62|T(YFl1S)YKMLF50O*JP)jK1>77N_Y9dC)|N8>T9YTt4yOC z#$d!?m$RSzsM4(1+Vsh7`MUG?OwPzbtwir%pp$~a)@Pzel{`Mk6jVpyePky;IE~?h;88a)ysU3qeS=DB!@IeU8lgJQ-oj8H2pG-lK- zbB@^eZP(PByYzc8Ds6Z(1vmql)Lk28xrlQF1&~sXKnrA?@(GReeU!3UOPZpltiZu4 z6yL(pQC6|<_4Q}hXeVrwo<)009B*k21tj4{;td;vHSYzDyO=nbKG&%VQmG!g#yzpc zZ0R4B%s+JTeair@1iEMLftAeApFlTqAF;g5_I~9L%5QhLQIOnjoVlHYVZ#<96 zdzzY)UOSjN5A%5*T&G1La@GOyVbW)*Kw_+o$X1F99i4?vP^eJRp~L5{lAuk7XLsKF z1LX#a5W*AIuO!qU6L~JzWHp&8EZl1L$TwK#&^vd!o_e*WSUXi>kB2iO`pj^=_^h{6 zOHy#(bMY`MVMXSIR6OGBV~6p!&%Rp+MV{MjGi(j0gwYk~EJZ$a3>|LCQWxBFFO7G2 zp+6a{9PIE$LYOLI$t~pu0cHYXEMLp*7-EJrOt+_ATg*VX&QC;JY)7J7v&7- z4Xv|J#&yaL3k+%oi^MhxDyyElW{0heVnlmI?Z%asDp*v_B--+iYepDBHb*rb@NGQ>>^!BwK-`qK( z_{yMnvUcn}M&bAiuSu?z{L+1<<2-glkFKp|Q%|oV;UL{6WKx*%MI6PGPb<>mJ;p+L z@{af8r`AVPDpqSZ9%Uv-P*sXLqTM0L<0Ct_oROq~I?m6E4v4Ot(rIN55tW|hbkW@D zp;b9pFTd+{>v0b;UOv^&Rq)5xd0Zf-L{eF*{X!W`(}PrcG^C&bv#;(|tQ1RUL~BKN zHLTRsclzPzCi<{+Ivw6j3V>s>YC@TAqAPw6~@Xjr+V zy4VG%9nKPu#Mk_MAsC^07I;Y>p?He{q<~H&`ZS*G+U^2HGigphIZ;yJOyZtUom>QD z3GUp&q80M$Evl0YGp2Fqy& zr)zMEga6&Op!P%DSCTFXLY|+mI^YmUfAt6K+4pT8=8I?;M0P4GNYDgY7qybzyNyU& z97_)GwS|W1%!<`j;QN%wsu6uZ`Y zd}zScJuvvIjg|+R7d5PB*U^uEdhpBcfn37-m728qGJ)`!iG|%FnelOLPouKc-5JJ~ z1-5*RUC_Zap|N}Y%1BL$*q3u#pJOozjeC2PCpi9?%<4vz6(OgpN+!yvcnfTd>oPw& zdQQaC1eA^u11$j0)at6EMI1=njXKc;DisyXKSfsl-kb+-RZJi>11DXEF6JWe%I2M{ z>mHOx$HYaC#>eGAGT}9Ry97LS3%;_`d1hGzv5FdOc(aweUjUBKf|JGc70!Vx- z+y;s_f3D`^`8M41<5VSLU}H72)9>w}zt4>p4F%)E8{-s)*ID*zp1&_InYS`DgLnKlQzS#-YuCcg&7(OVlj^6(o+(Gj)wC|E;u4}OR?bv$-=thIC8y+On$1224n2)x^J%3Y zasOl%vov#OX3EXYc+n?X+<7VV|~6b>Z_v`KXswPsbl#6iso7v-1ZQmv)n&B(tVH*UA&KR@u?3VFi~e^VO!EXgSyX zve$i1XxB)a8W@~tChee*d;+e=L#9@lOt7c(?URFg_*GcyaJe}-+`7juYn57HkmSPj z2wL#<4?Bp+;cQT=nFga)H^N9&>sjjNF+bN#5ysQcWZ5<|wB?_mi~YIM{?#be2FVAn z7p3Fx97h=q6zM}=Hw94JJoQY^D9W#|W7gM7t3~W?ada&Nwaz4=Z1Q&l^s%1+F2shs z|92S?;T*t$cSXI`OjY5Mu5Et8?L*~0)uEnY@?$|Zv|1<`RQfc0@4grmohK&Ocsa&+U3TmCRKjy?89K~Jwu5vTitSSYuB_xS zyne+G?Kj4wwC8J8Ik45b_oT5&MlbT z#)bX^nH2rL^g90y9Bzcjw3eXm!cY@=4E7H4@62*m+0TnN_n6pkTy#=8V~_5=fr|62 zc&R$8&TrokXd?ue{TXb=pTx3f{)z9;K2h*K znu6K%9;%HEvx^@A3Z=^7+wWz<3LPB#qXi$h1I$byTXpZ;*-IU=*I<0Z@di?5wSw)C zb1x#i-KV`wp>0s3%44OLHg#ts`D`#Cxxm=DW=5-~l_O}#jt##d6C#n6r>t)tiUk~H znG7)UKWH$W{crtFW)v9`z5709jy5V+d!+FrDo0J1(-slS6qyn9Ze1@v@$<=Ll={6h z)h=Vti0>-wNXSUekvNlN7kfrf+Q`ZR(SOqy7fS_&7vQpI-kv|%sQ`n5)8ba%5f3e5B0KXqecLg z5Z=|o?c3(NM{nTcdX0O7PTlZe);~VkL&4wf;ek6^E9_xUZ~1+NPS@oW45vo&UwQ_f zevIN$wt^n(ypcN;Yp>8rd8eC|&|u{);DGFX^im1#y=&h}qc;#5iqegeLE6V>_i1TD zYP|sO{pR&wWeZNP|20kZbd65e=oAB|7&yhiDF#k4aEgIb44h)%6a%LiIK{vz22L?> zih)xMoMPY<1E&}`#lR^BPBCzbfl~~eV&LDwfUY`5Z3+Sst)5w-Y727f2%rUX#cJc> z;~d1E-G&i@yc5LV@7N}^x1R_oR-{YfwOJeS=EvL36|)E4Z^>%v+ul$5G}z$Js|qOo zaE~IKJojko?c6@=%c8WBI&I)ot;_HYl)|w%zxDUUp$l@&kip46J?JyS2=a}iUyZ)`E~nBk**(C&>_l^95^PGTUhShjQuwb*U;G} zT{nZ$x$GEK(#N+riicTy%X5J#2CUCcWUU7?ahgf2M_y%s^pE6s4VIi_6acamy10xe zjTs}y6S&D}Hp%xW8a5lTsu!R832178UWS%pNhe>6>97JN(7EY&Uwc{5R}wZrv*^Ud ze&{X500IoKhijgEC8^8-h%S*mj8mpn<!r z9HsU$BC;Y*+WOT_C^wYs2WNy5v!~SAD_Q&pP%b%*-DjNM5?W!UuCNRT7Yg8iaN9aOLx2I@7MNMS`aeuF`tPARQGT8HKR_GIl>h($ literal 0 HcmV?d00001 diff --git a/bluetoothSample/screenshots/SWITCH.jpeg b/bluetoothSample/screenshots/SWITCH.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cc3838867521b92fb7fc8c1eafbe423372276834 GIT binary patch literal 41389 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