InitBluetoothInfo();\r
BtInitCallBacks();\r
wrapper_ble_register();\r
-#ifdef SUPPORT_ALIPAY_SEC\r
- svr_alipay_bluetooth_init();\r
-#endif\r
+\r
BtInitCallBacksEx();\r
BtInitGatts();\r
// BtInitSpp();\r
InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化\r
// PhoneServiceInit();\r
- gap_remove_all_pairs();\r
+ // gap_remove_all_pairs();\r
BtA2dpInit();\r
\r
/* 实验室测试需要,开机开广播 */\r
\r
List<BluetoothCaseInfo>& BluetoothModel::GetConnedDevicesCase()\r
{\r
+ // 确保已连接设备列表已经初始化\r
+ if (btConnedDevicesList_ == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetConnedDevicesCase: btConnedDevicesList_ is nullptr, calling SetUpConnedDevicesList");\r
+ SetUpConnedDevicesList();\r
+ }\r
+\r
+ // 如果仍然为空,返回一个静态空列表,防止野指针导致异常\r
+ if (btConnedDevicesList_ == nullptr) {\r
+ static List<BluetoothCaseInfo> emptyList;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetConnedDevicesCase: btConnedDevicesList_ still nullptr, return empty list");\r
+ return emptyList;\r
+ }\r
+\r
return *btConnedDevicesList_;\r
}\r
\r
return;
}
- // 获取最后连接的设备地址
- bd_addr_t* lastConnedAddr = btModel->GetLastConnedAddr();
- bool hasConnectedDevice = false;
-
- // 检查是否有已连接的设备
- if (lastConnedAddr != nullptr) {
- // 检查地址是否为全0(表示没有连接)
- bool isValidAddr = false;
- for (int i = 0; i < BD_ADDR_LEN; i++) {
- if (lastConnedAddr->addr[i] != 0) {
- isValidAddr = true;
- break;
- }
- }
- if (isValidAddr && bt_is_acl_connected(lastConnedAddr)) {
- hasConnectedDevice = true;
- }
- }
-
- // 获取扫描到的设备列表
+ // 获取已绑定设备列表(“我的设备”)和扫描到的附近设备列表
+ List<BluetoothCaseInfo>& connedDevices = btModel->GetConnedDevicesCase();
std::list<BluetoothCaseInfo>& scanDevices = btModel->GetCase();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scanDevices size=%d hasConnected=%d",
- scanDevices.size(), hasConnectedDevice);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BuildDisplayList: connedDevices=%d, scanDevices=%d",
+ connedDevices.Size(), scanDevices.size());
// 构建显示列表
uint16_t connectedCount = 0;
uint16_t nearbyCount = 0;
- // 1. 添加已连接设备分组(如果有已连接设备)
- if (hasConnectedDevice) {
+ // 1. “我的设备”分组:显示已绑定的音频设备列表(最多显示 MAX_CONNECTED_DEVICES 个)
+ if (!connedDevices.IsEmpty()) {
DeviceListItem headerItem;
headerItem.type = DeviceItemType::SECTION_HEADER_CONNECTED;
headerItem.isSelected = false;
displayList_.push_back(headerItem);
- // 直接添加已连接的设备(从 lastConnedAddr 获取,而不是从扫描列表)
- DeviceListItem connectedItem;
- connectedItem.type = DeviceItemType::DEVICE_CONNECTED;
- connectedItem.isSelected = false;
-
- // 复制已连接设备地址
- (void)memcpy_s(connectedItem.deviceInfo.addr, BD_ADDR_LEN,
- lastConnedAddr->addr, BD_ADDR_LEN);
-
- // 获取已连接设备名称
- char* connectedName = btModel->GetLastConnedDeviceName();
- if (connectedName != nullptr && strlen(connectedName) > 0) {
- (void)strcpy_s((char*)connectedItem.deviceInfo.deviceName, BD_NAME_LEN, connectedName);
- } else {
- // 如果没有名称,尝试从扫描列表或配对列表中查找
- bool foundName = btModel->FindNameFromList(&connectedItem.deviceInfo);
- if (!foundName) {
- // 使用 MAC 地址作为名称
- snprintf((char*)connectedItem.deviceInfo.deviceName, BD_NAME_LEN,
- "%02X:%02X:%02X:%02X:%02X:%02X",
- lastConnedAddr->addr[5], lastConnedAddr->addr[4],
- lastConnedAddr->addr[3], lastConnedAddr->addr[2],
- lastConnedAddr->addr[1], lastConnedAddr->addr[0]);
- }
+ // 遍历已绑定设备列表,最多添加 MAX_CONNECTED_DEVICES 个
+ ListNode<BluetoothCaseInfo>* node = connedDevices.Begin();
+ while (node != connedDevices.End() && connectedCount < MAX_CONNECTED_DEVICES) {
+ DeviceListItem item;
+ item.type = DeviceItemType::DEVICE_CONNECTED;
+ item.deviceInfo = node->data_;
+ item.isSelected = false;
+ displayList_.push_back(item);
+ connectedCount++;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Added my device: %s", item.deviceInfo.deviceName);
+ node = node->next_;
}
-
- displayList_.push_back(connectedItem);
- connectedCount = 1;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Added connected device: %s", connectedItem.deviceInfo.deviceName);
}
// 2. 添加附近设备分组
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Setting SECTION_HEADER_NEARBY");
item->SetSectionHeader("附近的设备");
break;
- case DeviceItemType::DEVICE_CONNECTED:
+ case DeviceItemType::DEVICE_CONNECTED: {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Setting DEVICE_CONNECTED: %s", it->deviceInfo.deviceName);
- item->SetDeviceInfo(it->deviceInfo, true);
+ // 仅对当前实际已连接的设备显示橙色小圆点
+ bool isConnectedNow = bt_is_acl_connected(reinterpret_cast<const bd_addr_t*>(it->deviceInfo.addr));
+ item->SetDeviceInfo(it->deviceInfo, isConnectedNow);
item->SetSelected(index == selectedIndex_);
break;
+ }
case DeviceItemType::DEVICE_NEARBY:
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Setting DEVICE_NEARBY: %s", it->deviceInfo.deviceName);
item->SetDeviceInfo(it->deviceInfo, false);