/** * Creates a PowerDescriptor * * @param currentPowerMode * @param availablePowerSources * @param currentPowerSource * @param powerLevel */ public PowerDescriptor(int currentPowerMode, int availablePowerSources, int currentPowerSource, int powerLevel) { setCurrentPowerMode(currentPowerMode); setAvailablePowerSources(availablePowerSources); setCurrentPowerSource(currentPowerSource); setCurrentPowerLevel(powerLevel); }
@Test public void testSetPowerDescriptor() { PowerDescriptor descriptor = new PowerDescriptor(1, 2, 4, 0xc); ZigBeeNode node = new ZigBeeNode(Mockito.mock(ZigBeeNetworkManager.class), new IeeeAddress()); node.setPowerDescriptor(descriptor); assertEquals(CurrentPowerModeType.RECEIVER_ON_PERIODICALLY, node.getPowerDescriptor().getCurrentPowerMode()); assertEquals(PowerSourceType.DISPOSABLE_BATTERY, node.getPowerDescriptor().getCurrentPowerSource()); assertEquals(PowerLevelType.FULL, node.getPowerDescriptor().getPowerLevel()); }
if (powerDescriptor != null) { properties.put(ZigBeeBindingConstants.THING_PROPERTY_AVAILABLEPOWERSOURCES, powerDescriptor.getAvailablePowerSources().toString()); properties.put(ZigBeeBindingConstants.THING_PROPERTY_POWERSOURCE, powerDescriptor.getCurrentPowerSource().toString()); properties.put(ZigBeeBindingConstants.THING_PROPERTY_POWERMODE, powerDescriptor.getCurrentPowerMode().toString()); properties.put(ZigBeeBindingConstants.THING_PROPERTY_POWERLEVEL, powerDescriptor.getPowerLevel().toString());
@Test public void testReceive() { int[] packet = getPacketData("00 00 00 00 10 C1"); PowerDescriptorResponse descriptorResponse = new PowerDescriptorResponse(); DefaultDeserializer deserializer = new DefaultDeserializer(packet); ZclFieldDeserializer fieldDeserializer = new ZclFieldDeserializer(deserializer); descriptorResponse.deserialize(fieldDeserializer); System.out.println(descriptorResponse); PowerDescriptor powerDescriptor = descriptorResponse.getPowerDescriptor(); assertEquals(ZdoStatus.SUCCESS, descriptorResponse.getStatus()); assertEquals(PowerLevelType.FULL, powerDescriptor.getPowerLevel()); assertEquals(CurrentPowerModeType.RECEIVER_ON_IDLE, powerDescriptor.getCurrentPowerMode()); assertEquals(PowerSourceType.MAINS, powerDescriptor.getCurrentPowerSource()); }
Mockito.when(initialPowerDescriptor.getCurrentPowerMode()).thenReturn(CurrentPowerModeType.UNKNOWN); Mockito.when(node.getPowerDescriptor()).thenReturn(initialPowerDescriptor); powerResponse.setDestinationAddress(new ZigBeeEndpointAddress(0)); powerResponse.setNwkAddrOfInterest(0); PowerDescriptor powerDescriptor = new PowerDescriptor(); powerResponse.setPowerDescriptor(powerDescriptor); responses.put(ZdoCommandType.POWER_DESCRIPTOR_REQUEST.getClusterId(), powerResponse);
/** * Starts service discovery for the node. */ public void startDiscovery() { logger.debug("{}: Node SVC Discovery: start discovery", node.getIeeeAddress()); Set<NodeDiscoveryTask> tasks = new HashSet<NodeDiscoveryTask>(); // Always request the network address - in case it's changed tasks.add(NodeDiscoveryTask.NWK_ADDRESS); if (node.getNodeDescriptor().getLogicalType() == LogicalType.UNKNOWN) { tasks.add(NodeDiscoveryTask.NODE_DESCRIPTOR); } if (node.getPowerDescriptor().getCurrentPowerMode() == CurrentPowerModeType.UNKNOWN) { tasks.add(NodeDiscoveryTask.POWER_DESCRIPTOR); } if (node.getEndpoints().size() == 0 && node.getNetworkAddress() != networkManager.getLocalNwkAddress()) { tasks.add(NodeDiscoveryTask.ACTIVE_ENDPOINTS); } tasks.add(NodeDiscoveryTask.NEIGHBORS); startDiscovery(tasks); }
break; case POWER_DESCRIPTOR: PowerDescriptor powerDescriptor = new PowerDescriptor(); powerDescriptor.deserialize(this); value[0] = powerDescriptor; break;
if (!powerDescriptor.equals(node.getPowerDescriptor())) { updated = true; powerDescriptor = node.getPowerDescriptor();
@Test public void testLocal() throws Exception { ZigBeeNode node = Mockito.mock(ZigBeeNode.class); ZigBeeNodeServiceDiscoverer discoverer = new ZigBeeNodeServiceDiscoverer(networkManager, node); TestUtilities.setField(ZigBeeNodeServiceDiscoverer.class, discoverer, "retryPeriod", 1); NodeDescriptor initialNodeDescriptor = Mockito.mock(NodeDescriptor.class); Mockito.when(initialNodeDescriptor.getLogicalType()).thenReturn(LogicalType.UNKNOWN); Mockito.when(node.getNodeDescriptor()).thenReturn(initialNodeDescriptor); PowerDescriptor initialPowerDescriptor = Mockito.mock(PowerDescriptor.class); Mockito.when(initialPowerDescriptor.getCurrentPowerMode()).thenReturn(CurrentPowerModeType.UNKNOWN); Mockito.when(node.getPowerDescriptor()).thenReturn(initialPowerDescriptor); // Use node 0 and we should not try and get the local endpoints Mockito.when(node.getNetworkAddress()).thenReturn(0); ScheduledFuture<?> futureTask = Mockito.mock(ScheduledFuture.class); TestUtilities.setField(ZigBeeNodeServiceDiscoverer.class, discoverer, "futureTask", futureTask); discoverer.startDiscovery(); Mockito.verify(futureTask, Mockito.times(1)).cancel(true); assertFalse(discoverer.getTasks().contains(NodeDiscoveryTask.ACTIVE_ENDPOINTS)); } }
/** * Deserialise the contents of the structure. * * @param deserializer the {@link ZigBeeDeserializer} used to deserialize */ public void deserialize(ZigBeeDeserializer deserializer) { // Deserialize the fields int byte1 = (int) deserializer.readZigBeeType(ZclDataType.UNSIGNED_8_BIT_INTEGER); int byte2 = (int) deserializer.readZigBeeType(ZclDataType.UNSIGNED_8_BIT_INTEGER); setCurrentPowerMode(byte1 & 0x0f); setAvailablePowerSources(byte1 >> 4 & 0x0f); setCurrentPowerSource(byte2 & 0x0f); setCurrentPowerLevel(byte2 >> 4 & 0x0f); }