ক্যামেরা অনবোর্ডিংয়ের জন্য কমিশনিং-পরবর্তী বৈশিষ্ট্য

ডিভাইসটি চালু করার পর যে বৈশিষ্ট্যগুলো ব্যবহার করা যেতে পারে, সেগুলো হলো:

OtaSoftwareUpdateRequestor বৈশিষ্ট্য

এই বৈশিষ্ট্যটি ক্যামেরা ডিভাইসে একটি OTA সফ্টওয়্যার আপডেট নিরীক্ষণ করার জন্য একটি ইন্টারফেস প্রদান করে। একবার চালু হলে, ক্যামেরাটি আপডেট শুরু করে এবং অ্যাপে এর অবস্থা রিপোর্ট করে। অ্যাপটি সফ্টওয়্যার আপডেট সম্পন্ন হওয়ার স্ট্যাটাস পেলে, ক্যামেরাটি লাইভস্ট্রিম শুরু করতে পারে।

নিম্নলিখিত নমুনা কোড এবং ব্যাখ্যায় দেখানো হয়েছে কিভাবে ট্রেইটটি ব্যবহার করা যেতে পারে।

withTimeout(OTA_TIMEOUT_MS) {
  device.type(OtaRequestorDevice)
    .mapNotNull { it?.trait(OtaSoftwareUpdateRequestor) }
    .distinctUntilChanged()
    .transformWhile { trait ->
      emit(trait)
      !isTerminalState(trait.updateState)
    }
    .collect { trait ->
      updateState = trait.updateState
      updateStateProgress = trait.updateStateProgress
    }
}
  • টাইমআউট: withTimeout মনিটরিং প্রক্রিয়ার জন্য একটি সর্বোচ্চ সময়সীমা ( OTA_TIMEOUT_MS ) নির্ধারণ করে। এই সময়ের মধ্যে আপডেটটি সম্পূর্ণ না হলে, এটি টাইমআউট হয়ে যায়।

  • ট্রেইট পরিবর্তন পর্যবেক্ষণ: .distinctUntilChanged() অপারেটরটি নিশ্চিত করে যে চেইনের পরবর্তী কোড কেবল তখনই প্রতিক্রিয়া দেখাবে যখন ট্রেইটের অবস্থা প্রকৃতপক্ষে পরিবর্তিত হবে, যা এটিকে ক্রমাগত পোলিং করার চেয়ে বেশি কার্যকর করে তোলে।

  • সম্পূর্ণ হওয়া পর্যন্ত প্রক্রিয়াকরণ: .transformWhile অপারেটরটি ততক্ষণ পর্যন্ত আপডেট প্রক্রিয়াকরণ চালিয়ে যায়, যতক্ষণ পর্যন্ত OTA updateState একটি টার্মিনাল স্টেট (যেমন সফল বা ব্যর্থ) না হয়।

  • স্ট্যাটাস সংগ্রহ: প্রতিটি স্টেট পরিবর্তনের জন্য, ট্রেইট থেকে প্রাপ্ত সর্বশেষ মান দিয়ে updateState এবং updateStateProgress ভেরিয়েবলগুলো আপডেট করতে .collect ব্লকটি এক্সিকিউট করা হয়।

আরও তথ্যের জন্য, OtaSoftwareUpdateRequestor ট্রেইট রেফারেন্সটি দেখুন।

ConfigurationDone ট্রেইট

ক্যামেরা সক্রিয় করার জন্য এই ট্রেইটটি আবশ্যক নয়, তবে AppConfigurationComplete অ্যাট্রিবিউটটিকে true সেট করার মাধ্যমে এটি অ্যাপটিকে ট্র্যাক করতে দেয় যে ডিভাইসটি কখন সম্পূর্ণরূপে সেট আপ এবং ব্যবহারযোগ্য হয়েছে। এই ট্রেইটটি OtaSoftwareUpdateRequestor ট্রেইটের পরে ব্যবহার করা উচিত।

device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }