Kamera Firmware Güncellemesi
Camera OTA, desteklenen cihazın kamera modülündeki firmware’i günceller. Cihazın ana firmware güncellemesinden ayrı bir işlemdir.
Ana uygulama uyumlu bir yerel kamera firmware paketi sağlar. SDK daha sonra cihaz erişim noktasını yapılandırma, Camera OTA moduna geçme, yerel HTTP sunucusunu başlatma, firmware URL’sini cihaza gönderme, paketi aktarma ve kamera firmware’ini yazma aşamalarının tamamını koordine eder. Geçerli işlemi göstermek için aşama callback’lerini kullanın; kesin güncelleme sonucu olarak nihai completion işleyicisini kabul edin.
Camera OTA aktarım akışı
Yerel paket, ana uygulamadaki doğrulamadan SDK koordinasyonuna; ardından aktarım, firmware yazma ve kesin sonuca ilerler.
Ön Koşullar
- Cihaz bağlıdır ve
DeviceCameraOtaAPIprotokolüne uyar. - Yerel firmware yolu okunabilir ve paket kamera donanımıyla uyumludur.
- Uygulama cihaz erişim noktasına bağlanabilir, yerel ağa erişebilir ve yerel HTTP sunucusunu kullanılabilir durumda tutabilir.
- Media File Import, Camera OTA veya diğer erişim noktası iş akışlarının eşzamanlı çalışmasını önleyin.
AI desteğiyle uygulayın
Bu iş akışını AI ile uygulayın
Resmî “AIBuds Kamera Ürün Yazılımını Güncelleme” becerisini kullanarak iş akışını uygulamanıza uyarlayın.
https://docs-aibuds.github.io/tr/skills/update-aibuds-camera-firmware adresini okuyup yönergeleri izleyin. Bu beceriyle “AIBuds Kamera Ürün Yazılımını Güncelleme” iş akışını iOS projesinde uygulayıp doğrulayın.API Referansı
Framework
AIBuds.xcframework
İçe Aktarma
- Swift
- Objective-C
import AIBuds
import AIBudsFoundation#import <AIBuds/AIBuds-Swift.h>
#import <AIBuds/AIBuds.h>Protokol
DeviceCameraOtaAPI protokolü DeviceAPI protokolünden devralır ve şu anda Camera OTA iş akışının tamamı için tek bir örnek yöntemi sunar.
Örnek Yöntemi
- Swift
- Objective-C
/// Start camera OTA upgrade.
///
/// - Parameters:
/// - filePath: The readable local path of the camera firmware file.
/// - configureHotspotStartingHandler: Called when hotspot configuration starts.
/// - hotspotConfigureCompletionHandler: Called when hotspot configuration completes.
/// - success: `true` if configuration succeeded; otherwise `false`.
/// - error: The failure information, or `nil` if configuration succeeded.
/// - enterCameraOtaModeStartingHandler: Called when entry into camera OTA mode starts.
/// - enterCameraOtaModeCompletedHandler: Called when entry into camera OTA mode completes.
/// - success: `true` if the device entered OTA mode; otherwise `false`.
/// - error: The failure information, or `nil` if entry succeeded.
/// - waitingForHotspotOpenHandler: Called while waiting for the device hotspot to open.
/// - connectDeviceHotspotStartingHandler: Called when connecting to the device hotspot starts.
/// - ssid: The SSID of the device hotspot.
/// - deviceHotspotConnectCompletionHandler: Called when the hotspot connection completes.
/// - success: `true` if the connection succeeded; otherwise `false`.
/// - error: The failure information, or `nil` if the connection succeeded.
/// - httpServerStartingHandler: Called when the local HTTP server is starting.
/// - httpServerStartCompletionHandler: Called when the HTTP server start attempt completes.
/// - success: `true` if the server started; otherwise `false`.
/// - error: The failure information, or `nil` if the server started.
/// - sendingFirmwareUrlHandler: Called before sending the firmware URL to the device.
/// - firmwareUrl: The local HTTP URL that will be sent.
/// - firmwareUrlSendCompletionHandler: Called when firmware URL delivery completes.
/// - success: `true` if the URL was sent; otherwise `false`.
/// - error: The failure information, or `nil` if delivery succeeded.
/// - startCompletionHandler: Called when the Camera OTA start command completes.
/// - success: `true` if the update started; otherwise `false`.
/// - error: The failure information, or `nil` if the update started.
/// - fileTransferStartedHandler: Called when firmware transfer starts.
/// - fileTransferCompletedHandler: Called when firmware transfer completes.
/// - waitingForFlashingHandler: Called while the device is preparing to flash.
/// - flashingStartedHandler: Called when firmware flashing starts.
/// - flashingCompletedHandler: Called when firmware flashing completes.
/// - phaseProgressHandler: Reports progress for transfer and flashing.
/// - phase: `.transferring` or `.flashing`.
/// - progress: The phase progress in the range `0...100`.
/// - completionHandler: Called when the complete Camera OTA workflow finishes.
/// - success: `true` if the upgrade succeeded; otherwise `false`.
/// - error: The failure information, or `nil` if the upgrade succeeded.
func startCameraOta(
withFilePath filePath: String,
configureHotspotStartingHandler: AIBudsCameraOtaConfigureHotspotStartingHandler?,
hotspotConfigureCompletionHandler: AIBudsCameraOtaHotspotConfigureCompletionHandler?,
enterCameraOtaModeStartingHandler: AIBudsEnterCameraOtaModeStartingHandler?,
enterCameraOtaModeCompletedHandler: AIBudsEnterCameraOtaModeCompletionHandler?,
waitingForHotspotOpenHandler: AIBudsCameraOtaStartingToWaitForHotspotOpenHandler?,
connectDeviceHotspotStartingHandler: AIBudsCameraOtaConnectDeviceHotspotStartingHandler?,
deviceHotspotConnectCompletionHandler: AIBudsCameraOtaDeviceHotspotConnectCompletionHandler?,
httpServerStartingHandler: AIBudsCameraOtaHttpServerStartingHandler?,
httpServerStartCompletionHandler: AIBudsCameraOtaHttpServerStartCompletionHandler?,
sendingFirmwareUrlHandler: AIBudsCameraOtaSendingFirmwareUrlHandler?,
firmwareUrlSendCompletionHandler: AIBudsCameraOtaFirmwareUrlSendCompletionHandler?,
startCompletionHandler: AIBudsCameraOtaStartCompletionHandler?,
fileTransferStartedHandler: AIBudsCameraOtaFileTransferStartedHandler?,
fileTransferCompletedHandler: AIBudsCameraOtaFileTransferCompletedHandler?,
waitingForFlashingHandler: AIBudsCameraOtaWaitingForFlashingHandler?,
flashingStartedHandler: AIBudsCameraOtaFlashingStartedHandler?,
flashingCompletedHandler: AIBudsCameraOtaFlashingCompletedHandler?,
phaseProgressHandler: AIBudsCameraOtaPhaseProgressHandler?,
completionHandler: AIBudsCameraOtaCompletionHandler?
)/// Start camera OTA upgrade from a local firmware path.
///
/// - Parameters:
/// - filePath: The readable local path of the camera firmware file.
/// - configureHotspotStartingHandler: Called when hotspot configuration starts.
/// - hotspotConfigureCompletionHandler: Returns configuration success and error.
/// - enterCameraOtaModeStartingHandler: Called when entry into camera OTA mode starts.
/// - enterCameraOtaModeCompletedHandler: Returns OTA-mode entry success and error.
/// - waitingForHotspotOpenHandler: Called while waiting for the device hotspot to open.
/// - connectDeviceHotspotStartingHandler: Returns the device hotspot SSID.
/// - deviceHotspotConnectCompletionHandler: Returns hotspot connection success and error.
/// - httpServerStartingHandler: Called when the local HTTP server is starting.
/// - httpServerStartCompletionHandler: Returns HTTP server start success and error.
/// - sendingFirmwareUrlHandler: Returns the local firmware URL before it is sent.
/// - firmwareUrlSendCompletionHandler: Returns URL delivery success and error.
/// - startCompletionHandler: Returns Camera OTA start success and error.
/// - fileTransferStartedHandler: Called when firmware transfer starts.
/// - fileTransferCompletedHandler: Called when firmware transfer completes.
/// - waitingForFlashingHandler: Called while the device prepares to flash.
/// - flashingStartedHandler: Called when firmware flashing starts.
/// - flashingCompletedHandler: Called when firmware flashing completes.
/// - phaseProgressHandler: Returns `Transferring` or `Flashing` and progress from `0` to `100`.
/// - completionHandler: Returns final upgrade success and error.
- (void)startCameraOtaWithFilePath:(NSString *_Nonnull)filePath
configureHotspotStartingHandler:(AIBudsCameraOtaConfigureHotspotStartingHandler _Nullable)
configureHotspotStartingHandler
hotspotConfigureCompletionHandler:
(AIBudsCameraOtaHotspotConfigureCompletionHandler _Nullable)
hotspotConfigureCompletionHandler
enterCameraOtaModeStartingHandler:
(AIBudsEnterCameraOtaModeStartingHandler _Nullable)enterCameraOtaModeStartingHandler
enterCameraOtaModeCompletedHandler:
(AIBudsEnterCameraOtaModeCompletionHandler _Nullable)enterCameraOtaModeCompletedHandler
waitingForHotspotOpenHandler:
(AIBudsCameraOtaStartingToWaitForHotspotOpenHandler _Nullable)
waitingForHotspotOpenHandler
connectDeviceHotspotStartingHandler:
(AIBudsCameraOtaConnectDeviceHotspotStartingHandler _Nullable)
connectDeviceHotspotStartingHandler
deviceHotspotConnectCompletionHandler:
(AIBudsCameraOtaDeviceHotspotConnectCompletionHandler _Nullable)
deviceHotspotConnectCompletionHandler
httpServerStartingHandler:
(AIBudsCameraOtaHttpServerStartingHandler _Nullable)httpServerStartingHandler
httpServerStartCompletionHandler:
(AIBudsCameraOtaHttpServerStartCompletionHandler _Nullable)
httpServerStartCompletionHandler
sendingFirmwareUrlHandler:
(AIBudsCameraOtaSendingFirmwareUrlHandler _Nullable)sendingFirmwareUrlHandler
firmwareUrlSendCompletionHandler:
(AIBudsCameraOtaFirmwareUrlSendCompletionHandler _Nullable)
firmwareUrlSendCompletionHandler
startCompletionHandler:
(AIBudsCameraOtaStartCompletionHandler _Nullable)startCompletionHandler
fileTransferStartedHandler:
(AIBudsCameraOtaFileTransferStartedHandler _Nullable)fileTransferStartedHandler
fileTransferCompletedHandler:
(AIBudsCameraOtaFileTransferCompletedHandler _Nullable)fileTransferCompletedHandler
waitingForFlashingHandler:
(AIBudsCameraOtaWaitingForFlashingHandler _Nullable)waitingForFlashingHandler
flashingStartedHandler:
(AIBudsCameraOtaFlashingStartedHandler _Nullable)flashingStartedHandler
flashingCompletedHandler:
(AIBudsCameraOtaFlashingCompletedHandler _Nullable)flashingCompletedHandler
phaseProgressHandler:
(AIBudsCameraOtaPhaseProgressHandler _Nullable)phaseProgressHandler
completionHandler:
(AIBudsCameraOtaCompletionHandler _Nullable)completionHandler;API Referansındaki startCameraOta öğesine bakın.
Dönüş Değeri
Bu yöntem doğrudan değer döndürmez. Başlangıç, aşama geçişleri, ilerleme ve nihai sonuç sağlanan işleyiciler aracılığıyla iletilir.
İş Akışı Aşamaları
Bunlar Camera OTA iş akışındaki callback aşamalarıdır; CameraOtaProgressPhase değerleri değildir.
| Aşama | İlgili işleyiciler |
|---|---|
| Erişim noktasını yapılandırma | configureHotspotStartingHandler, hotspotConfigureCompletionHandler |
| Camera OTA moduna girme | enterCameraOtaModeStartingHandler, enterCameraOtaModeCompletedHandler |
| Cihaz erişim noktasına bağlanma | waitingForHotspotOpenHandler, connectDeviceHotspotStartingHandler, deviceHotspotConnectCompletionHandler |
| Yerel HTTP sunucusunu başlatma | httpServerStartingHandler, httpServerStartCompletionHandler |
| Firmware URL’sini gönderme | sendingFirmwareUrlHandler, firmwareUrlSendCompletionHandler |
| Güncellemeyi başlatma | startCompletionHandler |
| Firmware’i aktarma | fileTransferStartedHandler, fileTransferCompletedHandler |
| Hazırlama ve firmware yazma | waitingForFlashingHandler, flashingStartedHandler, flashingCompletedHandler |
| Tamamlama | completionHandler |
İlerleme Aşamaları
CameraOtaProgressPhase tam olarak iki genel değer içerir. progress argümanı, bildirilen aşama için 0 ile 100 arasında bir tamsayıdır.
| Swift | Objective-C | Ham değer | Anlamı |
|---|---|---|---|
.transferring | AIBudsCameraOtaProgressPhaseTransferring | 1 | Firmware dosyası aktarım ilerlemesi. |
.flashing | AIBudsCameraOtaProgressPhaseFlashing | 2 | Kamera firmware güncelleme ilerlemesi. |
Kullanım Örnekleri
Örnekler SDK Demo’sunun sunduğu her callback’i korur. Üretim kodunda kullanıcı arayüzünü ana kuyrukta güncelleyin.
- Swift
- Objective-C
guard let cameraOtaDevice = device as? DeviceCameraOtaAPI else {
print("Camera OTA is not supported")
return
}
cameraOtaDevice.startCameraOta(
withFilePath: filePath,
configureHotspotStartingHandler: {
print("Configuring device hotspot")
},
hotspotConfigureCompletionHandler: { success, error in
print(
success
? "Hotspot configured"
: "Hotspot configuration failed: \(error?.localizedDescription ?? "Unknown error")")
},
enterCameraOtaModeStartingHandler: {
print("Entering Camera OTA mode")
},
enterCameraOtaModeCompletedHandler: { success, error in
print(
success
? "Camera OTA mode ready"
: "Could not enter Camera OTA mode: \(error?.localizedDescription ?? "Unknown error")"
)
},
waitingForHotspotOpenHandler: {
print("Waiting for device hotspot")
},
connectDeviceHotspotStartingHandler: { ssid in
print("Connecting to \(ssid)")
},
deviceHotspotConnectCompletionHandler: { success, error in
print(
success
? "Device hotspot connected"
: "Hotspot connection failed: \(error?.localizedDescription ?? "Unknown error")")
},
httpServerStartingHandler: {
print("Starting local HTTP server")
},
httpServerStartCompletionHandler: { success, error in
print(
success
? "HTTP server ready"
: "HTTP server failed: \(error?.localizedDescription ?? "Unknown error")")
},
sendingFirmwareUrlHandler: { firmwareURL in
print("Sending firmware URL: \(firmwareURL)")
},
firmwareUrlSendCompletionHandler: { success, error in
print(
success
? "Firmware URL sent"
: "URL delivery failed: \(error?.localizedDescription ?? "Unknown error")")
},
startCompletionHandler: { success, error in
print(
success
? "Camera OTA started"
: "Camera OTA could not start: \(error?.localizedDescription ?? "Unknown error")")
},
fileTransferStartedHandler: {
print("Firmware transfer started")
},
fileTransferCompletedHandler: {
print("Firmware transfer completed")
},
waitingForFlashingHandler: {
print("Waiting for flashing")
},
flashingStartedHandler: {
print("Firmware flashing started")
},
flashingCompletedHandler: {
print("Firmware flashing completed")
},
phaseProgressHandler: { phase, progress in
switch phase {
case .transferring:
print("Transfer: \(progress)%")
case .flashing:
print("Flashing: \(progress)%")
}
},
completionHandler: { success, error in
if success {
print("Camera OTA completed successfully")
} else {
print("Camera OTA failed: \(error?.localizedDescription ?? "Unknown error")")
}
}
)id<AIBudsDeviceCameraOtaAPI> cameraOtaDevice = (id<AIBudsDeviceCameraOtaAPI>)self.device;
if (![cameraOtaDevice conformsToProtocol:@protocol(AIBudsDeviceCameraOtaAPI)]) {
NSLog(@"Camera OTA is not supported");
return;
}
[cameraOtaDevice startCameraOtaWithFilePath:filePath
configureHotspotStartingHandler:^{
NSLog(@"Configuring device hotspot");
}
hotspotConfigureCompletionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Hotspot configured" : error.localizedDescription);
}
enterCameraOtaModeStartingHandler:^{
NSLog(@"Entering Camera OTA mode");
}
enterCameraOtaModeCompletedHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Camera OTA mode ready" : error.localizedDescription);
}
waitingForHotspotOpenHandler:^{
NSLog(@"Waiting for device hotspot");
}
connectDeviceHotspotStartingHandler:^(NSString *_Nonnull ssid) {
NSLog(@"Connecting to %@", ssid);
}
deviceHotspotConnectCompletionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Device hotspot connected" : error.localizedDescription);
}
httpServerStartingHandler:^{
NSLog(@"Starting local HTTP server");
}
httpServerStartCompletionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"HTTP server ready" : error.localizedDescription);
}
sendingFirmwareUrlHandler:^(NSString *_Nonnull firmwareUrl) {
NSLog(@"Sending firmware URL: %@", firmwareUrl);
}
firmwareUrlSendCompletionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Firmware URL sent" : error.localizedDescription);
}
startCompletionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Camera OTA started" : error.localizedDescription);
}
fileTransferStartedHandler:^{
NSLog(@"Firmware transfer started");
}
fileTransferCompletedHandler:^{
NSLog(@"Firmware transfer completed");
}
waitingForFlashingHandler:^{
NSLog(@"Waiting for flashing");
}
flashingStartedHandler:^{
NSLog(@"Firmware flashing started");
}
flashingCompletedHandler:^{
NSLog(@"Firmware flashing completed");
}
phaseProgressHandler:^(AIBudsCameraOtaProgressPhase phase, NSInteger progress) {
if (phase == AIBudsCameraOtaProgressPhaseTransferring) {
NSLog(@"Transfer: %ld%%", (long)progress);
} else if (phase == AIBudsCameraOtaProgressPhaseFlashing) {
NSLog(@"Flashing: %ld%%", (long)progress);
}
}
completionHandler:^(BOOL success, NSError *_Nullable error) {
NSLog(@"%@", success ? @"Camera OTA completed successfully" : error.localizedDescription);
}];Hata Yönetimi
Camera OTA hataları AIBudsSDK.CameraOtaErrorDomain ile SdkCameraOtaErrorCode kullanır. Genel enum; yerel dosya doğrulama, ağ/erişim noktası, görev yaşam döngüsü, OTA moduna giriş ve firmware URL’si iletim hatalarını kapsar.
| Kodlar | Tipik durum |
|---|---|
unknown, networkRequestFailed, networkTimeout | SDK hatayı daha ayrıntılı sınıflandıramaz veya ağ işlemi başarısız olur. |
cameraOtaFileNotFound, invalidCameraOtaFile, cameraOtaTaskCreateFailedDueToFileNotFound | Seçilen yerel firmware yolu yoktur veya paket geçersizdir. |
hotspotDisconnectedDuringTransfer, invalidHotspotConfig | Cihaz erişim noktası güvenilir biçimde kullanılamaz. |
stageTwoTimeout, interruptedByShutdownOrLowBattery | Firmware yazma işlemi tamamlanmaya yakın takılır veya cihaz güncellemeyi keser. |
cameraOtaTaskAlreadyRunning | Başka bir Camera OTA görevi etkindir. |
4003...4009 | Görev; cihaz bağlantısı, zaman aşımı, erişim noktası kurulumu, OTA moduna giriş, HTTP sunumu veya URL iletimi sırasında başarısız olur. |
5001...5010 | Cihaz komut, depolama, izin, kanal veya durum koşulları nedeniyle OTA moduna girişi ya da firmware URL’si iletimini reddeder. |
Genel bir güncelleme hatası yerine başarısız olan iş akışı aşamasını gösterin. Firmware yazma başladıktan sonra otomatik yeniden denemeyin; bağlantıyı kesmeyin, cihazı kapatmayın veya başka bir erişim noktası iş akışı başlatmayın. SDK şu anda kesin yeniden deneme sınırları tanımlamaz; başka bir paket sunmadan önce cihazın kurtarma durumunu ve kamera firmware sürümünü doğrulayın.
En İyi Uygulamalar
- API’yi çağırmadan önce yerel dosyanın varlığını doğrulayın; paketin özgünlüğü ve kamera modeli uyumluluğu ana ürünün sorumluluğundadır.
- Media File Import, Camera OTA veya diğer erişim noktası iş akışlarının eşzamanlı çalışmasını önleyin.
- Nihai tamamlanmaya kadar uygulamayı etkin ve yerel HTTP sunucusunu erişilebilir tutun.
- Callback’ler başka bir kuyruktan gelebileceği için kullanıcı arayüzü güncellemelerini ana kuyruğa yönlendirin.
startCompletionHandlerdeğerini nihai güncelleme başarısı olarak değil, OTA işleminin başlatılma sonucu olarak değerlendirin.- Nihai sonuç için
completionHandlerkullanın ve yeniden bağlandıktan sonra kamera firmware durumunu doğrulayın.
Notlar
- Camera OTA yerel firmware yolu kullanır; SDK uzak güncelleme servisini sorgulamaz veya paketi indirmez.
phaseProgressHandleryalnızca aktarım ve firmware yazma ilerlemesini bildirir. Diğer iş akışı aşamaları kendi callback’lerini kullanır.- Aktarım ilerlemesinin
100olması nihai Camera OTA sonucu değildir; firmware yazma ve nihai tamamlanma aşamaları devam eder. - Güvenli otomatik yeniden deneme davranışı henüz genel SDK sözleşmesinde tanımlanmamıştır.