একটি অ্যান্ড্রয়েড বর্ডার রাউটার তৈরি করুন

অ্যান্ড্রয়েড কোড অনুসন্ধানে উৎস দেখুন

আপনি যদি অ্যান্ড্রয়েড ডিভাইস বা থ্রেড চিপ বিক্রেতা না হন তবে আপনি এখন পড়া বন্ধ করতে পারেন।

এই দস্তাবেজটি আপনাকে সর্বশেষ AOSP সোর্স কোড সহ একটি নতুন Android-ভিত্তিক থ্রেড বর্ডার রাউটার ডিভাইস তৈরি করার পদক্ষেপের মাধ্যমে নিয়ে যায়। এই নথিটি অনুসরণ করে, আপনি শিখবেন:

  1. অ্যান্ড্রয়েডে থ্রেড সমর্থনের সামগ্রিক আর্কিটেকচার এবং স্থিতি
  2. কিভাবে আপনার নিজের থ্রেড HAL পরিষেবা তৈরি করবেন
  3. কীভাবে আপনার ডিভাইসটিকে গুগল হোমের সাথে সামঞ্জস্যপূর্ণ করবেন
  4. কিভাবে আপনার থ্রেড বর্ডার রাউটার পরীক্ষা করবেন

আপনার যদি সমর্থনের প্রয়োজন হয়, GitHub- এ একটি সমস্যা ফাইল করুন বা আপনার কোনো প্রশ্ন থাকলে একটি আলোচনা খুলুন।

ওভারভিউ

অ্যান্ড্রয়েড থ্রেড স্ট্যাকটি OpenThread এবং ot-br-posix উপর ভিত্তি করে তৈরি করা হয়েছে যা GitHub-এ Google ওপেন-সোর্স করেছে। একইভাবে ওপেন থ্রেড একটি পাবলিক গিটহাব রিপোজিটরিতে তৈরি করা হয়, তাই অ্যান্ড্রয়েড থ্রেড স্ট্যাকটি পাবলিক AOSP কোডবেসে তৈরি করা হয়। সমস্ত বৈশিষ্ট্য এবং বাগ সংশোধনগুলি প্রথমে AOSP-এ জমা দেওয়া হয়৷ এটি বিক্রেতাদের নিয়মিত অ্যান্ড্রয়েড রিলিজের জন্য অপেক্ষা না করে সর্বশেষ থ্রেড সংস্করণগুলি গ্রহণ করা শুরু করতে দেয়৷

স্থাপত্য

পুরো অ্যান্ড্রয়েড থ্রেড স্ট্যাক দুটি প্রধান উপাদান নিয়ে গঠিত: একটি জেনেরিক সিস্টেম পার্টিশনে কোর থ্রেড স্ট্যাক এবং একটি ভেন্ডার পার্টিশনে থ্রেড HAL পরিষেবা। ডিভাইস বিক্রেতাদের সাধারণত শুধুমাত্র যত্ন নেওয়া এবং HAL পরিষেবা তৈরি করা প্রয়োজন।

android-থ্রেড-খিলান

অ্যান্ড্রয়েড থ্রেড স্ট্যাক কীভাবে কাজ করে তার একটি সংক্ষিপ্ত সারসংক্ষেপ রয়েছে: - সিস্টেম সার্ভারে একটি জাভা থ্রেড সিস্টেম পরিষেবা রয়েছে যা পুরো স্ট্যাক পরিচালনা করে - থ্রেড সিস্টেম API প্রদান করে, thread-wpan টানেল ইন্টারফেস তৈরি করে, থ্রেড নেটওয়ার্ক নিবন্ধন করে সংযোগ পরিষেবা এবং বর্ডার রাউটিং এবং বিজ্ঞাপন প্রক্সি কার্যকারিতা প্রয়োগ করে। - মূল থ্রেড/ওপেন থ্রেড স্ট্যাকটি একটি অ-সুবিধাপ্রাপ্ত স্বতন্ত্র নেটিভ প্রসেসে হোস্ট করা হয় যার নাম দেওয়া হয় ot-daemonot-daemon সরাসরি ব্যক্তিগত AIDL API-এর মাধ্যমে Java সিস্টেম পরিষেবা দ্বারা পরিচালিত হয় এবং এটি Thread HAL API-এর মাধ্যমে থ্রেড হার্ডওয়্যার রেডিও অ্যাক্সেস করে। - একটি বিক্রেতা-প্রদত্ত থ্রেড HAL পরিষেবা অবশ্যই থ্রেড HAL API প্রয়োগ করবে৷ এটি সাধারণত একটি RCP হিসাবে কাজ করে এবং স্পিনেল প্রোটোকল প্রয়োগ করে।

কোড কোথায়?

উন্নয়ন পরিবেশ সেট আপ করুন

অ্যান্ড্রয়েড ডিভাইস বিক্রেতারা যারা ইতিমধ্যেই ডিভাইসের জন্য একটি অ্যান্ড্রয়েড ডেভেলপমেন্ট এনভায়রনমেন্ট স্থাপন করেছেন তারা এই বিভাগটি এড়িয়ে যেতে পারেন।

আপনি যদি অ্যান্ড্রয়েড ইকোসিস্টেমে নতুন হন বা আপনি একজন সিলিকন বিক্রেতা হন যিনি আপনার থ্রেড চিপকে অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ করতে চান এবং ডিভাইস বিক্রেতাদের জন্য সহায়তা প্রদান করতে চান, পড়তে থাকুন।

অ্যান্ড্রয়েড বিকাশকারী কোডল্যাব অনুসরণ করুন

প্রথমবার আপনার অ্যান্ড্রয়েড ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে, নিম্নলিখিত কোডল্যাব ব্যবহার করুন: 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 পরীক্ষা চালাবেন সে সম্পর্কে আরও নির্দেশাবলী খুঁজে পেতে পারেন:

থ্রেড ডেমো অ্যাপ দিয়ে পরীক্ষা করুন

Cuttlefish ডিভাইসের মতো, আপনি আপনার সিস্টেমের ছবিতে থ্রেড ডেমো অ্যাপ যোগ করতে পারেন:

# ThreadNetworkDemoApp for testing
PRODUCT_PACKAGES_DEBUG += ThreadNetworkDemoApp

মনে রাখবেন যে আপনার এটি শুধুমাত্র ডিবাগ/ইঞ্জি ভেরিয়েন্টে যোগ করা উচিত (উদাহরণস্বরূপ, PRODUCT_PACKAGES_DEBUG ) কারণ এটি শেষ ভোক্তাদের জন্য ব্যবহারকারী বিল্ডে অন্তর্ভুক্ত করার কথা নয়।