Certification Automation の設定

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

以下のすべてのインストールと構成の手順は、GRL Test Harness ソフトウェアを実行している Windows マシンで行われます。先に進む前に、最新の GRL スレッド テストハーネスをダウンロードしてインストールします。

インストール後、テスト対象デバイス(DUT)には次の 2 つの自動化方法があります。

  1. OpenThread ハーネス自動化ツール
  2. テストハーネスの自動 DUT モード

OpenThread ハーネス自動化ツール

インストール

  1. 次のソフトウェアをインストールします。
    • Python 2.7
    • Windows 用 Git(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
    を追加します。

testbed サポート(混合)

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

混合 testbed を使用するには、追加の構成が必要です。

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

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

トポロジ構成ファイル内の参照デバイスとして有効な値は次のとおりです。

トポロジ構成ファイルの値 テストハーネスのリファレンス デバイス
ARM ARM: Firefly 6LoWPAN シールド搭載 NXP FRDM-K64F
NXP NXP(フリースケール): 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

テストハーネスの自動 DUT モード

GRL テストハーネス ソフトウェアは、高度な自動検出機能(Auto DUT)を提供し、スレッドのリファレンス スタック ベンダーの検証プロセスを加速します。

OpenThread には、サンプル スレッドホスト コントローラ インターフェース(THCI)が用意されています。これにより、テストハーネスはコンポーネントまたはプロダクトをリファレンス プラットフォームの一つであるかのように制御できます。特定のプラットフォームのシリアルポート特性に応じて、DUT は次のいずれかを行うことができます。

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

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

  1. GRL テストハーネスが開いている場合は閉じます。
  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. GoldenDeviceHardwareIds 配列の OpenThread グループを、デバイスの VID と PID に更新します。
      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 テストハーネスが開いている場合は閉じます。
  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. C:\GRL\Thread1.1\Web\data\deviceInputFields.xml を新しい DEVICE セクションで更新します。ここで、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 = {
      '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'}
      の新しいプラットフォーム グループを GoldenDeviceHardwareIds に追加します。
  8. 自動 DUT モードを有効にします

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

上記の 2 つの構成オプションのいずれかが完了すると、次のようになります。

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