同步0626未提交的资源文件、说明文件及蓝牙部分代码
authorSnickerSun <snickersun@163.com>
Wed, 3 Jul 2024 03:16:29 +0000 (11:16 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 3 Jul 2024 03:16:29 +0000 (11:16 +0800)
15 files changed:
.gitignore
auto_ota_readme.txt [new file with mode: 0644]
bt_ctkd_feature.txt [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/nativeapp/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/pymb.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon_inverse.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/pymb.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon_inverse.bin [new file with mode: 0644]
code/sdk/interim_binary/brandy/libs/media/evb_standard/libjs_audio_capturer.a [deleted file]
patch_0521_to_0626.txt [new file with mode: 0644]
tools/DebugKits_3.0.110.exe [new file with mode: 0644]

index 3e8bafa..0004a07 100644 (file)
@@ -17,3 +17,4 @@ tools/dial_converter_tool/dial_lzma/**
 tools/image_converter_tool/__pycache__/**
 tools/image_converter_tool/include/**
 tools/image_converter_tool/output/**
+code/sdk/interim_binary/brandy/libs/media/evb_standard/libjs_audio_capturer.a
diff --git a/auto_ota_readme.txt b/auto_ota_readme.txt
new file mode 100644 (file)
index 0000000..fe54f7d
--- /dev/null
@@ -0,0 +1,34 @@
+auto_ota说明:\r
+\r
+client: (升级主板专用)\r
+1、需要增加组件 'auto_ota'\r
+2、需要开启宏 SUPPORT_AUTO_OTA\r
+3、设计成客户可定制连续升级设备数量 AUTO_OTA_RECORD_DEV_MAX_NUM\r
+4、关键日志搜索 auto_ota/msg_center\r
+5、客户可定制扫描时长 AUTO_OTA_SCAN_WAIT_TIME \r
+6、客户可定制扫描最大个数 AUTO_OTA_INQUERY_DEV_NUM\r
+7、客户可定制自动化动作之间的时延 AUTO_OTA_OPRATE_DELAY_MS\r
+8、客户可定制acl链接的时延 AUTO_OTA_ACL_CONN_DELAY\r
+9、新增版本校验信息,从文件读取 /user/dst_ver.txt -- 客户需要把每次升级的版本号存入文件并推送到升级主板\r
+10、需要开启特性宏 SUPPORT_AUTO_OTA_SERVER (client/server均需要开启)\r
+11、增加容错,客户可定制等待spp连接超时时间,AUTO_OTA_SPP_RECONN_TIMEOUT\r
+12、需要开启CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1\r
+\r
+\r
+server: (客户正式版本)\r
+1、不需要增加组件 'auto_ota' (客户版本中默认不配置)\r
+2、不需要开启宏 SUPPORT_AUTO_OTA (客户版本中默认不配置)\r
+3、升级路径默认为 /user/update.fwpkg,确认客户代码 UPG_FILE_NAME这个枚举值是否与默认路径一致\r
+4、默认开启特性宏 SUPPORT_AUTO_OTA_SERVER(client/server均需要开启),对无需此特性客户手动关闭宏即可\r
+5、需要开启CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1\r
+6、客户需要开发:版本校验用于check是否升级,实现弱引用 msg_center_ota_upg_version_check/msg_center_ota_get_src_ver\r
+\r
+\r
+使用说明:\r
+1、升级主板使用AT^STACKINFO查看任务auto_ota是否存在,不存在需要检查版本是否正确\r
+2、升级主板的任务auto_ota自动运行进行扫描/ACL链接/SPP链接/升级文件trans/升级指令/记录已升级设备MAC/断开SPP/断开ACL/ ... 重复如上操作\r
+\r
+补丁特别说明:(各AE、补丁出口人特别注意!!!)\r
+因SDK制作,需要同时开启SUPPORT_AUTO_OTA/SUPPORT_AUTO_OTA_SERVER这两个宏,客户拿到补丁集成分两种情况\r
+1、需要自动升级的客户:手表版本应该只开启SUPPORT_AUTO_OTA_SERVER\r
+2、不需要自动升级的客户:这两个宏均不开启\r
diff --git a/bt_ctkd_feature.txt b/bt_ctkd_feature.txt
new file mode 100644 (file)
index 0000000..2b3b83e
--- /dev/null
@@ -0,0 +1,27 @@
+Æ»¹ûÊÖ»úÒ»¼üË«Á¬(°²×¿ÊÖ»úÁ¬½Ó£¬Çë¹Ø±ÕÒ»¼üË«Á¬¿ª¹Ø)\r
+ʹÄܺó£¬Á¬½ÓǰִÐÐ\r
+1¡¢µ÷ÓÃÒÔϽӿڣ¬ÅäÖÃBLE°²È«Á¬½Ó²ÎÊý\r
+errcode_t gap_ble_set_sec_param(gap_ble_sec_params_t *params);\r
+ATÃüÁ\r
+AT^BTTESTCMD=13 58 <bondable> <io_capability> <sc_enable 1:°²È«Á¬½Ó 0:·Ç°²È«Á¬½Ó> <sc_mode>\r
+AT^BTTESTCMD=13 58 1 3 1 2\r
+2¡¢µ÷ÓÃÒÔϽӿڣ¬´ò¿ªÒ»¼üË«Á¬¿ª¹Ø\r
+errcode_t gap_ble_set_ctkd_enable(bool ctkd_enable);\r
+ATÃüÁ\r
+AT^BTTESTCMD=13 61 <ctkd_enable 1:¿ªÆô 0:¹Ø±Õ>\r
+AT^BTTESTCMD=13 61 1\r
+\r
+3¡¢Æ»¹ûÊÖ»úapp·¢ÆðBLEÁ¬½ÓÅä¶Ôºó£¬»áͬʱÅä¶ÔÉÏBT£¬\r
+3-1¡¢Èç¹ûÊÖ±í¿ªÆôÁË×Ô¶¯»ØÁ¬£¬ÕâʱÊÖ±í»á×Ô¶¯»ØÁ¬BT£¬ÊÖ»úϵͳÀ¶ÑÀ½çÃæ£¬Ö»ÏÔʾһ¸öÊÖ±íÉ豸£¨BTºÍBLEºÏ³ÉÒ»¸öÉ豸£©\r
+3-2¡¢Èç¹ûÊÖ±íûÓпª×Ô¶¯»ØÁ¬£¬ÐèÒªÉϲãÓ¦ÓÃÊÊÅ䣬BTÅä¶Ô״̬Éϱ¨ºóµ÷ÓÃÏÂBT»ØÁ¬½Ó¿Ú£¬»ØÁ¬³É¹¦ºó£¬ÊÖ»úϵͳÀ¶ÑÀ½çÃæ£¬Ö»ÏÔʾһ¸öÊÖ±íÉ豸£¨BTºÍBLEºÏ³ÉÒ»¸öÉ豸£©\r
+\r
+3-2-1¡¢ÅäÖÃÊÇ·ñ×Ô¶¯»ØÁ¬£¨Ê¹ÄÜǰµ÷Óã©£º\r
+errcode_t bts_set_features(bts_feature_t *feature);\r
+ATÃüÁ\r
+AT^BTTESTCMD=1 32 <ÌØÐÔÅäÖà0:¿ªÆô×Ô¶¯»ØÁ¬ 1:¹Ø±Õ×Ô¶¯»ØÁ¬>\r
+AT^BTTESTCMD=1 32 0\r
+\r
+3-2-2¡¢BT»ØÁ¬½Ó¿Ú£º\r
+errcode_t gap_reconnect_media_device(const bd_addr_t *addr);\r
+ATÃüÁ\r
+AT^BTTESTCMD=1 34 <addr-´ó¶Ë>
\ No newline at end of file
index 9c7da57..4bdac91 100644 (file)
@@ -80,12 +80,15 @@ public:
     void SetAdvStartState(bool state);\r
     int ConnectRemoteDevice(const bd_addr_t *addr);\r
     bool ConnectRemoteCheck(const bd_addr_t *addr);\r
+    char* getWatchName(void);\r
+\r
 private:\r
     BluetoothModel();\r
     int16_t callerid{0};\r
     void SetUpListCase();\r
     void SetUpConnedDevicesList();\r
     bool FindNameByAddr(BluetoothCaseInfo &listInfo, BluetoothCaseInfo *caseInfo);\r
+    void InitBluetoothInfo(void);\r
     bool aclConnected{false};\r
     BluetoothCaseInfo tempMacValue{};\r
     bd_addr_t lastConnedAddr{};\r
@@ -101,6 +104,7 @@ private:
     bool tagReturnToDeviceListView{false};\r
     bool tagScanDeviceClicked{false};\r
     bool advStartState{false};\r
+    char watchName[BD_NAME_LEN] = { 0 };\r
 };\r
 \r
 #ifdef __cplusplus\r
index df0c441..d9142b0 100644 (file)
@@ -6,6 +6,7 @@
  */\r
 #include <cstdint>\r
 #include "BluetoothModel.h"\r
+#include "BluetoothWrapper.h"\r
 #include "BluetoothPresenter.h"\r
 #include "ConnectPhonePresenter.h"\r
 #include "BluetoothView.h"\r
 #include "alipay_feature.h"\r
 #endif\r
 #include "bts_a2dp_sink.h"\r
+#include "bts_feature.h"\r
 #include "bt_audio_hal_interface.h"\r
 #include "audio_manager_c_wrapper.h"\r
 #include "bts_avrcp_target.h"\r
 #include "msg_center_msg.h"\r
+#include "dfx_channel.h"\r
+#include "tcxo.h"\r
 #include "custom_runtime.h"\r
 namespace OHOS {\r
 \r
@@ -42,17 +46,16 @@ constexpr uint16_t BLUETOOTH_MAX_NUM = 20;
 osal_timer g_a2dp_stream_accept_timer = {nullptr, nullptr, 0, 0};\r
 #define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500\r
 AudioFormatConfig g_audio_format_config = {AUDIO_DEFAULT, 0, 0};\r
+static uint16_t g_sample_svr_handle = 0;\r
+static uint16_t g_sample_characteristic_handle = 0;\r
+static uint16_t g_diag_characteristic_handle = 0;\r
+constexpr uint16_t g_sample_adv_id = 2;\r
+static bd_addr_t g_bd_addr = { 0 };\r
 \r
 void BluetoothModel::SetBluetoothCalleridStatus(int16_t value)\r
 {\r
     callerid = value;\r
 }\r
-static bool Productfalg=false;\r
-\r
-// void BluetoothModel::SetProductfalg(bool falg)\r
-// {\r
-//     callerid = value;\r
-// }\r
 \r
 int BluetoothModel::GetBluetoothCalleridStatus(void)\r
 {\r
@@ -70,23 +73,69 @@ BluetoothModel *BluetoothModel::GetInstance(void)
     return &instance;\r
 }\r
 \r
+char* BluetoothModel::getWatchName(void)\r
+{\r
+    return watchName;\r
+}\r
+\r
+void BluetoothModel::InitBluetoothInfo(void)\r
+{\r
+    errcode_t ret;\r
+    unsigned char nameLen = BD_NAME_LEN;\r
+    memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
+    ret = bluetooth_get_local_name((unsigned char *)watchName, &nameLen);\r
+    // 为了实验室测试需要,客户需要自己修改\r
+    if ((nameLen == strlen("WatchDemo") + 1) && (strcmp("WatchDemo", watchName) == 0)) {\r
+        uint32_t currentUs = uapi_tcxo_get_us();\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "currentUs 0x%x", currentUs);\r
+        // 设置蓝牙名称\r
+        (void)sprintf_s(watchName, sizeof(watchName), "Watch%x", (currentUs & 0xFFFF));\r
+        ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_set_local_name %s ret = %u", watchName, ret);\r
+\r
+        //  设置蓝牙地址\r
+        bd_addr_t addr = {{0x0, 0x0, 0x33, 0x44, 0x55, 0x66} ,0};\r
+        addr.addr[0] = currentUs & 0xFF;\r
+        addr.addr[1] = (currentUs & 0XFF00) >> 8;\r
+        ret = bluetooth_set_local_addr(addr.addr, BD_ADDR_LEN);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_set_local_addr [0x%x:0x%x] ret = %u", addr.addr[0], addr.addr[1], ret);\r
+    } else {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "watchName: %s", watchName);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "nameLen: %u", nameLen);\r
+    }\r
+}\r
 void BluetoothModel::Init()\r
 {\r
-#if 0\r
-    bool ret = enable_bt_stack();\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %d", ret);\r
+#ifndef SUPPORT_AUTO_OTA\r
+    errcode_t ret;\r
+\r
+    // 设置自动回连,ios一键双连依赖此配置\r
+    bts_feature_t bts_feature = { 0 };\r
+    bts_feature.bt_auto_reconnect_closed = 0;\r
+    ret = bts_set_features(&bts_feature);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
 \r
+    ret = enable_bt_stack();\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %u", ret);\r
+\r
+    // 设置安全连接\r
+    gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 };\r
+    ret = gap_ble_set_sec_param(&sec_param);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret);\r
+\r
+    InitBluetoothInfo();\r
     BtInitCallBacks();\r
+    wrapper_ble_register();\r
 #ifdef SUPPORT_ALIPAY_SEC\r
     svr_alipay_bluetooth_init();\r
-#else\r
+#endif\r
     BtInitCallBacksEx();\r
     BtInitGatts();\r
-#endif\r
     BtInitSpp();\r
-#endif\r
+\r
     SetUpListCase();\r
     SetUpConnedDevicesList();\r
+#endif\r
 }\r
 \r
 void BluetoothModel::SetCaseListClear()\r
@@ -140,10 +189,9 @@ void BluetoothModel::SetScansCaseRssi(const bd_addr_t *bdAddr, int rssi)
     for (auto it = btScansDevicesList_.begin(); it != btScansDevicesList_.end(); it++) {\r
         if ((it->addr[0] == bdAddr->addr[0]) && (it->addr[1] == bdAddr->addr[1])\r
             && (it->addr[2] == bdAddr->addr[2]) && (it->addr[3] == bdAddr->addr[3])\r
-            && (it->addr[4] == bdAddr->addr[4]) && (it->addr[5] == bdAddr->addr[5])) \r
-            {\r
+            && (it->addr[4] == bdAddr->addr[4]) && (it->addr[5] == bdAddr->addr[5])) {\r
                 it->temp = rssi;\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btScansDevicesList_ rssi:%d deviceName:%s", it->temp, it->deviceName);\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "btScansDevicesList_ rssi:%d deviceName:%s", it->temp, it->deviceName);\r
         }\r
     }\r
 }\r
@@ -482,18 +530,18 @@ extern "C" {
 void BtGapReadRemoteRssiEventCallback(const bd_addr_t *bdAddr, int rssi, int status)\r
 {\r
     UNUSED(status);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapReadRemoteRssiEventCallback addr: %02x%02x%02x%02x%02x%02x",\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapReadRemoteRssiEventCallback addr: %02x%02x%02x%02x%02x%02x",\r
         bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
         bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
     BluetoothModel::GetInstance()->SetScansCaseRssi(bdAddr, rssi);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt BtGapReadRemoteRssiEventCallback SetSortCaseRssi: %d status: %d", rssi, status);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapReadRemoteRssiEventCallback SetSortCaseRssi: %d status: %d", rssi, status);\r
 }\r
 \r
 // 回调:发现状态变化上报/扫描结束\r
 void BtGapDiscoveryStateChangedCallback(int status)\r
 {\r
     UNUSED(status);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryStateChangedCallback %d", status);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryStateChangedCallback %d", status);\r
 }\r
 \r
 static void ChangeScanView()\r
@@ -534,12 +582,12 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
 \r
     unsigned char nameLen = BD_NAME_LEN;\r
     bool getNameRet = gap_get_device_name(&bdAddr, caseInfo.deviceName, &nameLen);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_discovery_result_callback getNameRet(bool): %d nameLen: %d name:%s",\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_discovery_result_callback getNameRet(bool): %d nameLen: %d name:%s",\r
                   getNameRet, nameLen, caseInfo.deviceName);\r
 \r
 \r
     if (nameLen == 0) { // 过滤未扫描到名字的设备\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nameLen == 0 return");\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "nameLen == 0 return");\r
         return;\r
     }\r
     // 去重操作\r
@@ -548,8 +596,7 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
         BluetoothModel::GetInstance()->AddCase(caseInfo); // 增加扫描设备信息\r
     }\r
     bool ret = gap_read_remote_rssi_value(&bdAddr); // 获取rssi\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_read_remote_rssi_value ret = %d", ret);\r
-\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_read_remote_rssi_value ret = %d", ret);\r
     BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
     if (bluetoothEarPhoneView == nullptr) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView nullptr");\r
@@ -570,7 +617,7 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
         } // 刷新\r
         bluetoothEarListView->GetScanUIList()->RefreshList();\r
     }\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryResultCallback end");\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryResultCallback end");\r
 }\r
 \r
 void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)\r
@@ -600,9 +647,9 @@ void BtGapPairConfirmedCallback(const bd_addr_t *bdAddr, int req_type, int numbe
 // 回调:扫描结果处理/发现结果上报\r
 void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr)\r
 {\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
-        //return;\r
+    if ((gap_get_device_class(bdAddr) & DEVICE_MAJOR_CLASS_PHONE) != 0) {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
+        return;\r
     }\r
 \r
     if (bdAddr == nullptr) {\r
@@ -795,12 +842,12 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned
 // 回调:ACL连接状态上报\r
 void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
 {\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
         bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
         bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
     if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
         return;\r
     }\r
     GraphicService::GetInstance()->PostGraphicEvent(\r
@@ -887,54 +934,86 @@ static void BleConnStateChangeCallback(unsigned short connId, bd_addr_t *addr, g
     if (GAP_BLE_STATE_DISCONNECTED == connState) { // restart ble adv when disconnected\r
         /* 通知msg_center,ble状态仍用bt状态,此处不区分 */\r
         SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
-        BleAdvStart();\r
     } else {\r
-        BluetoothModel::GetInstance()->SetAdvStartState(false);\r
         SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+        (void)memcpy_s(&g_bd_addr, sizeof(bd_addr_t), addr, sizeof(bd_addr_t));\r
     }\r
 }\r
 \r
 static void BleAdvStartCallback(uint8_t advId, adv_status_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStartCallback advId: %d, status:%d\n", advId, status);\r
-    BluetoothModel::GetInstance()->SetAdvStartState(true);\r
+    if (g_sample_adv_id == advId) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStartCallback advId: %d, status:%d\n", advId, status);\r
+        BluetoothModel::GetInstance()->SetAdvStartState(true);\r
+    }\r
 }\r
 \r
 static void BleAdvStopCallback(uint8_t advId, adv_status_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStopCallback advId: %d, status:%d\n", advId, status);\r
+    if (g_sample_adv_id == advId) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStopCallback advId: %d, status:%d\n", advId, status);\r
+        BluetoothModel::GetInstance()->SetAdvStartState(false);\r
+    }\r
+}\r
+\r
+static void BleAdvTerminateCallback(uint8_t advId, adv_status_t status)\r
+{\r
+    if (g_sample_adv_id == advId) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvTerminateCallback advId: %d, status:%d\n", advId, status);\r
+        BluetoothModel::GetInstance()->SetAdvStartState(false);\r
+        // 此处开广播是为了实验室测试需要,客户需要自己修改\r
+        BleAdvStart();\r
+    }\r
 }\r
 \r
 static void BtGattsServiceAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_t srvcHandle, errcode_t status)\r
 {\r
-    int ret;\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x",\r
-        status, serverId, srvcHandle);\r
-\r
     if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF0)) {\r
-        uint16_t id = 0x1FF1;\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x",\r
+            status, serverId, srvcHandle);\r
+        uint16_t sample_id = 0x1FF1;\r
+        uint16_t diag_id = 0x1FF2;\r
         gatts_add_chara_info_t character;\r
         uint16_t value = 0;\r
 \r
         memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t));\r
-        character.chara_uuid.uuid_len = sizeof(id);\r
-        memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&id, sizeof(id));\r
+        character.chara_uuid.uuid_len = sizeof(sample_id);\r
+        memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&sample_id, sizeof(sample_id));\r
         character.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE;\r
-        character.properties = GATT_CHARACTER_PROPERTY_BIT_WRITE;\r
+        character.properties = GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP;\r
+        character.value_len = (uint16_t)sizeof(value);\r
+        character.value = (uint8_t *)(&value);\r
+        int ret = gatts_add_characteristic(serverId, srvcHandle, &character);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_characteristic sample ret 0x%x", ret);\r
+\r
+        memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t));\r
+        character.chara_uuid.uuid_len = sizeof(diag_id);\r
+        memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&diag_id, sizeof(diag_id));\r
+        character.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ;\r
+        character.properties = GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_READ;\r
         character.value_len = (uint16_t)sizeof(value);\r
         character.value = (uint8_t *)(&value);\r
 \r
         ret = gatts_add_characteristic(serverId, srvcHandle, &character);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_characteristic ret 0x%x", ret);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_characteristic diag ret 0x%x", ret);\r
+\r
+        g_sample_svr_handle = srvcHandle;\r
     }\r
 }\r
 \r
 static void BtGattsCharacteristicAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_t srvcHandle, gatts_add_character_result_t *result, errcode_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x",\r
-        status, serverId, srvcHandle);\r
-\r
     if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF1)) {\r
+        g_sample_characteristic_handle = result->value_handle;\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x 0x%x",\r
+                      status, serverId, srvcHandle, g_sample_characteristic_handle);\r
+    }\r
+    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF2)) {\r
+        g_diag_characteristic_handle = result->value_handle;\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x 0x%x",\r
+                      status, serverId, srvcHandle, g_diag_characteristic_handle);\r
+    }\r
+    if (g_sample_characteristic_handle != 0 && g_diag_characteristic_handle !=0) {\r
         int ret = gatts_start_service(serverId, srvcHandle);\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_start_service ret 0x%x", ret);\r
     }\r
@@ -942,13 +1021,17 @@ static void BtGattsCharacteristicAddCallback(uint8_t serverId, bt_uuid_t *uuid,
 \r
 static void BtGattsDescriptorAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_t srvcHandle, uint16_t descriptorHandle, errcode_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsDescriptorAddCallback 0x%x 0x%x 0x%x 0x%x",\r
-        status, serverId, srvcHandle, descriptorHandle);\r
+    if (g_sample_svr_handle == srvcHandle) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsDescriptorAddCallback 0x%x 0x%x 0x%x 0x%x",\r
+            status, serverId, srvcHandle, descriptorHandle);\r
+    }\r
 }\r
 \r
 static void BtGattsServiceStartCallback(uint8_t serverId, uint16_t srvcHandle, errcode_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsServiceStartCallback 0x%x 0x%x 0x%x", status, serverId, srvcHandle);\r
+    if (g_sample_svr_handle == srvcHandle) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsServiceStartCallback 0x%x 0x%x 0x%x", status, serverId, srvcHandle);\r
+    }\r
 }\r
 \r
 static void BtGattsServiceStopCallback(uint8_t serverId, uint16_t srvcHandle, errcode_t status)\r
@@ -968,9 +1051,38 @@ static void BtGattsRequestReadCallback(uint8_t serverId, uint16_t connId, gatts_
 \r
 static void BtGattsRequestWriteCallback(uint8_t serverId, uint16_t connId, gatts_req_write_cb_t *writeCbPara,  errcode_t status)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback");\r
+    if (g_sample_characteristic_handle == writeCbPara->handle) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback");\r
+        if (writeCbPara->length == 9) {\r
+            uint8_t ctkd[] = {'o', 'p', 'e', 'n', ' ', 'c', 't', 'k', 'd'};\r
+            if (memcmp(ctkd, writeCbPara->value, writeCbPara->length) == 0) {\r
+                WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "enable ctkd");\r
+                // 一键双连使能(依赖安全连接参数配置)\r
+                errcode_t ret = gap_ble_set_ctkd_enable(true);\r
+                WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_enable ret = %u", ret);\r
+\r
+                // 发起ble配对\r
+                ret = gap_ble_pair_remote_device(&g_bd_addr);\r
+                WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_pair_remote_device ret = %u ", ret);\r
+            }\r
+        } else if (writeCbPara->length == 10) {\r
+            uint8_t ctkd[] = {'c', 'l', 'o', 's', 'e', ' ', 'c', 't', 'k', 'd'};\r
+            if (memcmp(ctkd, writeCbPara->value, writeCbPara->length) == 0) {\r
+                // 一键双连去使能\r
+                errcode_t ret = gap_ble_set_ctkd_enable(false);\r
+                WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_disable ret = %u", ret);\r
+            }\r
+        }\r
+    } else if (g_diag_characteristic_handle == writeCbPara->handle) {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "diag_gatt_write_req_cbk");\r
+        diag_gatt_write_req_cbk(serverId, connId, writeCbPara, status);\r
+    }\r
 }\r
 \r
+static void BtGattsMtuChangedCallback(uint8_t serverId, uint16_t connId, uint16_t mtuSize, errcode_t status)\r
+{\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsMtuChangedCallback connId = %u mtuSize = %u", connId, mtuSize);\r
+}\r
 /* 与设备建立A2DP连接 */\r
 static int wstp_a2dp_snk_connect(const bd_addr_t *bd_addr)\r
 {\r
@@ -1171,7 +1283,8 @@ void BtInitCallBacksEx()
     g_gapBleCallbacks.conn_state_change_cb = BleConnStateChangeCallback;\r
     g_gapBleCallbacks.start_adv_cb = BleAdvStartCallback;\r
     g_gapBleCallbacks.stop_adv_cb = BleAdvStopCallback;\r
-    gap_ble_register_callbacks(&g_gapBleCallbacks);\r
+    g_gapBleCallbacks.terminate_adv_cb = BleAdvTerminateCallback;\r
+    wrapper_gap_ble_register_callbacks(&g_gapBleCallbacks);\r
 \r
     g_btGattsCallbacks.add_service_cb = BtGattsServiceAddCallback;\r
     g_btGattsCallbacks.add_characteristic_cb = BtGattsCharacteristicAddCallback;\r
@@ -1181,8 +1294,8 @@ void BtInitCallBacksEx()
     g_btGattsCallbacks.delete_service_cb = BtGattsServiceDeleteCallback;\r
     g_btGattsCallbacks.read_request_cb = BtGattsRequestReadCallback;\r
     g_btGattsCallbacks.write_request_cb = BtGattsRequestWriteCallback;\r
-    g_btGattsCallbacks.mtu_changed_cb = nullptr;\r
-    gatts_register_callbacks(&g_btGattsCallbacks);\r
+    g_btGattsCallbacks.mtu_changed_cb = BtGattsMtuChangedCallback;\r
+    wrapper_gatts_register_callbacks(&g_btGattsCallbacks);\r
 }\r
 \r
 void BtInitGatts(void)\r
@@ -1195,13 +1308,15 @@ void BtInitGatts(void)
 \r
     uuid.uuid_len = sizeof(ser_id);\r
     memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&ser_id, sizeof(ser_id));\r
-    ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+    ret = wrapper_gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x", ret, serverId);\r
 \r
     uuid.uuid_len = sizeof(id);\r
     memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id));\r
-    ret = gatts_add_service(serverId, &uuid, true);\r
+    ret = wrapper_gatts_add_service(serverId, &uuid, true);\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
+\r
+    wrapper_gatts_service_start();\r
 }\r
 \r
 static uint8_t Char2Num(int8_t c)\r
@@ -1306,7 +1421,7 @@ void BtInitSpp(void)
 \r
 void BleAdvStart(void)\r
 {\r
-    int advId = 1;\r
+    int advId = g_sample_adv_id;\r
     if (BluetoothModel::GetInstance()->GetAdvStartState()) {\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStart already started");\r
         gap_ble_stop_adv(advId);\r
@@ -1314,8 +1429,8 @@ void BleAdvStart(void)
     }\r
     gap_ble_adv_params_t adv_para;\r
     memset_s(&adv_para, sizeof(gap_ble_adv_params_t), 0, sizeof(gap_ble_adv_params_t));\r
-    adv_para.min_interval = 140;//0x30;\r
-    adv_para.max_interval = 160;//0x60;\r
+    adv_para.min_interval = 0x30;//140;//0x30;\r
+    adv_para.max_interval = 0x60;//160;//0x60;\r
     adv_para.adv_type = GAP_BLE_ADV_CONN_SCAN_UNDIR;\r
     adv_para.channel_map = 0x7;\r
     adv_para.duration = 0;\r
index 029f614..ca0c7e5 100755 (executable)
@@ -133,7 +133,7 @@ void BluetoothModel::Init()
     BtInitCallBacksEx();\r
     BtInitGatts();\r
     BtInitSpp();\r
-\r
+    \r
     SetUpListCase();\r
     SetUpConnedDevicesList();\r
 #endif\r
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/pymb.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/pymb.bin
new file mode 100644 (file)
index 0000000..1dd9e3d
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa81b306865f9f4ea6a588080f7f31e1a99558d2ca4a072b43a6368298e9d69f
+size 87472
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon.bin
new file mode 100644 (file)
index 0000000..27c4fce
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ab073aa44a3d363774a2643cf80e4a6f3a3ca6b886e3c5f347c99bd45ecf0b9
+size 14376
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon_inverse.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/evb4/fs/user/res/regular_hexagon_inverse.bin
new file mode 100644 (file)
index 0000000..b3f69e8
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f239864317c61724189ae003c5d6109f3d4835f10ea7bcda578791fb7ebc7ee
+size 14376
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/pymb.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/pymb.bin
new file mode 100644 (file)
index 0000000..1dd9e3d
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa81b306865f9f4ea6a588080f7f31e1a99558d2ca4a072b43a6368298e9d69f
+size 87472
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon.bin
new file mode 100644 (file)
index 0000000..27c4fce
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ab073aa44a3d363774a2643cf80e4a6f3a3ca6b886e3c5f347c99bd45ecf0b9
+size 14376
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon_inverse.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/regular_hexagon_inverse.bin
new file mode 100644 (file)
index 0000000..b3f69e8
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f239864317c61724189ae003c5d6109f3d4835f10ea7bcda578791fb7ebc7ee
+size 14376
diff --git a/code/sdk/interim_binary/brandy/libs/media/evb_standard/libjs_audio_capturer.a b/code/sdk/interim_binary/brandy/libs/media/evb_standard/libjs_audio_capturer.a
deleted file mode 100644 (file)
index 696f729..0000000
Binary files a/code/sdk/interim_binary/brandy/libs/media/evb_standard/libjs_audio_capturer.a and /dev/null differ
diff --git a/patch_0521_to_0626.txt b/patch_0521_to_0626.txt
new file mode 100644 (file)
index 0000000..027a41a
--- /dev/null
@@ -0,0 +1,90 @@
+【补丁名称】patch_0521_to_0626\r
+【基础版本】b602 + 0521\r
+【修复问题】\r
+BT合入内容\r
+    1、一键双连合入,使用约束参考《一键双连.txt》\r
+    2、解决【手表发起hfp连接场景,手表发起PBAP连接失败】问题\r
+    3、解决去使能时,PBAP状态复位的问题\r
+    4、解决上电后由手表发起首次a2dp snk连接音乐无声问题\r
+    5、解决MMI扫描内存不足问题\r
+    6、解决pbap连接事件上报中的踩内存问题\r
+    7、解决连接拒绝过程中HCI野指针访问问题\r
+    8、A核增加消息流控\r
+    9、IPC消息增加retry机制\r
+    10、解决OTA升级后nv数据读写问题\r
+    12、合入ipc锁中断的优化,优化panic54问题\r
+    13、合入B核systick同步机制,喂狗机制,以及喂狗优先级,优化狗超时问题\r
+PLT合入内容\r
+    1、yaffs支持分区格式化\r
+    2、区分dma投票,i2c、spi、uart完善dma异常分支处理流程\r
+    3、修改uapi calendar timestampe接口\r
+    4、调整recovery链接部署、时钟提频、xip分频\r
+    5、解决pmu复位导致的底电流高\r
+    6、新增auto_ota组件(详见auto_ota_readme.txt)\r
+    7、msg_center支持gatt通道(默认分包大小500字节)\r
+GUI合入内容\r
+    1、支持足球菜单界面(包含明暗效果),当前均为默认图标(存放在附件res目录中)。如何配置应用的六边形图标:       \r
+      (1)native应用:application\wearable\nativeapp\nativeui\applist\include\ApplistModel.h文件,AppItem结构体的iconHexagon参数。\r
+      (2)JS应用:bigIconPath属性\r
+    2、修复UICrossView相关问题:\r
+      (1)开机时仅一个卡片,不能进入表盘\r
+      (2)UIMenuItem截图失败\r
+      (3)支持设置高斯模糊程度\r
+    3、表盘预览界面支持滚筒样式\r
+    4、优化UIRollerView缩放及惯性问题, 新增OnScrollListener\r
+    5、内存优化,解决surface指针异步操作及内存未对齐等问题,并支持内存泄漏检测\r
+    6、修复一级视频页面滑动不流畅问题\r
+    7、修复coverflow惯性概率失效问题\r
+    8、修复蜂窝动效细节问题\r
+    9、支持容器批量删除子控件\r
+    10、支持长文本来回滚动动效\r
+    11、Font Global 支持控件类型更改\r
+    12、新增 “listext + menu item” 用例\r
+    13、ArcLabel支持浮点运算,解决走秒和文字抖动问题\r
+    14、RawEvent增加Rotate\r
+    15、支持获取KeyActListener\r
+    16、 SliceTransition增加判空和动画打断处理。\r
+    17、SetArcTextAngle支持浮点。\r
+    18、 足球效果优化 。\r
+    19、ChangeSlice防止相同页面跳转。\r
+    20、解决滚动文字抖动闪烁,VAU报错height=0。\r
+    21、解决DialDigitalImgView未刷新以及小数精度问题。\r
+GPU合入内容\r
+    1、矢量绘制时,贝塞尔阈值分场景配置,地图场景配置为1.0, 其他场景配置为0.125\r
+AUDIO&MEDIA合入内容\r
+    1、优化反复快速起播音乐的sample代码逻辑,保证音乐的退出接口是同步的\r
+    2、解决通话和录音时,CODEC上电导致的pop音问题\r
+    3、时序调整将load aef镜像放到ao open的最后执行\r
+    4、增加中断发送失败计数和重发机制\r
+    5、新增设置以及获取3A算法参数的接口\r
+    6、修改小度语音的频率问题,以及跟sink音乐的策略\r
+    7、修改视频播放器,默认为同步模式\r
+OHOS合入内容\r
+    1、解决组件间消息内存泄露问题\r
+    2、支持list文本高度自适应\r
+    3、新增输入法编辑框组件\r
+    4、新增device JSI,支持JS应用获取屏幕信息(分辨率、形状等)\r
+    5、支持JS应用中英文切换\r
+    6、百度矢量地图问题修复\r
+    7、小度语音示例修改(代码参考jsapp)\r
+NATIVE-JS sample合入内容\r
+    1、解决组件间消息内存泄露问题(删除SAMGR_AllocRequestMsg调用)\r
+    2、支持足球菜单界面(包含明暗效果),当前均为默认图标。如何配置应用的六边形图标:       \r
+      (1)native应用:application\wearable\nativeapp\nativeui\applist\include\ApplistModel.h文件,AppItem结构体的iconHexagon参数。\r
+      (2)JS应用:bigIconPath属性\r
+    3、表盘选择页面支持滚筒效果\r
+    4、增加gatts多回调注册\r
+    5、增加ios一键双连示例\r
+工具合入内容(工具归档tools目录):\r
+    1、DebugKist增加3A算法参数调试\r
+\r
+【修改影响】NA\r
+【使用方法】\r
+    1、合入0521补丁\r
+    2、合入0626补丁\r
+【自测情况】\r
+    自验证范围:\r
+       全功能冒烟\r
+    自验证target:\r
+       Native-js、target3 rc版本\r
+【是否合入版本】根据测试结果确定\r
diff --git a/tools/DebugKits_3.0.110.exe b/tools/DebugKits_3.0.110.exe
new file mode 100644 (file)
index 0000000..77cf179
Binary files /dev/null and b/tools/DebugKits_3.0.110.exe differ