認定資格の自動化の設定

認定テストを自動化するには、追加の設定が必要です。

以下のインストールと構成の手順はすべて、GRL Test Harness ソフトウェアを実行している Windows マシンで行います。続行する前に、最新の GRL Thread Test Harness をダウンロードしてインストールします。

インストールが完了すると、テスト対象デバイス(DUT)の自動化方法が 2 つあります。

  1. OpenThread Harness Automation Tool
  2. テストハーネスの自動 DUT モード

OpenThread Harness Automation Tool

インストール

  1. 次のソフトウェアをインストールします。
    • Python 2.7
    • Git for Windows(Bash のサポートを強く推奨)
  2. OpenThread リポジトリのクローンを作成して自動化スクリプトを取得します。
    git clone https://github.com/openthread/openthread
    
  3. Python の要件をインストールします。
    cd tools/harness-automation
    pip install -r requirements.txt
    
  4. Google ChromeChromeDriver の両方をインストールします。

設定

  1. 自動化ツールの構成ファイルを作成します。
    cp autothreadharness/settings_sample.py autothreadharness/settings.py
    
  2. ファイル内の手順に沿って、新しい構成ファイルを更新します。
  3. C:\GRL\Thread1.1\Config\Configuration.ini にあるテストハーネス構成ファイルに次のパラメータを追加します。
    BrowserAutoNavigate = False

混合テストベッドのサポート

Harness Automation Tool は、各テストケースで使用される参照デバイスがすべて同じデバイスではなく、デバイスの混合セットである混合テストベッドもサポートしています。たとえば、すべてのテストケースで OpenThread を実行する 32 個の TI CC2538 ボードを使用する代わりに、各テストケースで 4 つの Thread 参照デバイスを必要に応じて組み合わせることができます。

混合テストベッドを使用するには、追加の構成が必要です。

  1. C:\GRL\Thread1.1\Config\Configuration.ini にあるテストハーネス構成ファイルに、次の追加パラメータを追加します。
    EnableDeviceSelection = True
  2. Thread Group からトポロジ構成ファイルをダウンロードします。このファイルを C:\GRL\Thread1.1\Thread_Harness\TestScriptsTopologyConfig.txt として追加します。このファイルには、各テストケースの各ロールで使用するリファレンス デバイスの詳細が記載されています。

Thread Group が提供するトポロジ構成ファイルは、他の混合ベッド構成用に変更できますが、公式の認証では元の構成を使用する必要があります。

トポロジ構成ファイルで参照デバイスに使用できる有効な値は次のとおりです。

トポロジ構成ファイルの値 テストハーネスのリファレンス デバイス
ARM ARM: NXP FRDM-K64F と Firefly 6LoWPAN Shield
NXP NXP(Freescale): USB-KW24D512 ドングル
OpenThread OpenThread: TI CC2538DK
SiLabs Silabs: EM358x USB Stick

トポロジ構成ファイルの各テストケース エントリは、次の例のように role:device ペアでフォーマットされ、別々の行に記述する必要があります。

5.3.10-Leader:NXP,Router_1:OpenThread,BorderRouter:OpenThread,MED_1:ARM

テストハーネス Auto DUT モード

GRL Test Harness ソフトウェアには、Thread リファレンス スタック ベンダーの検証プロセスを加速する高度な自動検出機能(Auto DUT)が用意されています。

OpenThread は、参照プラットフォームの 1 つであるかのようにテストハーネスがコンポーネントやプロダクトを制御できるようにする Thread Host Controller Interface(THCI)の例を提供します。特定のプラットフォームのシリアルポートの特性に応じて、DUT は次のいずれかになります。

既存の OpenThread リファレンス プラットフォームとして機能する

DUT のシリアルポートが 115200 8-N-1 の設定で機能し、デバイスが物理デバイスのリセットごとに正しく応答する場合(たとえば、Windows マシンへのデバイスの有効な接続を確認する場合)、プラットフォームは OpenThread THCI ツールを使用できます。このツールを使用すると、テスト中にデバイスを OpenThread リファレンス プラットフォームとして機能させることができます。

  1. GRL Test Harness が開いている場合は閉じます。
  2. デバイスを Windows マシンに接続します。
  3. Python pySerial モジュールを使用して、デバイスのシリアルポートのハードウェア ID を見つけます。
    1. Windows マシンに pySerial をインストールします。
    2. Windows コマンドラインで Python を使用して、マシンに接続されているデバイスのすべてのハードウェア識別子(VID と PID)を列挙します。この出力では、1 つのデバイスが VID=1366、PID=1015 の識別子で接続されています。
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. COM ポートがすでにわかっている場合は、別のコマンドを使用できます。たとえば、COM ポートが COM10 の場合:
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  4. ゴールデン デバイス リストを更新します。
    1. C:\GRL\Thread1.1\Config\Configuration.ini を開きます。
    2. デバイスの VID と PID を使用して、GoldenDeviceHardwareIds 配列の OpenThread グループを更新します。
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':['VID:PID=10C4:EA60','VID:PID=1366:1015']}
  5. 自動 DUT モードを有効にします

新しいリファレンス プラットフォームとしての役割を果たす

DUT のシリアルポートが適切なシリアルポート設定で機能しない場合、または物理デバイスのリセット後にデバイスが正しく応答しない場合(リセット後 3 ~ 6 秒以内に読めないコードを出力する場合)、OpenThread THCI をカスタマイズして、テストハーネスでデバイスを新しいプラットフォームとして扱うことができます。

たとえば、Nordic Semiconductor nRF52840 プラットフォームを使用して THCI をカスタマイズするには:

  1. GRL Test Harness が開いている場合は閉じます。
  2. ターゲット デバイスの UART の特性に基づいて /tools/harness-thci/OpenThread.py を変更します。変更内容は、ターゲット デバイスによって異なる場合があります。Nordic nRF52840 プラットフォームの場合:

    1. OpenThread.py ファイルの名前を nRF52840.py に変更します。
    2. 「OpenThread」の最初の 3 つの出現箇所を「nRF52840」に変更します。

      >> Device : nRF52840 THCI
      >> Class : nRF52840
      
      class nRF52840(IThci):
      
    3. シリアルポートのパラメータを変更します。

      def _connect(self):
          print 'My port is %s' % self.port
          if self.port.startswith('COM'):
              self.handle = serial.Serial(self.port, 115200, timeout=0)
              time.sleep(1)
              self.handle.write('\r\n')
              time.sleep(0.1)
              self._is_net = False
          elif ':' in self.port:
              host, port = self.port.split(':')
              self.handle = socket.create_connection((host, port))
              self.handle.setblocking(0)
              self._is_net = True
          else:
              raise Exception('Unknown port schema')
          self.UIStatusMsg = self.getVersionNumber()
    4. デバイスのリセット後に読み取れないコード出力の影響をなくすため、スリープ時間を変更します。

      def powerDown(self):
          """power down the Thread device"""
          print '%s call powerDown' % self.port
          self._sendline('reset')
          self.isPowerDown = True
          time.sleep(8)  # New addition
      
      def reboot(self):
          """reset and rejoin to Thread Network without any timeout
      
          Returns:
              True: successful to reset and rejoin the Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call reboot' % self.port
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(8)  # Updated from 3 to 8
      
      def reset(self):
          """factory reset"""
          print '%s call reset' % self.port
          try:
              self._sendline('factoryreset')
              time.sleep(8)  # Updated from 3 to 8
              self._read()
      
      def resetAndRejoin(self, timeout):
          """reset and join back Thread Network with a given timeout delay
      
          Args:
              timeout: a timeout interval before rejoin Thread Network
      
          Returns:
              True: successful to reset and rejoin Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call resetAndRejoin' % self.port
          print timeout
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(timeout)
              if timeout < 8:      # Sleep a bit longer if the timeout is short
                  time.sleep(8 - timeout)
  3. 変更した nRF52840.py ファイルを C:\GRL\Thread1.1\Thread_Harness\THCI にコピーします。

  4. 新しいプラットフォームの情報をテストハーネスに追加します。

    1. プラットフォームを区別しやすくするためのアイコン(png または jpg 形式)を作成し、C:\GRL\Thread1.1\Web\images にコピーします。
    2. 新しい DEVICE セクションで C:\GRL\Thread1.1\Web\data\deviceInputFields.xml を更新します。ここで、thumbnail パラメータはアイコン ファイルです。

      <DEVICE name="nRF52840" thumbnail="nRF52840.jpg" description ="nRF52840: Nordic" THCI="nRF52840">
          <ITEM label="Serial Line"
                type="text"
                forParam="SerialPort"
                validation="COM"
                hint="eg: COM1">COM
          </ITEM>
          <ITEM label="Speed"
                type="text"
                forParam="SerialBaudRate"
                validation="baud-rate"
                hint="eg: 115200">115200
          </ITEM>
      </DEVICE>
      
  5. デバイスを Windows マシンに接続します。

  6. Python pySerial モジュールを使用して、デバイスのシリアルポートのハードウェア ID を見つけます。

    1. Windows マシンに pySerial をインストールします。
    2. Windows コマンドラインで Python を使用して、マシンに接続されているデバイスのすべてのハードウェア識別子(VID と PID)を列挙します。この出力では、1 つのデバイスが VID=1366、PID=1015 の識別子で接続されています。
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. COM ポートがすでにわかっている場合は、別のコマンドを使用できます。たとえば、COM ポートが COM10 の場合:
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  7. ゴールデン デバイスのリストを更新します。

    1. C:\GRL\Thread1.1\Config\Configuration.ini を開きます。
    2. デバイスの VID と PID を使用して、GoldenDeviceHardwareIds 配列に新しいプラットフォーム グループを追加します。
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':'VID:PID=10C4:EA60',
      'nRF52840': 'VID:PID=1366:1015'}
  8. 自動 DUT モードを有効にします

自動 DUT モードを有効にする

上記の 2 つの構成オプションのいずれかが完了したら:

  1. GRL Test Harness を開くと、デバイス/ポートが新しい参照デバイスとして表示されます。
  2. [サポートされているハードウェア] リストの下にある [Enable Auto DUT Device Selection] チェックボックスをオンにします。
  3. ターゲット デバイス/ポートの下にある [Set as DUT] ラジオボタンを選択して、デバイスを DUT として設定します。
OT 認定自動 DUT