diff --git a/tools/harness-thci/OpenThread.py b/tools/harness-thci/OpenThread.py index 04a12aa0f..467286cf5 100644 --- a/tools/harness-thci/OpenThread.py +++ b/tools/harness-thci/OpenThread.py @@ -55,6 +55,8 @@ class OpenThread(IThci): isPowerDown = False # indicate if Thread device experiences a power down event isWhiteListEnabled = False # indicate if Thread device enables white list filter isBlackListEnabled = False # indicate if Thread device enables black list filter + _whiteList = set() # cache whitelist devices when white list filter is enabled + _blackList = set() # cache blacklist devices when black list filter is enabled isActiveCommissioner = False # indicate if Thread device is an active commissioner _is_net = False # whether device is through ser2net _lines = None # buffered lines read from device @@ -462,9 +464,23 @@ class OpenThread(IThci): else: self.hasActiveDatasetToCommit = False + # restore whitelist if rejoin after reset + if self.isPowerDown and self.isWhiteListEnabled: + self.__enableWhiteList() + for addr in self._whiteList: + self.addAllowMAC(addr) + + # restore blacklist if rejoin after reset + if self.isPowerDown and self.isBlackListEnabled: + self.__enableBlackList() + for addr in self._blackList: + self.addBlockedMAC(addr) + if self.__sendCommand('ifconfig up')[0] == 'Done': self.__setRouterSelectionJitter(1) - return self.__sendCommand('thread start')[0] == 'Done' + if self.__sendCommand('thread start')[0] == 'Done': + self.isPowerDown = False + return True else: return False except Exception, e: @@ -903,7 +919,11 @@ class OpenThread(IThci): """ print '%s call addBlockedMAC' % self.port print xEUI - macAddr = self.__convertLongToString(xEUI) + if isinstance(xEUI, str): + macAddr = xEUI + else: + macAddr = self.__convertLongToString(xEUI) + try: # if blocked device is itself if macAddr == self.mac: @@ -915,6 +935,7 @@ class OpenThread(IThci): cmd = 'blacklist add %s' % macAddr print cmd + self._blackList.add(macAddr) return self.__sendCommand(cmd)[0] == 'Done' except Exception, e: ModuleHelper.WriteIntoDebugLogger("addBlockedMAC() Error: " + str(e)) @@ -931,13 +952,18 @@ class OpenThread(IThci): """ print '%s call addAllowMAC' % self.port print xEUI - macAddr = self.__convertLongToString(xEUI) + if isinstance(xEUI, str): + macAddr = xEUI + else: + macAddr = self.__convertLongToString(xEUI) + try: if not self.isWhiteListEnabled: self.__enableWhiteList() cmd = 'whitelist add %s' % macAddr print cmd + self._whiteList.add(macAddr) return self.__sendCommand(cmd)[0] == 'Done' except Exception, e: ModuleHelper.WriteIntoDebugLogger("addAllowMAC() Error: " + str(e)) @@ -955,6 +981,7 @@ class OpenThread(IThci): try: if self.__sendCommand('blacklist clear')[0] == 'Done': self.__disableBlackList() + self._blackList.clear() return True else: return False @@ -974,6 +1001,7 @@ class OpenThread(IThci): try: if self.__sendCommand('whitelist clear')[0] == 'Done': self.__disableWhiteList() + self._whiteList.clear() self.clearBlockList() return True else: @@ -1096,8 +1124,8 @@ class OpenThread(IThci): def powerDown(self): """power down the Thread device""" print '%s call powerDown' % self.port - self.isPowerDown = True self._sendline('reset') + self.isPowerDown = True def powerUp(self): """power up the Thread device""" @@ -1120,6 +1148,7 @@ class OpenThread(IThci): print '%s call reboot' % self.port try: self._sendline('reset') + self.isPowerDown = True time.sleep(3) self.__startOpenThread() @@ -1214,6 +1243,14 @@ class OpenThread(IThci): try: self._sendline('factoryreset') self._read() + if self.isWhiteListEnabled: + self.isWhiteListEnabled = False + self.WhiteList.clear() + + if self.isBlackListEnabled: + self.isBlackListEnabled = False + self.BlackList.clear() + except Exception, e: ModuleHelper.WriteIntoDebugLogger("reset() Error: " + str(e)) @@ -1261,7 +1298,9 @@ class OpenThread(IThci): self.setActiveTimestamp(self.activetimestamp) self.isWhiteListEnabled = False + self._whiteList.clear() self.isBlackListEnabled = False + self._blackList.clear() self.isActiveCommissioner = False except Exception, e: ModuleHelper.WriteIntoDebugLogger("setDefaultValue() Error: " + str(e)) @@ -1373,6 +1412,7 @@ class OpenThread(IThci): print timeout try: self._sendline('reset') + self.isPowerDown = True time.sleep(timeout) if self.deviceRole == Thread_Device_Role.SED: