修改蓝牙管理类
authorliangzhenying <867174124@qq.com>
Wed, 24 Dec 2025 07:44:47 +0000 (15:44 +0800)
committerliangzhenying <867174124@qq.com>
Wed, 24 Dec 2025 07:44:47 +0000 (15:44 +0800)
24 files changed:
DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCBleManager.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/project.pbxproj
DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme [new file with mode: 0644]
ShenYin/ShenYin.xcodeproj/project.pbxproj
ShenYin/ShenYin/JoySdk/JoyBleManager.swift
ShenYin/ShenYin/JoySdk/JoySdkManager.swift
ShenYin/ShenYin/Launch/BleManager.swift [deleted file]
ShenYin/ShenYin/Ota/OtaManager.swift
ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC1.swift [deleted file]
ShenYin/ShenYin/UI/Home/Device/HomeDeviceCell.swift
ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift
ShenYin/ShenYin/UI/Home/Dialog/DialogTranlateVC.swift
ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift
ShenYin/ShenYin/UI/Home/Root/CurrentDeviceView.swift
ShenYin/ShenYin/UI/Home/Root/HomeFunctionView.swift
ShenYin/ShenYin/UI/Home/Root/HomeHeadView.swift
ShenYin/ShenYin/UI/Home/Scan/BleScanVC.swift
ShenYin/ShenYin/UI/Home/Scan/DeviceVM.swift
ShenYin/ShenYin/UI/Mine/Device/DeviceInfoVC.swift
ShenYin/ShenYin/UI/Mine/Update/UpdateVC.swift
ShenYin/ShenYin/UI/Mode/FindVC.swift
ShenYin/ShenYin/UI/Mode/ModeEffectsView.swift
ShenYin/ShenYin/UI/Mode/ModeVC.swift
ShenYin/ShenYin/UI/common/pop/ConnectPopView.swift

index 48bd20b..b028548 100644 (file)
@@ -35,7 +35,7 @@ public class DCBleManager{
         full.append(data)
         full.addCrc()
         if let connectPeripheral = connectPeripheral, let writeCha = writeCha {
-//            DCLogger.debug("发",writeCha.uuid.uuidString,full.joined())
+            DCLogger.debug("发",writeCha.uuid.uuidString,full.joined())
             connectPeripheral.writeValue(full, for: writeCha, type:.withoutResponse)
         }
     }
@@ -77,7 +77,7 @@ public extension DCBleManager{
     }
     
     func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
-//        DCLogger.debug("收 ",characteristic.uuid,characteristic.value?.joined() ?? "")
+        DCLogger.debug("收 ",characteristic.uuid,characteristic.value?.joined() ?? "")
         guard let data = characteristic.value else { return  }
         if data.count > 4 && data[0] == 0xBA {
             if let sender = BleSender.answer(data) {
index 3e37ec9..71f1cf7 100644 (file)
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
diff --git a/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme
new file mode 100644 (file)
index 0000000..08ce773
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1640"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES"
+      buildArchitectures = "Automatic">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "3F3F01E22ED451920038A1C8"
+               BuildableName = "Example.app"
+               BlueprintName = "Example"
+               ReferencedContainer = "container:Example.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "3F3F01E22ED451920038A1C8"
+            BuildableName = "Example.app"
+            BlueprintName = "Example"
+            ReferencedContainer = "container:Example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "3F3F01E22ED451920038A1C8"
+            BuildableName = "Example.app"
+            BlueprintName = "Example"
+            ReferencedContainer = "container:Example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
index ac87ccd..1ea9a02 100644 (file)
                                CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 1100;
+                               CURRENT_PROJECT_VERSION = 1002;
                                DEVELOPMENT_TEAM = G23X75CJ67;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                );
-                               MARKETING_VERSION = 1.0.1;
+                               MARKETING_VERSION = 1.0.2;
                                PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.app;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                PROVISIONING_PROFILE_SPECIFIER = "";
                                CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 1100;
+                               CURRENT_PROJECT_VERSION = 1002;
                                DEVELOPMENT_TEAM = G23X75CJ67;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                );
-                               MARKETING_VERSION = 1.0.1;
+                               MARKETING_VERSION = 1.0.2;
                                PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.app;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                PROVISIONING_PROFILE_SPECIFIER = "";
index 971d7c7..5bed6f5 100644 (file)
-////
-////  JotBleManager.swift
-////  ShenYin
-////
-////  Created by liangshi on 2025/12/23.
-////
 //
-//public class JoyBleManager  {
-//    public static let shared = JoyBleManager()
-//    private var connectPeripheral: CBPeripheral?
-//    private var writeCha: CBCharacteristic?
-//}
-//extension JoyBleManager{
-//    static func getMac(_ dict:[String:Any])->String?{
-//        if let advMsd = dict[CBAdvertisementDataManufacturerDataKey] as? Data {
-//            if (advMsd.count >= 13) {
-//                let mac = advMsd[7...12];
-//                return mac.map { String($0, radix: 16).padLeft(toLength: 2, withPad: "0") }.joined(separator: ":").uppercased()
-//            } else {
-//                return nil
+//  Untitled.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/28.
+//
+
+import UIKit
+import CoreBluetooth
+import AVFAudio
+
+class DCPeripheral{
+    var device:CBPeripheral!
+    var mac = ""
+    init(device: CBPeripheral!, mac: String = "") {
+        self.device = device
+        self.mac = mac
+    }
+}
+
+class JoyBleManager: NSObject {
+    var discoverDeviceCallback: (([DCPeripheral]) -> Void)?
+    var didConnectDeviceCallback: ((DCPeripheral) -> Void)?
+    var conetedFailureCallback: ((DCPeripheral) -> Void)?
+    
+    private var centralManager: CBCentralManager!
+    var devices: [DCPeripheral] = []
+    var connectPeripheral: DCPeripheral?
+    static let shared = JoyBleManager()
+    var isConnetd:Bool = false
+    
+    private override init() {
+        super.init()
+        centralManager = CBCentralManager(delegate: self, queue: nil)
+    }
+}
+extension JoyBleManager:CBCentralManagerDelegate{
+    func centralManagerDidUpdateState(_ central: CBCentralManager) {
+        Logger.debug("蓝牙状态",central.state.rawValue)
+        switch central.state {
+        case.unknown:
+            break
+        case.resetting:
+            break
+        case.unsupported:
+            break
+        case.unauthorized:
+            break
+        case.poweredOff:
+            self.isConnetd = false
+            NotificationManager.post(type: .deviceValidChange, objtect: nil)
+            break
+        case.poweredOn:
+//            startScanDevice()
+            checkConectState()
+            break
+        @unknown default:
+            break
+        }
+        OtaMananger.shared.otaManager.centralManagerDidUpdateState(central)
+    }
+    
+    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
+        if devices.map({ $0.device }).contains(peripheral) {
+            return
+        }
+        
+        //            DB209A55-DD0E-5031-29FA-40D734C34971
+        //            "edr:21140DE4C3D9"
+        //            "ble:21140D2CC682"
+//        if peripheral.identifier.uuidString != "DB209A55-DD0E-5031-29FA-40D734C34971" {
+//            return
+//        }
+        let mac = JoySdkManager.getMac(advertisementData) ?? ""
+        devices.append(DCPeripheral(device: peripheral,mac: mac))
+        Logger.debug(peripheral)
+        discoverDeviceCallback?(devices)
+    }
+    
+    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
+        stopScanDevice()
+        Logger.debug("蓝牙已连接 \(peripheral)")
+
+        peripheral.delegate = self
+        peripheral.discoverServices([CBUUID(string: JoySdkManager.serviceUUID),CBUUID(string: OtaMananger.otaServiceUUId)]);
+    }
+    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
+        Logger.debug("peripheral: %@ failed to connect", peripheral)
+        conetedFailureCallback?(connectPeripheral!)
+    }
+    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
+        Logger.debug("蓝牙已断开 \(peripheral)")
+        self.isConnetd = false
+        NotificationManager.post(type: .deviceValidChange, objtect: nil)
+        OtaMananger.shared.otaManager.centralManager(central, didDisconnectPeripheral: peripheral, error: error)
+        checkConectState()
+    }
+}
+
+extension JoyBleManager: CBPeripheralDelegate {
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
+        Logger.debug("发现服务成功")
+        for service in peripheral.services! {
+            Logger.debug("peripheral service: %@", service)
+            peripheral.discoverCharacteristics(nil, for: service)
+        }
+        
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
+        if (service.uuid.uuidString == JoySdkManager.serviceUUID) {
+            JoySdkManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
+        }
+        else if service.uuid.uuidString == OtaMananger.otaServiceUUId{
+            OtaMananger.shared.otaManager.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
+        }
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: (any Error)?) {
+        if (characteristic.isNotifying == true && characteristic.service?.uuid.uuidString == JoySdkManager.serviceUUID && characteristic.uuid.uuidString == JoySdkManager.notifyUUID) {
+            Logger.debug("特征使能成功")
+            JoySdkManager.shared.bleConnected()
+        }
+        if OtaMananger.isOtadata(characteristic){
+            OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateNotificationStateFor: characteristic, error: error)
+        }
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
+//        Logger.debug("收到数据 ===uUId ",characteristic.uuid)
+        if OtaMananger.isOtadata(characteristic){
+            if let _ = characteristic.value,error == nil {
+                OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateValueFor: characteristic)
+            }
+            else{
+                Logger.debug("ota 收到数据 ===\(characteristic.uuid)","无数据")
+            }
+        }
+        else {
+            //MARK: 需要配置传入数据
+            JoySdkManager.shared.receiveValue(characteristic)
+        }
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didModifyServices invalidatedServices: [CBService]) {
+        // Accessory's GATT database has updated. Refresh your local cache (if any)
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: (any Error)?) {
+        
+    }
+}
+
+extension JoyBleManager{
+    func startScanDevice() {
+//        centralManager.stopScan()
+        Logger.debug("扫描中...")
+        Logger.debug("蓝牙状态",centralManager.state.rawValue)
+        devices = []
+//        let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: kJoyGemAIServiceUUID)])
+//        Logger.debug("已连接设备",list)
+//        for item in list {
+//            if let mac = DeviceCache.shared.getMac(item.identifier.uuidString){
+//                devices.append(DCPeripheral(device: item,mac: mac))
 //            }
-//        } else {
-//            return nil
 //        }
-//    }
-//}
-////public extension JoyBleManager{
-////    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
-////        Logger.debug("蓝牙已连接 \(peripheral)")
-////        connectPeripheral = peripheral
-////    }
-////    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
-////        Logger.debug("peripheral: %@ failed to connect", peripheral)
-////    }
-////    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
-////        Logger.debug("蓝牙已断开 \(peripheral)")
-////    }
-////    
-//////    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
-//////        Logger.debug("发现服务成功")
-//////        for service in peripheral.services! {
-//////            Logger.debug("peripheral service: %@", service)
-//////            peripheral.discoverCharacteristics(nil, for: service)
-//////        }
-//////        
-//////    }
-//////    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
-//////        if let list = service.characteristics{
-//////            Logger.debug("发现特征",list)
-//////            for char in  list{
-//////                Logger.debug(char)
-//////                peripheral.setNotifyValue(true, for: char)
-//////                if char.uuid.uuidString == "AE03" {
-//////                    writeCha = char
-//////                    StarburstSdk.shared().bleConnected()
-//////                }
-//////            }
-//////        }
-//////    }
-//////    
-//////    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
-//////        //        Logger.debug("收 ",characteristic.uuid,characteristic.value?.joined() ?? "")
-//////        guard let data = characteristic.value else { return  }
-//////        if data.count > 4 && data[0] == 0xBA {
-//////            if let sender = BleSender.answer(data) {
-//////                sender.completion?(.response.code(.success).value(data))
-//////                if data[1] == 0x10,data[2] == 0x01{
-//////                    //音乐列表分包,解析的时候处理
-//////                }
-//////                else{
-//////                    sender.deinitTimer()
-//////                    sender.remove()
-//////                }
-//////                return
-//////            }
-//////            else if data[1] == 0x0D{
-//////                let subData = data.subdata(in: 2..<data.count - 3)
-//////                //Logger.debug("传给字节sdk",subData.joined())
-//////                StarburstSdk.shared().receiveBleData(subData)
-//////            }else{
-//////                receiveNoticeData(data)
-//////            }
-//////        }
-//////        else{
-//////            Logger.debug("收到异常数据!!!!!!!!!!!")
-//////        }
-//////    }
-////}
+        centralManager.scanForPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
+        discoverDeviceCallback?(devices)
+    }
+    
+    func stopScanDevice() {
+        centralManager.stopScan()
+    }
+    
+    func connectPeripheral(_ peripheral: DCPeripheral) {
+        connectPeripheral = peripheral
+        Logger.debug("连接中...")
+        centralManager.connect(peripheral.device, options: [CBConnectPeripheralOptionEnableTransportBridgingKey:true])
+    }
+    
+    func cancel() {
+        guard let peripheral = connectPeripheral else { return  }
+        self.isConnetd = false
+        NotificationManager.post(type: .deviceValidChange, objtect: nil)
+        centralManager.cancelPeripheralConnection(peripheral.device)
+        connectPeripheral = nil
+    }
+    func unbind(_ peripheral: DCPeripheral){
+        if let mac = connectPeripheral?.mac ,peripheral.mac == mac{
+            cancel()
+        }
+    }
+}
+
+extension JoyBleManager{
+    func joySdkSend(_ data: Data, with characteristic: CBCharacteristic) {
+        if let connectPeripheral = connectPeripheral{
+            connectPeripheral.device.writeValue(data, for: characteristic, type:.withoutResponse)
+        }
+    }
+}
+
+extension JoyBleManager{
+    func isConected(mac:String)->Bool{
+        guard let device = connectPeripheral else { return false }
+        if device.mac == mac {
+            return isConnetd
+        }
+        else{
+            return false
+        }
+    }
+    
+//    #连接有问题,应当获取设置里面已连接的设备
+    func connect(mac:String, finished:@escaping ((Bool) -> Void)){
+        JoyBleManager.shared.cancel()
+        JoyBleManager.shared.discoverDeviceCallback = { list in
+            if list.count <= 0 {
+                return
+            }
+            for item in list {
+                if item.mac == mac {
+                    JoyBleManager.shared.connectPeripheral(item)
+                    break
+                }
+            }
+        }
+        JoyBleManager.shared.didConnectDeviceCallback = { device in
+            finished(true)
+        }
+        JoyBleManager.shared.conetedFailureCallback = {  device in
+            finished(false)
+        }
+        JoyBleManager.shared.startScanDevice()
+    }
+
+    func checkSettingsConnected()->[CBPeripheral]{
+        let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)])
+        Logger.debug("已连接设备",list)
+        return list
+    }
+}
+
+extension JoyBleManager{
+    func checkConectState(){
+        guard let mac = connectPeripheral?.mac else {
+            return
+        }
+        if isConnetd {
+            return
+        }
+        connect(mac: mac) {result in
+        }
+        
+        DispatchQueue.main.asyncAfter(deadline:.now() + 10) {
+            self.checkConectState()
+        }
+    }
+}
index dcf455d..4a17dfe 100644 (file)
@@ -132,10 +132,10 @@ extension JoySdkManager : JoyGemAIManagerDelegate {
             Logger.debug(error)
         }
         
-        DeviceCache.saveLastConnected(mac: BleManager.shared.connectPeripheral!.mac)
-        DeviceCache.shared.add(BleManager.shared.connectPeripheral!.device.identifier.uuidString, mac: BleManager.shared.connectPeripheral!.mac)
-        BleManager.shared.isConnetd = true
-        BleManager.shared.didConnectDeviceCallback?(BleManager.shared.connectPeripheral!)
+        DeviceCache.saveLastConnected(mac: JoyBleManager.shared.connectPeripheral!.mac)
+        DeviceCache.shared.add(JoyBleManager.shared.connectPeripheral!.device.identifier.uuidString, mac: JoyBleManager.shared.connectPeripheral!.mac)
+        JoyBleManager.shared.isConnetd = true
+        JoyBleManager.shared.didConnectDeviceCallback?(JoyBleManager.shared.connectPeripheral!)
         NotificationManager.post(type: .deviceValidChange, objtect: nil)
         DeviceVM.updateOtaVersion()
     }
@@ -201,17 +201,23 @@ extension JoySdkManager : JoyGemAIManagerDelegate {
 extension JoySdkManager : JoyGemAIManagerDataSource {
     func joyGemSend(_ data: Data, with characteristic: CBCharacteristic) {
         //        print("发送",data.map { String($0) }.joined(separator: ""))
-        BleManager.shared.joySdkSend(data, with: characteristic)
+        JoyBleManager.shared.joySdkSend(data, with: characteristic)
     }
 }
 
 
 extension JoySdkManager{
     static func getMac(_ dict:[String:Any])->String?{
+        
         if let advMsd = dict[CBAdvertisementDataManufacturerDataKey] as? Data {
             if (advMsd.count >= 13) {
                 let mac = advMsd[7...12];
-                return mac.map { String($0, radix: 16).padLeft(toLength: 2, withPad: "0") }.joined(separator: ":").uppercased()
+                let text = mac.map { String($0, radix: 16).padLeft(toLength: 2, withPad: "0") }.joined(separator: ":").uppercased()
+                Logger.debug(dict)
+                Logger.debug(advMsd)
+                Logger.debug(mac.joined())
+                Logger.debug(text)
+                return text
             } else {
                 return nil
             }
diff --git a/ShenYin/ShenYin/Launch/BleManager.swift b/ShenYin/ShenYin/Launch/BleManager.swift
deleted file mode 100644 (file)
index ab82dd9..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-//
-//  Untitled.swift
-//  ShenYin
-//
-//  Created by liangshi on 2025/8/28.
-//
-
-import UIKit
-import CoreBluetooth
-import AVFAudio
-
-class DCPeripheral{
-    var device:CBPeripheral!
-    var mac = ""
-    init(device: CBPeripheral!, mac: String = "") {
-        self.device = device
-        self.mac = mac
-    }
-}
-
-class BleManager: NSObject {
-    var discoverDeviceCallback: (([DCPeripheral]) -> Void)?
-    var didConnectDeviceCallback: ((DCPeripheral) -> Void)?
-    var conetedFailureCallback: ((DCPeripheral) -> Void)?
-    
-    private var centralManager: CBCentralManager!
-    var devices: [DCPeripheral] = []
-    var connectPeripheral: DCPeripheral?
-    static let shared = BleManager()
-    var isConnetd:Bool = false
-    
-    private override init() {
-        super.init()
-        centralManager = CBCentralManager(delegate: self, queue: nil)
-    }
-}
-extension BleManager:CBCentralManagerDelegate{
-    func centralManagerDidUpdateState(_ central: CBCentralManager) {
-        Logger.debug("蓝牙状态",central.state.rawValue)
-        switch central.state {
-        case.unknown:
-            break
-        case.resetting:
-            break
-        case.unsupported:
-            break
-        case.unauthorized:
-            break
-        case.poweredOff:
-            self.isConnetd = false
-            NotificationManager.post(type: .deviceValidChange, objtect: nil)
-            break
-        case.poweredOn:
-//            startScanDevice()
-            checkConectState()
-            break
-        @unknown default:
-            break
-        }
-        OtaMananger.shared.otaManager.centralManagerDidUpdateState(central)
-    }
-    
-    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
-        if devices.map({ $0.device }).contains(peripheral) {
-            return
-        }
-        
-        //            DB209A55-DD0E-5031-29FA-40D734C34971
-        //            "edr:21140DE4C3D9"
-        //            "ble:21140D2CC682"
-//        if peripheral.identifier.uuidString != "DB209A55-DD0E-5031-29FA-40D734C34971" {
-//            return
-//        }
-        let mac = JoySdkManager.getMac(advertisementData) ?? ""
-        devices.append(DCPeripheral(device: peripheral,mac: mac))
-        Logger.debug(peripheral)
-        discoverDeviceCallback?(devices)
-    }
-    
-    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
-        stopScanDevice()
-        Logger.debug("蓝牙已连接 \(peripheral)")
-
-        peripheral.delegate = self
-        peripheral.discoverServices([CBUUID(string: JoySdkManager.serviceUUID),CBUUID(string: OtaMananger.otaServiceUUId)]);
-    }
-    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
-        Logger.debug("peripheral: %@ failed to connect", peripheral)
-        conetedFailureCallback?(connectPeripheral!)
-    }
-    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
-        Logger.debug("蓝牙已断开 \(peripheral)")
-        self.isConnetd = false
-        NotificationManager.post(type: .deviceValidChange, objtect: nil)
-        OtaMananger.shared.otaManager.centralManager(central, didDisconnectPeripheral: peripheral, error: error)
-        checkConectState()
-    }
-}
-
-extension BleManager: CBPeripheralDelegate {
-    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
-        Logger.debug("发现服务成功")
-        for service in peripheral.services! {
-            Logger.debug("peripheral service: %@", service)
-            peripheral.discoverCharacteristics(nil, for: service)
-        }
-        
-    }
-    
-    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
-        if (service.uuid.uuidString == JoySdkManager.serviceUUID) {
-            JoySdkManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
-        }
-        else if service.uuid.uuidString == OtaMananger.otaServiceUUId{
-            OtaMananger.shared.otaManager.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
-        }
-    }
-    
-    func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: (any Error)?) {
-        if (characteristic.isNotifying == true && characteristic.service?.uuid.uuidString == JoySdkManager.serviceUUID && characteristic.uuid.uuidString == JoySdkManager.notifyUUID) {
-            Logger.debug("特征使能成功")
-            JoySdkManager.shared.bleConnected()
-        }
-        if OtaMananger.isOtadata(characteristic){
-            OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateNotificationStateFor: characteristic, error: error)
-        }
-    }
-    
-    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
-//        Logger.debug("收到数据 ===uUId ",characteristic.uuid)
-        if OtaMananger.isOtadata(characteristic){
-            if let _ = characteristic.value,error == nil {
-                OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateValueFor: characteristic)
-            }
-            else{
-                Logger.debug("ota 收到数据 ===\(characteristic.uuid)","无数据")
-            }
-        }
-        else {
-            //MARK: 需要配置传入数据
-            JoySdkManager.shared.receiveValue(characteristic)
-        }
-    }
-    
-    func peripheral(_ peripheral: CBPeripheral, didModifyServices invalidatedServices: [CBService]) {
-        // Accessory's GATT database has updated. Refresh your local cache (if any)
-    }
-    
-    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: (any Error)?) {
-        
-    }
-}
-
-extension BleManager{
-    func startScanDevice() {
-//        centralManager.stopScan()
-        Logger.debug("扫描中...")
-        Logger.debug("蓝牙状态",centralManager.state.rawValue)
-        devices = []
-//        let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: kJoyGemAIServiceUUID)])
-//        Logger.debug("已连接设备",list)
-//        for item in list {
-//            if let mac = DeviceCache.shared.getMac(item.identifier.uuidString){
-//                devices.append(DCPeripheral(device: item,mac: mac))
-//            }
-//        }
-        centralManager.scanForPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
-        discoverDeviceCallback?(devices)
-    }
-    
-    func stopScanDevice() {
-        centralManager.stopScan()
-    }
-    
-    func connectPeripheral(_ peripheral: DCPeripheral) {
-        connectPeripheral = peripheral
-        Logger.debug("连接中...")
-        centralManager.connect(peripheral.device, options: [CBConnectPeripheralOptionEnableTransportBridgingKey:true])
-    }
-    
-    func cancel() {
-        guard let peripheral = connectPeripheral else { return  }
-        self.isConnetd = false
-        NotificationManager.post(type: .deviceValidChange, objtect: nil)
-        centralManager.cancelPeripheralConnection(peripheral.device)
-        connectPeripheral = nil
-    }
-    func unbind(_ peripheral: DCPeripheral){
-        if let mac = connectPeripheral?.mac ,peripheral.mac == mac{
-            cancel()
-        }
-    }
-}
-
-extension BleManager{
-    func joySdkSend(_ data: Data, with characteristic: CBCharacteristic) {
-        if let connectPeripheral = connectPeripheral{
-            connectPeripheral.device.writeValue(data, for: characteristic, type:.withoutResponse)
-        }
-    }
-}
-
-extension BleManager{
-    func isConected(mac:String)->Bool{
-        guard let device = connectPeripheral else { return false }
-        if device.mac == mac {
-            return isConnetd
-        }
-        else{
-            return false
-        }
-    }
-    
-//    #连接有问题,应当获取设置里面已连接的设备
-    func connect(mac:String, finished:@escaping ((Bool) -> Void)){
-        BleManager.shared.cancel()
-        BleManager.shared.discoverDeviceCallback = { list in
-            if list.count <= 0 {
-                return
-            }
-            for item in list {
-                if item.mac == mac {
-                    BleManager.shared.connectPeripheral(item)
-                    break
-                }
-            }
-        }
-        BleManager.shared.didConnectDeviceCallback = { device in
-            finished(true)
-        }
-        BleManager.shared.conetedFailureCallback = {  device in
-            finished(false)
-        }
-        BleManager.shared.startScanDevice()
-    }
-
-    func checkSettingsConnected()->[CBPeripheral]{
-        let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)])
-        Logger.debug("已连接设备",list)
-        return list
-    }
-}
-
-extension BleManager{
-    func checkConectState(){
-        guard let mac = connectPeripheral?.mac else {
-            return
-        }
-        if isConnetd {
-            return
-        }
-        connect(mac: mac) {result in
-        }
-        
-        DispatchQueue.main.asyncAfter(deadline:.now() + 10) {
-            self.checkConectState()
-        }
-    }
-}
index 5c1ef35..2b57aa7 100644 (file)
@@ -33,9 +33,9 @@ extension OtaMananger:JLBleAssistManagerOtaDelegate{
             ProgressHUDHelper.shared.hide()
             YLprogressHUD.showAutoHiden("升级成功".l10n)
             Logger.debug("升级成功")
-//            let mac = BleManager.shared.connectPeripheral?.mac ?? ""
-//            BleManager.shared.cancel()
-//            BleManager.shared.connect(mac: mac) { result in
+//            let mac = JoyBleManager.shared.connectPeripheral?.mac ?? ""
+//            JoyBleManager.shared.cancel()
+//            JoyBleManager.shared.connect(mac: mac) { result in
 //                
 //            }
         }
diff --git a/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC1.swift b/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC1.swift
deleted file mode 100644 (file)
index 03b6570..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-////
-////  Untitled.swift
-////  ShenYin
-////
-////  Created by liangshi on 2025/11/27.
-////
-//
-//import UIKit
-//import JoyGemAI
-//import AVFAudio
-//class Chinese2EnglishVC:BaseVC{
-//    let toolBar = RecordBar()
-//    let tableView = UITableView(frame: CGRectZero, style: .plain)
-//    let bg = UIImageView()
-//    var dataList:[(Chinese2EnglishCellModel,Int)] = []
-//    var recordFilePath : String?
-//    var startIndex = 0//记录开始录音的次数,用于区分返回的数据
-//    
-//    deinit {
-//        PcmSound.sharedInstance().stopAudioUnit()
-//        PcmSound.sharedInstance().cleanup()
-//    }
-//    
-//    override func setupViews() {
-//        navBar.title = "中英互译".l10n
-//        navBar.rightView.isHidden = false
-//        navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
-//        view.addSubview(tableView)
-//        view.addSubview(toolBar)
-//        view.addSubview(bg)
-//        
-//        toolBar.delegate = self
-//        toolBar.isChienseEnglish = true
-//        toolBar.leftItem.valueLabel.text = "左耳".l10n
-//        toolBar.rightItem.valueLabel.text = "右耳".l10n
-//        
-//        tableView.backgroundColor = .clear
-//        tableView.delegate = self
-//        tableView.dataSource = self
-//        tableView.estimatedRowHeight = 60
-//        tableView.separatorStyle = .none
-//        tableView.register(Chinese2EnglishCell.self, forCellReuseIdentifier: Chinese2EnglishCell.reuseID)
-//        
-//        bg.image = UIImage(named: "translate_bg")
-//        
-//        
-//    }
-//    override func setupLayout() {
-//        toolBar.snp.makeConstraints { make in
-//            make.width.centerX.equalToSuperview()
-//            make.height.equalTo(120)
-//            make.bottom.equalToSuperview().inset(20)
-//        }
-//        tableView.snp.makeConstraints { make in
-//            make.top.equalToSuperview().inset(80)
-//            make.left.right.equalToSuperview()
-//            make.bottom.equalTo(toolBar.snp.top)
-//        }
-//        bg.snp.makeConstraints { make in
-//            make.size.equalTo(90)
-//            make.center.equalTo(tableView)
-//        }
-//    }
-//    override func setupData() {
-//        JoyGemSIDeviceManager.shared().delegate = self
-//        
-//        PcmSound.sharedInstance().delegate = self;
-//        PcmSound.sharedInstance().setup(16000, withchannels: 1)
-//        //        do {
-//        //            try AVAudioSession.sharedInstance().setActive(true)
-//        //        } catch {
-//        //            print(error)
-//        //        }
-//        
-//        if TipsCache.needShow(type: .chinese2english) {
-//            RecordTipsView(type: .chinese2english).show()
-//        }
-//    }
-//    override func viewDidAppear(_ animated: Bool) {
-//        super.viewDidAppear(animated)
-//        navigationController?.fd_fullscreenPopGestureRecognizer?.isEnabled = false
-//    }
-//    override func viewDidDisappear(_ animated: Bool) {
-//        super.viewDidDisappear(animated)
-//        navigationController?.fd_fullscreenPopGestureRecognizer?.isEnabled = true
-//    }
-//    override func navleftViewTapped() {
-//        if toolBar.recordBtn.isSelected {
-//            CustomAlert.showWith(title: "提示".l10n, messgage: "当前正在录音,确定放弃当前录音吗".l10n, cancelCallback: {}) {
-//                JoyGemSIDeviceManager.shared().stop()
-//                PcmSound.sharedInstance().stopAudioUnit()
-//                PcmSound.sharedInstance().cleanup()
-//                super.navleftViewTapped()
-//            }
-//        }
-//        else{
-//            super.navleftViewTapped()
-//        }
-//    }
-//    override func navRightViewTapped() {
-//        let tip = RecordTipsView(type: .chinese2english)
-//        tip.show()
-//    }
-//    func refreshData(){
-//        tableView.reloadData()
-//        if dataList.count > 0 {
-//            tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
-//            bg.isHidden = true
-//        }
-//        else{
-//            bg.isHidden = false
-//        }
-//    }
-//}
-//extension Chinese2EnglishVC:RecordBarDelegate{
-//    func recordBarLanguageChange(_ bar: RecordBar) {
-//        
-//    }
-//    
-//    
-//    func recordBar(_ bar: RecordBar, stateChange state: RecordBarSate) {
-//        if state == .start {
-//            startIndex += 100000
-//            JoyGemSIDeviceManager.shared().originalLanguage = bar.leftItem.language.value
-//            JoyGemSIDeviceManager.shared().targetLanguage = bar.rightItem.language.value
-//            JoyGemSIDeviceManager.shared().start()
-//            //            do {
-//            //                try AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: [.defaultToSpeaker])
-//            //                try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
-//            //            } catch {
-//            //                print(error)
-//            //            }
-//        }
-//        else if state == .stop{
-//            JoyGemSIDeviceManager.shared().stop()
-//        }
-//    }
-//}
-//extension Chinese2EnglishVC:UITableViewDelegate,UITableViewDataSource {
-//    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-//        return dataList.count
-//    }
-//    
-//    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-//        let cell = Chinese2EnglishCell.cell(withTableView: tableView, indexPath: indexPath)
-//        let (vallue,index) = dataList[indexPath.row]
-//        cell.data = vallue
-//        return cell
-//    }
-//    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-//        
-//    }
-//}
-//
-//extension Chinese2EnglishVC:JoyGemSIDeviceManagerDelegate{
-//    
-//    
-//    func siDeviceManagerStopped(_ manager: JoyGemSIDeviceManager, reason code: JoyGemRecordStopCode) {
-//        Logger.debug("停止",code.rawValue)
-//        if code == .passively {
-//            toolBar.recordBtn.isSelected = false
-//        }
-//    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateRaw model: JoyGemAsrModel) {
-//        Logger.debug("text: \(model.text),index: \(model.index)")
-//        let msg = dataList.firstIndex (where: { (str,idx) in
-//            return idx == Int(model.index) + startIndex
-//        })
-//        if (msg == nil) {
-//            dataList.append((Chinese2EnglishCellModel(send: model.text),Int(model.index) + startIndex))
-//        } else {
-//            let (item,_) = dataList[msg!]
-//            item.send =  model.text
-//        }
-//        //
-//        //        ///监听到一句话结束,自动结束当前录音
-//        //        if (model.definite == true) {
-//        //            stopEarRecord()
-//        //        }
-//        refreshData()
-//    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateTranslate model: JoyGemAsrModel) {
-//        let msg = dataList.firstIndex (where: { (str,idx) in
-//            return idx == Int(model.index) + startIndex
-//        })
-//        if (msg == nil) {
-//            dataList.append((Chinese2EnglishCellModel(response: model.text),Int(model.index) + startIndex))
-//        } else {
-//            let (item,_) = dataList[msg!]
-//            item.response =  model.text
-//        }
-//        refreshData()
-//    }
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data, sampleRate: UInt) {
-//        PcmSound.sharedInstance().feed(data)
-//    }
-//    //    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data) {
-//    //        pcmData.append(data)
-//    //        PcmSound.sharedInstance().feed(data)
-//    //    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, update mode: JoyGemRecordMode) {
-//        
-//    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, saveFile path: String) {
-//        Logger.debug("path: \(path)")
-//        recordFilePath = path
-//    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, stateChange code: JoyGemStateCode) {
-//        Logger.debug("code: \(code)")
-//    }
-//    
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, onError code: JoyGemErrorCode) {
-//        
-//    }
-//}
-//extension Chinese2EnglishVC:PcmSoundDelegate{
-//    func remaining(_ frames: UInt) {
-//        
-//    }
-//    
-//    
-//}
index 81ea1cc..20e76c2 100644 (file)
@@ -21,7 +21,7 @@ class HomeDeviceCell: BaseCollectionViewCell {
 
             icon.kf.setImage(with: model.image.yc.asUrl)
             
-            if BleManager.shared.isConected(mac: model.mac) {
+            if JoyBleManager.shared.isConected(mac: model.mac) {
                 valueLabel.text =  "已连接".l10n
                 bgView.alpha = 1
             }
index bc4a4cd..21c3218 100644 (file)
@@ -87,7 +87,7 @@ class HomeDeviceVC:BaseVC{
      func reloadData() {
         DeviceVM.shared.refresh {[weak self] result in
             self?.collectionView.reloadData()
-            if BleManager.shared.isConnetd{
+            if JoyBleManager.shared.isConnetd{
                 return
             }
             var  autoConnetced = false
@@ -110,7 +110,7 @@ class HomeDeviceVC:BaseVC{
     override func navRightViewTapped() {
         App.shared.goToPage(BleScanVC())
 //        App.shared.goToPage(CalendarPickerVC())
-//        BleManager.shared.checkSettingsConnected()
+//        JoyBleManager.shared.checkSettingsConnected()
 //        ChatCache.shared.LargeDateDemoSave()
     }
     @objc func editAction(){
@@ -134,12 +134,12 @@ class HomeDeviceVC:BaseVC{
             guard let self = self else {return}
             if model.isSuccess{
                 YLprogressHUD.hidden()
-                if let mac0 = BleManager.shared.connectPeripheral?.mac,let mac1 = DeviceCache.getLastConnected(),mac0 == mac1{
+                if let mac0 = JoyBleManager.shared.connectPeripheral?.mac,let mac1 = DeviceCache.getLastConnected(),mac0 == mac1{
                     DeviceCache.remove()
                 }
                 DeviceVM.shared.dataList.removeAll(where: {$0.deviceId == deviceModel.deviceId})
                 collectionView.reloadData()
-                BleManager.shared.cancel()
+                JoyBleManager.shared.cancel()
                 reloadData()
             }
             else{
@@ -148,7 +148,7 @@ class HomeDeviceVC:BaseVC{
         }
     }
     func startConectBle(_ model:HomeDeviceModel){
-        BleManager.shared.connect(mac: model.mac) { result in
+        JoyBleManager.shared.connect(mac: model.mac) { result in
         }
     }
     @objc func deviceChange(_ noti:Notification){
index bb1331e..fef2eb8 100644 (file)
@@ -68,13 +68,6 @@ class DialogTranslateVC:BaseVC{
         }
     }
     override func setupData() {
-//        dataList = [
-//            DialogTranslateCellModel(send: "你好", response: "hello",isPhone: false),
-//            DialogTranslateCellModel(send: "Nice to meet you", response: "很高兴认识你",isPhone: true),
-//            DialogTranslateCellModel(send: "深圳今天下雨吗", response: "ShenZhen is raining today?",isPhone: false),
-//            DialogTranslateCellModel(send: "YES", response: "是的",isPhone: true),
-//        ]        
-
         JoyGemSIManager.shared().delegate = self
         JoyGemSIDeviceManager.shared().delegate = self
         
@@ -192,12 +185,8 @@ extension DialogTranslateVC:DialogRecordBarDelegate{
         dataList.append(model)
         refreshData()
         
-//        JoyGemSIManager.shared().originalLanguage = toolBar.languageView.leftItem.language.value
-//        JoyGemSIManager.shared().targetLanguage = toolBar.languageView.rightItem.language.value
         JoyGemSIDeviceManager.shared().originalLanguage = toolBar.languageView.leftItem.language.value
         JoyGemSIDeviceManager.shared().targetLanguage = toolBar.languageView.rightItem.language.value
-        Logger.debug("源语言",JoyGemSIManager.shared().originalLanguage)
-        Logger.debug("目标语言",JoyGemSIManager.shared().targetLanguage)
         JoyGemSIDeviceManager.shared().start()
         otherPcm = Data()
         do {
@@ -284,10 +273,6 @@ extension DialogTranslateVC : JoyGemSIManagerDelegate {
     func siManager(_ manager: JoyGemSIManager, didUpdateAudioData data: Data, sampleRate: UInt) {
         PcmSound.sharedInstance().feed(data)
     }
-//    func siManager(_ manager: JoyGemSIManager, didUpdateAudioData data: Data) {
-//        PcmSound.sharedInstance().feed(data)
-//    }
-    
     func siManager(_ manager: JoyGemSIManager, onError code: JoyGemErrorCode) {
         
     }
@@ -353,11 +338,6 @@ extension DialogTranslateVC : JoyGemSIDeviceManagerDelegate {
     func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data, sampleRate: UInt) {
         PcmSound.sharedInstance().feed(data)
     }
-//    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data) {
-//        //otherPcm.append(data)
-//        PcmSound.sharedInstance().feed(data)
-//    }
-    
     func siDeviceManager(_ manager: JoyGemSIDeviceManager, update mode: JoyGemRecordMode) {
         
     }
@@ -377,7 +357,6 @@ extension DialogTranslateVC : JoyGemSIDeviceManagerDelegate {
 
 
 extension DialogTranslateVC : PcmSoundDelegate {
-    
     func remaining(_ frames: UInt) {
         Logger.debug("[frame:\(frames)]");
     }
index 8046078..9f0127a 100644 (file)
@@ -101,7 +101,7 @@ class RecordTranslateVC:BaseVC{
     override func navleftViewTapped() {
         if toolBar.recordBtn.isSelected {
             CustomAlert.showWith(title: "提示".l10n, messgage: "当前正在录音,确定放弃当前录音吗?".l10n, cancelCallback: {}) {
-                JoyGemSIDeviceManager.shared().stop()
+                JoyGemSIManager.shared().stop()
                 PcmSound.sharedInstance().stopAudioUnit()
                 PcmSound.sharedInstance().cleanup()
                 super.navleftViewTapped()
index b5c37b1..2ff25d8 100644 (file)
@@ -36,7 +36,7 @@ class CurrentDeviceView: BaseView {
         if let device = DeviceVM.shared.currentDevice{
             imageView.kf.setImage(with: device.image.yc.asUrl)
             
-            if BleManager.shared.isConnetd {
+            if JoyBleManager.shared.isConnetd {
                 alpha = 1
             }
             else{
index a6e07e0..77165c2 100644 (file)
@@ -78,7 +78,7 @@ class HomeFunctionView: BaseView {
         var y = 0.0
         for (index, value) in list.enumerated() {
             let view = HomeCell()
-            view.enable = BleManager.shared.isConnetd
+            view.enable = JoyBleManager.shared.isConnetd
             addSubview(view)
             
             view.type = value
@@ -99,7 +99,7 @@ class HomeFunctionView: BaseView {
     @objc func deviceChange(_ noti:Notification){
         for item in self.subviews{
             if let view = item as? HomeCell  {
-                view.enable = BleManager.shared.isConnetd
+                view.enable = JoyBleManager.shared.isConnetd
             }
         }
     }
@@ -180,7 +180,7 @@ class HomeCell: BaseView {
         }
     }
     @objc func tapAction(){
-        if !BleManager.shared.isConnetd {
+        if !JoyBleManager.shared.isConnetd {
             return
         }
         switch type {
index 93ba790..4af2def 100644 (file)
@@ -51,7 +51,7 @@ class HomeHeadView: BaseView {
             v.text = "AI" + "伙伴,随叫随到".l10n
         }
         arrowIcon.image = UIImage(named: "arrow_2")
-        self.enable = BleManager.shared.isConnetd
+        self.enable = JoyBleManager.shared.isConnetd
         NotificationManager.add(self, selector: #selector(deviceChange(_:)), forName: .deviceValidChange)
     }
     
@@ -87,12 +87,12 @@ class HomeHeadView: BaseView {
         
     }
     @objc func chatAction(){
-        if BleManager.shared.isConnetd {
+        if JoyBleManager.shared.isConnetd {
             App.shared.goToPage(ChatVC())
         }
     }
     @objc func deviceChange(_ noti:Notification){
-        self.enable = BleManager.shared.isConnetd
+        self.enable = JoyBleManager.shared.isConnetd
     }
 }
 
index 4751a30..40334fa 100644 (file)
@@ -46,7 +46,7 @@ class BleScanVC: BaseVC{
         }
     }
     override func setupData() {
-        BleManager.shared.discoverDeviceCallback = {[weak self] devices in
+        JoyBleManager.shared.discoverDeviceCallback = {[weak self] devices in
             self?.list = devices
             self?.tableView.reloadData()
             if devices.count > 0 {
index 3ce8842..647193b 100644 (file)
@@ -5,14 +5,13 @@
 //  Created by liangshi on 2025/10/20.
 //
 
-//import JoyGemAI
 class DeviceVM:BaseVM{
     static let shared = DeviceVM()
     var dataList = [HomeDeviceModel]()
     
     var currentDevice:HomeDeviceModel?{
         for item in dataList {
-            if let device = BleManager.shared.connectPeripheral,device.mac == item.mac {
+            if let device = JoyBleManager.shared.connectPeripheral,device.mac == item.mac {
                 return item
             }
         }
@@ -33,17 +32,17 @@ class DeviceVM:BaseVM{
 
 extension DeviceVM{
     static func startScan(){
-        BleManager.shared.startScanDevice()
+        JoyBleManager.shared.startScanDevice()
         
-        BleManager.shared.didConnectDeviceCallback = {  device in
+        JoyBleManager.shared.didConnectDeviceCallback = {  device in
             self.getDeviceInfo(device)
         }
-        BleManager.shared.conetedFailureCallback = {  device in
+        JoyBleManager.shared.conetedFailureCallback = {  device in
             self.showError()
         }
     }
     static func stopScan(){
-        BleManager.shared.stopScanDevice()
+        JoyBleManager.shared.stopScanDevice()
     }
     static func startConnecte(_ data:DCPeripheral){
         guard let name = data.device.name else {
@@ -59,7 +58,7 @@ extension DeviceVM{
                 ConnectPopView.shared.titleLabel.text = name
                 ConnectPopView.shared.stateDidChange(.connecting)
             }
-            BleManager.shared.connectPeripheral(data)
+            JoyBleManager.shared.connectPeripheral(data)
 
         }
     }
@@ -67,12 +66,12 @@ extension DeviceVM{
     static func getDeviceInfo(_ device:DCPeripheral){
         guard let prodName = device.device.name,prodName.count > 0 else{
             showError()
-            BleManager.shared.cancel()
+            JoyBleManager.shared.cancel()
             return
         }
         JoyDevice.getDN { dn in
             guard let deviceName = dn else{
-                BleManager.shared.cancel()
+                JoyBleManager.shared.cancel()
                 self.showError()
                 return
             }
@@ -95,7 +94,7 @@ extension DeviceVM{
             }
             else{
                 self.showError()
-                BleManager.shared.cancel()
+                JoyBleManager.shared.cancel()
             }
         }
     }
@@ -164,7 +163,7 @@ extension DeviceVM{
     }
     
     static func settingsConnected(){
-        let list = BleManager.shared.checkSettingsConnected()
+        let list = JoyBleManager.shared.checkSettingsConnected()
         if list.count == 0{
             CustomAlert.showWith(title: "提示", messgage: "请前往系统设置连接蓝牙") {
                 
index f69e4ea..ab1367d 100644 (file)
@@ -179,7 +179,7 @@ fileprivate class FooterView: BaseView {
             if model.isSuccess{
                 YLprogressHUD.hidden()
                 DeviceVM.shared.dataList.removeAll(where: {$0.deviceId == self.deviceModel.deviceId})
-                BleManager.shared.cancel()
+                JoyBleManager.shared.cancel()
                 App.shared.popPage()
             }
             else{
index ae888b8..cdce644 100644 (file)
@@ -69,7 +69,7 @@ class UpdateVC:BaseVC{
         }
     }
     @objc func tapAction(){
-        if !BleManager.shared.isConnetd{
+        if !JoyBleManager.shared.isConnetd{
             YLprogressHUD.showAutoHiden("请先连接设备".l10n)
             return
         }
index 7d2d02d..fb84042 100644 (file)
@@ -39,7 +39,7 @@ class FindVC:BaseVC{
             v.value = "R"
         }
         titleLabel.do { v in
-            v.text =  BleManager.shared.connectPeripheral?.device.name ?? ""
+            v.text =  JoyBleManager.shared.connectPeripheral?.device.name ?? ""
             v.font = .regular(20)
             v.textColor = .hexString("#121212")
             
index 456e005..07fc6de 100644 (file)
@@ -70,7 +70,7 @@ class ModeEffectsView: BaseView {
         updateState()
     }
     func updateState(){
-        if BleManager.shared.isConnetd {
+        if JoyBleManager.shared.isConnetd {
             alpha = 1
         }
         else{
@@ -85,7 +85,7 @@ class ModeEffectsView: BaseView {
     }
     
     @objc func tapAction(_ tap:UITapGestureRecognizer){
-        if !BleManager.shared.isConnetd {
+        if !JoyBleManager.shared.isConnetd {
             return
         }
         let view = tap.view as! ItemView
index 39e0989..0dab60c 100644 (file)
@@ -21,7 +21,7 @@ class ModeVC:BaseVC{
     }
     
     override func setupViews() {
-        self.navBar.title = BleManager.shared.connectPeripheral?.device.name ?? ""
+        self.navBar.title = JoyBleManager.shared.connectPeripheral?.device.name ?? ""
         navBar.backgroundColor = .clear
         view.backgroundColor = .color(.bgColor)
         
@@ -86,11 +86,11 @@ extension ModeVC{
         updateState()
     }
     func updateState(){
-        self.findView.alpha = BleManager.shared.isConnetd ? 1:0.3
+        self.findView.alpha = JoyBleManager.shared.isConnetd ? 1:0.3
     }
     
     func selectedModeAction(_ mode:ModeEffectsType){
-        if !BleManager.shared.isConnetd {
+        if !JoyBleManager.shared.isConnetd {
             return
         }
         JoyDevice.setEQMode(mode)
@@ -99,7 +99,7 @@ extension ModeVC{
         }
     }
     @objc func findAction(){
-        if BleManager.shared.isConnetd {
+        if JoyBleManager.shared.isConnetd {
             App.shared.goToPage(FindVC())
         }
         
index 63139d0..e8efc4a 100644 (file)
@@ -83,7 +83,7 @@ class ConnectPopView: BasePresentView2 {
             v.textColor = .rgb(0x121212)
             v.font = .regular(20)
             v.textAlignment = .center
-            v.text = BleManager.shared.connectPeripheral?.device.name ?? ""
+            v.text = JoyBleManager.shared.connectPeripheral?.device.name ?? ""
         }
         desLabel.do { (v) in
             v.textColor = .rgb(0x121212)