অ্যান্ড্রয়েড কোড অনুসন্ধানে উৎস দেখুন
আপনি যদি অ্যান্ড্রয়েড ডিভাইস বা থ্রেড চিপ বিক্রেতা না হন তবে আপনি এখন পড়া বন্ধ করতে পারেন।
এই দস্তাবেজটি আপনাকে সর্বশেষ AOSP সোর্স কোড সহ একটি নতুন Android-ভিত্তিক থ্রেড বর্ডার রাউটার ডিভাইস তৈরি করার পদক্ষেপের মাধ্যমে নিয়ে যায়। এই নথিটি অনুসরণ করে, আপনি শিখবেন:
- অ্যান্ড্রয়েডে থ্রেড সমর্থনের সামগ্রিক আর্কিটেকচার এবং স্থিতি
- কিভাবে আপনার নিজের থ্রেড HAL পরিষেবা তৈরি করবেন
- কীভাবে আপনার ডিভাইসটিকে গুগল হোমের সাথে সামঞ্জস্যপূর্ণ করবেন
- কিভাবে আপনার থ্রেড বর্ডার রাউটার পরীক্ষা করবেন
আপনার যদি সমর্থনের প্রয়োজন হয়, GitHub- এ একটি সমস্যা ফাইল করুন বা আপনার কোনো প্রশ্ন থাকলে একটি আলোচনা খুলুন।
ওভারভিউ
অ্যান্ড্রয়েড থ্রেড স্ট্যাকটি OpenThread এবং ot-br-posix
উপর ভিত্তি করে তৈরি করা হয়েছে যা GitHub-এ Google ওপেন-সোর্স করেছে। একইভাবে ওপেন থ্রেড একটি পাবলিক গিটহাব রিপোজিটরিতে তৈরি করা হয়, তাই অ্যান্ড্রয়েড থ্রেড স্ট্যাকটি পাবলিক AOSP কোডবেসে তৈরি করা হয়। সমস্ত বৈশিষ্ট্য এবং বাগ সংশোধনগুলি প্রথমে AOSP-এ জমা দেওয়া হয়৷ এটি বিক্রেতাদের নিয়মিত অ্যান্ড্রয়েড রিলিজের জন্য অপেক্ষা না করে সর্বশেষ থ্রেড সংস্করণগুলি গ্রহণ করা শুরু করতে দেয়৷
স্থাপত্য
পুরো অ্যান্ড্রয়েড থ্রেড স্ট্যাক দুটি প্রধান উপাদান নিয়ে গঠিত: একটি জেনেরিক সিস্টেম পার্টিশনে কোর থ্রেড স্ট্যাক এবং একটি ভেন্ডার পার্টিশনে থ্রেড HAL পরিষেবা। ডিভাইস বিক্রেতাদের সাধারণত শুধুমাত্র যত্ন নেওয়া এবং HAL পরিষেবা তৈরি করা প্রয়োজন।
অ্যান্ড্রয়েড থ্রেড স্ট্যাক কীভাবে কাজ করে তার একটি সংক্ষিপ্ত সারসংক্ষেপ রয়েছে: - সিস্টেম সার্ভারে একটি জাভা থ্রেড সিস্টেম পরিষেবা রয়েছে যা পুরো স্ট্যাক পরিচালনা করে - থ্রেড সিস্টেম API প্রদান করে, thread-wpan
টানেল ইন্টারফেস তৈরি করে, থ্রেড নেটওয়ার্ক নিবন্ধন করে সংযোগ পরিষেবা এবং বর্ডার রাউটিং এবং বিজ্ঞাপন প্রক্সি কার্যকারিতা প্রয়োগ করে। - মূল থ্রেড/ওপেন থ্রেড স্ট্যাকটি একটি অ-সুবিধাপ্রাপ্ত স্বতন্ত্র নেটিভ প্রসেসে হোস্ট করা হয় যার নাম দেওয়া হয় ot-daemon
। ot-daemon
সরাসরি ব্যক্তিগত AIDL API-এর মাধ্যমে Java সিস্টেম পরিষেবা দ্বারা পরিচালিত হয় এবং এটি Thread HAL API-এর মাধ্যমে থ্রেড হার্ডওয়্যার রেডিও অ্যাক্সেস করে। - একটি বিক্রেতা-প্রদত্ত থ্রেড HAL পরিষেবা অবশ্যই থ্রেড HAL API প্রয়োগ করবে৷ এটি সাধারণত একটি RCP হিসাবে কাজ করে এবং স্পিনেল প্রোটোকল প্রয়োগ করে।
কোড কোথায়?
- Android থ্রেড ফ্রেমওয়ার্ক / API এবং পরিষেবা: https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Connectivity/thread/
- থ্রেড HAL API এবং ডিফল্ট পরিষেবা বাস্তবায়ন: https://cs.android.com/android/platform/superproject/main/+/main:hardware/interfaces/threadnetwork/
- আমদানি করা OpenThread রেপো: https://cs.android.com/android/platform/superproject/main/+/main:external/openthread/
- আমদানি করা ot-br-posix রেপো: https://cs.android.com/android/platform/superproject/main/+/main:external/ot-br-posix/
উন্নয়ন পরিবেশ সেট আপ করুন
অ্যান্ড্রয়েড ডিভাইস বিক্রেতারা যারা ইতিমধ্যেই ডিভাইসের জন্য একটি অ্যান্ড্রয়েড ডেভেলপমেন্ট এনভায়রনমেন্ট স্থাপন করেছেন তারা এই বিভাগটি এড়িয়ে যেতে পারেন।
আপনি যদি অ্যান্ড্রয়েড ইকোসিস্টেমে নতুন হন বা আপনি একজন সিলিকন বিক্রেতা হন যিনি আপনার থ্রেড চিপকে অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ করতে চান এবং ডিভাইস বিক্রেতাদের জন্য সহায়তা প্রদান করতে চান, পড়তে থাকুন।
অ্যান্ড্রয়েড বিকাশকারী কোডল্যাব অনুসরণ করুন
প্রথমবার আপনার অ্যান্ড্রয়েড ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে, নিম্নলিখিত কোডল্যাব ব্যবহার করুন: https://source.android.com/docs/setup/start । এই কোডল্যাবের শেষে, আপনি সোর্স কোড থেকে একটি সিমুলেটেড কাটলফিশ ডিভাইস তৈরি করতে এবং চালাতে সক্ষম হবেন।
আপনার থ্রেড HAL পরিষেবা তৈরি করুন
Cuttlefish মধ্যে থ্রেড চেষ্টা করুন
Cuttlefish হল ভার্চুয়াল অ্যান্ড্রয়েড ডিভাইস। আপনার নিজের HAL পরিষেবা তৈরি করা শুরু করার আগে, HAL কীভাবে কাজ করে তা বোঝার জন্য কাটলফিশে থ্রেড ব্যবহার করে দেখুন।
Cuttlefish-এ একটি ডিফল্ট থ্রেড HAL পরিষেবা প্রদান করা হয় এবং এটি সিমুলেটেড RCP-এর মাধ্যমে প্রয়োগ করা হয় যা একটি সিমুলেটেড থ্রেড (802.15.4) রেডিও থেকে UDP সকেটের মাধ্যমে প্যাকেটগুলিকে ট্রান্সসিভ করে।
Cuttlefish উদাহরণে, একটি "ThreadNetworkDemoApp" আগে থেকে ইনস্টল করা আছে। একটি ডিফল্ট থ্রেড নেটওয়ার্কে Cuttlefish ডিভাইসে যোগ দিতে সেই অ্যাপটি খুলুন।
পরীক্ষার জন্য আপনার থ্রেড নেটওয়ার্ক কনফিগার করার জন্য দেওয়া আছে ot-ctl
এবং ot-cli-ftd
কমান্ড লাইন টুল। এই সরঞ্জামগুলি সমস্ত OpenThread CLI কমান্ড সমর্থন করে যা আপনি ইতিমধ্যে পরিচিত হতে পারেন।
আপনি Cuttlefish Thread HAL পরিষেবার লগগুলির জন্য গ্রেপ করতে পারেন:
adb logcat | egrep -i threadnetwork-service
07-21 10:43:05.048 0 0 I init : Parsing file /apex/com.android.hardware.threadnetwork/etc/threadnetwork-service.rc...
07-21 10:59:27.233 580 580 W android.hardware.threadnetwork-service: ThreadChip binder is unlinked
07-21 10:59:27.233 580 580 I android.hardware.threadnetwork-service: Close IThreadChip successfully
07-21 10:59:27.385 580 580 I android.hardware.threadnetwork-service: Open IThreadChip successfully
অথবা ওটি-ডেমন লগের জন্য গ্রেপ:
adb logcat | egrep -i ot-daemon
07-21 10:43:48.741 0 0 I init : starting service 'ot-daemon'...
07-21 10:43:48.742 0 0 I init : Created socket '/dev/socket/ot-daemon/thread-wpan.sock', mode 660, user 1084, group 1084
07-21 10:43:48.762 0 0 I init : ... started service 'ot-daemon' has pid 2473
07-21 10:46:26.320 2473 2473 I ot-daemon: [I] P-Daemon------: Session socket is ready
07-21 10:46:30.290 2473 2473 W ot-daemon: [W] P-Daemon------: Daemon read: Connection reset by peer
07-21 10:48:07.264 2473 2473 I ot-daemon: [INFO]-BINDER--: Start joining...
07-21 10:48:07.267 2473 2473 I ot-daemon: [I] Settings------: Saved ActiveDataset
07-21 10:48:07.267 2473 2473 I ot-daemon: [I] DatasetManager: Active dataset set
07-21 10:48:07.273 2473 2473 I ot-daemon: [I] DnssdServer---: Started
07-21 10:48:07.273 2473 2473 I ot-daemon: [N] Mle-----------: Role disabled -> detached
07-21 10:48:07.273 2473 2473 I ot-daemon: [I] Mle-----------: AttachState Idle -> Start
07-21 10:48:07.273 2473 2473 I ot-daemon: [I] Notifier------: StateChanged (0x111fd11d) [Ip6+ Role LLAddr MLAddr KeySeqCntr Ip6Mult+ Channel PanId NetName ExtPanId ...
07-21 10:48:07.273 2473 2473 I ot-daemon: [I] Notifier------: StateChanged (0x111fd11d) ... NetworkKey PSKc SecPolicy NetifState ActDset]
Cuttlefish থ্রেড HAL পরিষেবাটি ডিফল্ট থ্রেড HAL পরিষেবা এবং OpenThread সিমুলেটেড RCP বাইনারি ব্যবহার করে, এটি কীভাবে কাজ করে তার জন্য পরবর্তী বিভাগটি দেখুন।
ডিফল্ট HAL পরিষেবা
থ্রেড HAL API এর সাথে একটি ডিফল্ট HAL পরিষেবা অন্তর্ভুক্ত করা হয়েছে। ডিফল্ট HAL পরিষেবা সিমুলেটেড এবং বাস্তব RCP উভয় ডিভাইস সমর্থন করে। এটি একটি ঐচ্ছিক RCP ডিভাইস URL পায় এবং যদি URL প্রদান না করা হয়, তাহলে এটি সিমুলেটেড RCP ডিভাইসে ডিফল্ট হয়।
ফাইলে hardware/interfaces/threadnetwork/aidl/default/threadnetwork-service.rc
:
service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service class hal user thread_network
এটি এর সমতুল্য:
service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service spinel+hdlc+forkpty:///apex/com.android.hardware.threadnetwork/bin/ot-rcp?forkpty-arg=1 class hal user thread_network
বাস্তব RCP ডিভাইসের জন্য, এটি SPI এবং UART উভয় ইন্টারফেসকে সমর্থন করে এবং আপনি যথাক্রমে স্কিমা spinel+spi://
, spinel+hdlc+uart://
এবং spinel+socket://
দিয়ে ডিভাইসটিকে নির্দিষ্ট করতে পারেন।
বিক্রেতা APEX বুঝুন
টিথারিং মেইনলাইন মডিউলের থ্রেড স্ট্যাকের মতো, কাটলফিশে ডিফল্ট থ্রেড এইচএএল পরিষেবাটিও একটি এপেক্স মডিউলে প্যাকেজ করা হয়। কিন্তু এটি একটি ভেন্ডর APEX মডিউল যা /vendor/apex/
তে ইনস্টল করা হবে (মডিউলের আর্টিফ্যাক্টগুলি /apex/com.android.hardware.threadnetwork/
এ আনজিপ করা হবে)।
apex { name: "com.android.hardware.threadnetwork", manifest: "manifest.json", file_contexts: "file_contexts", key: "com.android.hardware.key", certificate: ":com.android.hardware.certificate", updatable: false, vendor: true, binaries: [ "android.hardware.threadnetwork-service", "ot-rcp", ], prebuilts: [ "threadnetwork-default.xml", // vintf_fragment "threadnetwork-service.rc", // init_rc "android.hardware.thread_network.prebuilt.xml", // permission ], }
আপনার নিজের HAL APEX মডিউল তৈরি করার সময় আপনাকে মনোযোগ দিতে বা পরিবর্তন করতে হবে এমন কয়েকটি গুরুত্বপূর্ণ কনফিগারেশন রয়েছে:
file_contexts
: এটি এই APEX মডিউলে সরবরাহ করা বাইনারি/ডেটা ফাইল বা HAL পরিষেবার অ্যাক্সেস করার জন্য প্রয়োজনীয় ফাইলগুলি বর্ণনা করে (উদাহরণস্বরূপ, RCP ডিভাইস)। এটি আপনাকে হার্ডওয়্যার RCP ডিভাইস অ্যাক্সেস করার জন্য আপনার HAL পরিষেবার জন্য নির্দিষ্ট সেপলিসি নিয়ম নির্দিষ্ট করতে দেয়।binaries
: এই APEX মডিউলে বিতরিত বাইনারি ফাইলthreadnetwork-service.rc
: কিভাবে HAL পরিষেবা শুরু হবে। আপনাকে এখানে RCP ডিভাইস পাথ উল্লেখ করতে হবে।android.hardware.thread_network.prebuilt.xml
:android.hardware.thread_network
হার্ডওয়্যার বৈশিষ্ট্য সংজ্ঞায়িত করে। আপনার ডিভাইসে থ্রেড হার্ডওয়্যার সমর্থন আছে কিনা তা জানার জন্য Android সিস্টেমের জন্য এটি প্রয়োজনীয়। অন্যথায়, Android থ্রেড স্ট্যাক সক্ষম করা হবে না।
আপনার HAL পরিষেবা তৈরি করুন
আপনি একজন অ্যান্ড্রয়েড ডিভাইস ডেভেলপার বা সিলিকন বিক্রেতা হোন না কেন, আপনার থ্রেড চিপের জন্য OT RCP ফার্মওয়্যার তৈরির সাথে আপনার পরিচিত হওয়া উচিত। নিম্নলিখিত নির্দেশাবলী অনুমান করে যে হার্ডওয়্যার চিপ সঠিকভাবে তারযুক্ত এবং যাচাই করা হয়েছে।
আপনার HAL APEX তৈরি করার সবচেয়ে সহজ উপায় হল ডিফল্ট HAL APEX এর বাইনারি এবং প্রিবিল্ট দিয়ে একটি নতুন APEX তৈরি করা। উদাহরণস্বরূপ, যদি আপনার কোম্পানি হয় Banana এবং আপনার ডিভাইসের RCP ডিভাইসটি /dev/ttyACM0
হয়, তাহলে আপনার থ্রেড HAL APEX এর মত দেখাবে:
-
Android.bp
:
prebuilt_etc { name: "banana-threadnetwork-service.rc", src: "banana-threadnetwork-service.rc", installable: false, } apex { name: "com.banana.android.hardware.threadnetwork", manifest: "manifest.json", file_contexts: "file_contexts", key: "com.android.hardware.key", certificate: ":com.android.hardware.certificate", updatable: false, vendor: true, binaries: [ "android.hardware.threadnetwork-service", ], prebuilts: [ "banana-threadnetwork-service.rc", "threadnetwork-default.xml", "android.hardware.thread_network.prebuilt.xml", ], }
-
file_contexts
:
(/.*)? u:object_r:vendor_file:s0 /etc(/.*)? u:object_r:vendor_configs_file:s0 /bin/hw/android\.hardware\.threadnetwork-service u:object_r:hal_threadnetwork_default_exec:s0 /dev/ttyACM0 u:object_r:threadnetwork_rcp_device:s0
প্রথম কলামের ফাইল পাথগুলি /apex/com.android.hardware.threadnetwork/
এর সাথে সম্পর্কিত।
-
threadnetwork-service.rc
:
service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200 class hal user root
-
manifest.json
:
{ "name": "com.android.hardware.threadnetwork", "version": 1 }
ধরে নিচ্ছি আপনি অরেঞ্জ নামে একটি নতুন ডিভাইস তৈরি করছেন, আপনার ডিভাইসের নির্দিষ্ট কনফিগারেশন ডিরেক্টরিটি এরকম হবে:
device/banana/orange/threadnetwork/ sepolicy/ Android.bp file_contexts manifest.json threadnetwork-default.xml threadnetwork-service.rc
sepolicy/
সাব-ডিরেক্টরীতে সিপলিসি নিয়মগুলি কী যুক্ত করা উচিত তার জন্য পরবর্তী বিভাগটি দেখুন।
RCP ডিভাইসের জন্য সেপলিসি নিয়ম
ডিফল্টরূপে, আপনার থ্রেড HAL পরিষেবার RCP ডিভাইসে অ্যাক্সেস নেই (উদাহরণস্বরূপ /dev/ttyACM0
), কাস্টম সেপলিসি নিয়মগুলি sepolicy/
ডিরেক্টরিতে যোগ করতে হবে।
নীচের বিষয়বস্তু সহ একটি নতুন sepolicy/threadnetwork_hal.te
ফাইল তৈরি করুন:
type threadnetwork_rcp_device, dev_type; # Allows the Thread HAL service to read / write the Thread RCP device allow hal_threadnetwork_default threadnetwork_rcp_device:chr_file rw_file_perms;
একসাথে রাখুন
এখন আপনি থ্রেড যোগ করার জন্য প্রয়োজনীয় প্রায় সমস্ত কোড শেষ করেছেন, শেষ ধাপ হল আপনার ডিভাইসের ছবিতে থ্রেড HAL APEX এবং সেপলিসি নিয়ম যোগ করা।
আপনি আপনার ডিভাইসের Makefile
নীচের কোড যোগ করে এটি করতে পারেন (উদাহরণস্বরূপ, device.mk
):
PRODUCT_PACKAGES += com.banana.hardware.threadnetwork BOARD_SEPOLICY_DIRS += device/banana/orange/threadnetwork/sepolicy
যদি সবকিছু কাজ করে, এখন আপনি থ্রেড এইচএএল পরিষেবা লগ দেখতে সক্ষম হবেন:
adb logcat | egrep -i threadnetwork-service
08-13 13:26:41.751 477 477 I android.hardware.threadnetwork-service: ServiceName: android.hardware.threadnetwork.IThreadChip/chip0, Url: spinel+spi
08-13 13:26:41.751 477 477 I android.hardware.threadnetwork-service: Thread Network HAL is running
08-13 13:26:55.165 477 477 I android.hardware.threadnetwork-service: Open IThreadChip successfully
এবং ot-daemon
লগটি এরকম হবে:
adb logcat -s ot-daemon
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-AGENT---: Running OTBR_AGENT/Unknown
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-AGENT---: Thread version: 1.3.0
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-AGENT---: Thread interface: thread-wpan
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-AGENT---: Backbone interface is not specified
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-AGENT---: Radio URL: threadnetwork_hal://binder?none
08-13 13:26:55.157 1019 1019 I ot-daemon: [NOTE]-ILS-----: Infra link selected:
08-13 13:26:55.160 1019 1019 I ot-daemon: [I] Platform------: [HAL] Wait for getting the service android.hardware.threadnetwork.IThreadChip/chip0 ...
08-13 13:26:55.165 1019 1019 I ot-daemon: [I] Platform------: [HAL] Successfully got the service android.hardware.threadnetwork.IThreadChip/chip0
08-13 13:26:55.275 1019 1019 I ot-daemon: [I] P-RadioSpinel-: RCP reset: RESET_UNKNOWN
08-13 13:26:55.276 1019 1019 I ot-daemon: [I] P-RadioSpinel-: Software reset RCP successfully
08-13 13:26:55.277 1019 1019 I ot-daemon: [I] P-RadioSpinel-: RCP reset: RESET_POWER_ON
08-13 13:26:55.322 1019 1019 I ot-daemon: [I] ChildSupervsn-: Timeout: 0 -> 190
08-13 13:26:55.324 1019 1019 I ot-daemon: [I] RoutingManager: Initializing - InfraIfIndex:0
08-13 13:26:55.324 1019 1019 I ot-daemon: [I] InfraIf-------: Init infra netif 0
08-13 13:26:55.324 1019 1019 I ot-daemon: [I] Settings------: Read BrUlaPrefix fd7b:cc45:ff06::/48
08-13 13:26:55.324 1019 1019 I ot-daemon: [N] RoutingManager: BR ULA prefix: fd7b:cc45:ff06::/48 (loaded)
08-13 13:26:55.324 1019 1019 I ot-daemon: [I] RoutingManager: Generated local OMR prefix: fd7b:cc45:ff06:1::/64
08-13 13:26:55.324 1019 1019 I ot-daemon: [N] RoutingManager: Local on-link prefix: fdde:ad00:beef:cafe::/64
08-13 13:26:55.324 1019 1019 I ot-daemon: [I] RoutingManager: Enabling
কাস্টমাইজেশন
থ্রেড মেইনলাইন মডিউল (এটি আসলে "টিথারিং" মডিউলের একটি অংশ) কয়েকটি ওভারলেয়েবল কনফিগারেশন সরবরাহ করে যা স্ট্যাক আচরণ কাস্টমাইজ করার জন্য বিক্রেতাদের দ্বারা নির্দিষ্ট করা যেতে পারে। সম্পূর্ণ তালিকার জন্য config_thread.xml দেখুন।
সাধারণত, আপনাকে অবশ্যই আপনার বিক্রেতা বা পণ্যের মানগুলিতে config_thread_vendor_name
, config_thread_vendor_oui
এবং config_thread_model_name
পরিবর্তন করতে হবে। এই মানগুলিকে _meshcop._udp
mDNS পরিষেবাতে অন্তর্ভুক্ত করা হবে যা সর্বদা একটি থ্রেড বর্ডার রাউটার দ্বারা বিজ্ঞাপন দেওয়া হয়।
ওভারলে যোগ করতে, আপনাকে আপনার অরেঞ্জ ডিভাইসের জন্য একটি নতুন ConnectivityOverlayOrange
runtime_resource_overlay লক্ষ্য তৈরি করতে হবে। device/banana/orange/rro_overlays
অধীনে একটি নতুন ConnectivityOverlay/
ডিরেক্টরি তৈরি করুন এবং এতে নীচের বিষয়বস্তু তৈরি করুন:
device/banana/orange/rro_overlays/ConnectivityOverlay/ res values config_thread.xml Android.bp AndroidManifest.xml
-
Android.bp
:
package { default_applicable_licenses: ["Android-Apache-2.0"], } runtime_resource_overlay { name: "ConnectivityOverlayOrange", manifest: "AndroidManifest.xml", resource_dirs: ["res"], certificate: "platform", product_specific: true, sdk_version: "current", }
-
AndroidManifest.xml
:
<!-- Orange overlays for the Connectivity module --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.banana.android.connectivity.resources.orange" android:versionCode="1" android:versionName="1.0"> <application android:hasCode="false" /> <!-- If your device uses google-signed mainline modules, the targetPackage needs to be "com.google.android.connectivity.resources", otherise, it should be "com.android.connectivity.resources" --> <overlay android:targetPackage="com.google.android.connectivity.resources" android:targetName="ServiceConnectivityResourcesConfig" android:isStatic="true" android:priority="1"/> </manifest>
-
config_thread.xml
:
<string translatable="false" name="config_thread_vendor_name">Banana Inc.</string> <string translatable="false" name="config_thread_vendor_oui">AC:DE:48</string> <string translatable="false" name="config_thread_model_name">Orange</string>
HAL APEX-এর মতো, আপনাকে আপনার device.mk
ফাইলে ওভারলে অ্যাপ যোগ করতে হবে:
PRODUCT_PACKAGES += \ ConnectivityOverlayOrange</code>
যদি সবকিছু কাজ করে, আপনি দেখতে পাবেন যে ot-daemon
লগের একেবারে শুরুতে বিক্রেতা এবং মডেলের নাম লগ করে:
adb logcat -s ot-daemon
07-22 15:31:37.693 1472 1472 I ot-daemon: [I] P-Daemon------: Session socket is ready
07-22 15:31:37.693 1472 1472 I ot-daemon: [I] Cli-----------: Input: state
07-22 15:31:37.693 1472 1472 I ot-daemon: [I] Cli-----------: Output: disabled
07-22 15:31:37.693 1472 1472 I ot-daemon: [I] Cli-----------: Output: Done
07-22 15:31:37.693 1472 1472 W ot-daemon: [W] P-Daemon------: Daemon read: Connection reset by peer
07-22 15:31:50.091 1472 1472 I ot-daemon: [I] P-Daemon------: Session socket is ready
07-22 15:31:50.091 1472 1472 I ot-daemon: [I] Cli-----------: Input: factoryreset
07-22 15:31:50.092 1472 1472 I ot-daemon: [I] Settings------: Wiped all info
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-ADPROXY-: Stopped
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-DPROXY--: Stopped
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-BA------: Stop Thread Border Agent
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-BA------: Unpublish meshcop service Banana Inc. Orange #4833._meshcop._udp.local
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-MDNS----: Removing service Banana Inc. Orange #4833._meshcop._udp
07-22 15:31:50.092 1472 1472 I ot-daemon: [INFO]-MDNS----: Unpublishing service Banana Inc. Orange #4833._meshcop._udp listener ID = 0
গুগল হোমের সাথে সামঞ্জস্যপূর্ণ হন
অতিরিক্তভাবে, আপনি যদি আপনার বর্ডার রাউটারটিকে Google হোম ইকোসিস্টেম দ্বারা ব্যবহার করতে চান, আপনি এই কনফিগারেশনটি config_thread.xml
এ উল্লেখ করতে পারেন:
<string-array name="config_thread_mdns_vendor_specific_txts"> <item>vgh=1</item> </string-array>
টেস্টিং
আপনার ডিভাইসটি এখন থ্রেড 1.3+ বর্ডার রাউটার স্পেসিফিকেশনের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। থ্রেড সার্টিফিকেশন প্রোগ্রামে পাঠানোর আগে, সামঞ্জস্য নিশ্চিত করতে কয়েকটি Android xTS পরীক্ষা করা উচিত।
VTS পরীক্ষা নিশ্চিত করে যে থ্রেড HAL পরিষেবা আপনার ডিভাইসে প্রত্যাশিতভাবে কাজ করে। আপনি কমান্ড দিয়ে পরীক্ষা চালাতে পারেন
atest VtsHalThreadNetworkTargetTest
CTS পরীক্ষা নিশ্চিত করে যে থ্রেড APIগুলি আপনার ডিভাইসে প্রত্যাশিতভাবে কাজ করে। আপনি কমান্ড দিয়ে পরীক্ষা চালাতে পারেন
atest CtsThreadNetworkTestCases
ইন্টিগ্রেশন পরীক্ষা আপনার ডিভাইসে থ্রেড মেইনলাইন কোড কীভাবে কাজ করে তার আরও গুণমানের গ্যারান্টি প্রদান করে। আপনি কমান্ড দিয়ে পরীক্ষা চালাতে পারেন
atest ThreadNetworkIntegrationTests
আপনি সেই প্রকাশিত টেস্ট স্যুটগুলির সাথে কীভাবে VTS/CTS/MTS পরীক্ষা চালাবেন সে সম্পর্কে আরও নির্দেশাবলী খুঁজে পেতে পারেন:
- https://source.android.com/docs/core/tests/vts
- https://source.android.com/docs/compatibility/cts/run
- https://docs.partner.android.com/mainline/test/mts (এই লিঙ্কটি অ্যাক্সেস করার জন্য আপনাকে একজন অংশীদার হতে হবে)
থ্রেড ডেমো অ্যাপ দিয়ে পরীক্ষা করুন
Cuttlefish ডিভাইসের মতো, আপনি আপনার সিস্টেমের ছবিতে থ্রেড ডেমো অ্যাপ যোগ করতে পারেন:
# ThreadNetworkDemoApp for testing PRODUCT_PACKAGES_DEBUG += ThreadNetworkDemoApp
মনে রাখবেন যে আপনার এটি শুধুমাত্র ডিবাগ/ইঞ্জি ভেরিয়েন্টে যোগ করা উচিত (উদাহরণস্বরূপ, PRODUCT_PACKAGES_DEBUG
) কারণ এটি শেষ ভোক্তাদের জন্য ব্যবহারকারী বিল্ডে অন্তর্ভুক্ত করার কথা নয়।