// TODO return OpenMUC value private double getValue(SML_ListEntry entry) { double value = 0; ASNObject obj = entry.getValue().getChoice(); if (obj.getClass().equals(Integer64.class)) { Integer64 val = (Integer64) obj; value = val.getVal(); } else if (obj.getClass().equals(Integer32.class)) { Integer32 val = (Integer32) obj; value = val.getVal(); } else if (obj.getClass().equals(Integer16.class)) { Integer16 val = (Integer16) obj; value = val.getVal(); } else if (obj.getClass().equals(Integer8.class)) { Integer8 val = (Integer8) obj; value = val.getVal(); } else if (obj.getClass().equals(Unsigned64.class)) { Unsigned64 val = (Unsigned64) obj; value = val.getVal(); } else if (obj.getClass().equals(Unsigned32.class)) { Unsigned32 val = (Unsigned32) obj; value = val.getVal(); } else if (obj.getClass().equals(Unsigned16.class)) { Unsigned16 val = (Unsigned16) obj; value = val.getVal(); } else if (obj.getClass().equals(Unsigned8.class)) { Unsigned8 val = (Unsigned8) obj; value = val.getVal(); } else { return Double.NaN; } byte scaler = entry.getScaler().getVal(); return value * Math.pow(10, scaler); }
/* * (non-Javadoc) * * @see org.openmuc.framework.driver.ehz.Connection#listChannels(int) */ @Override public List<ChannelScanInfo> listChannels(int timeout) { List<ChannelScanInfo> channelInfos = new LinkedList<ChannelScanInfo>(); logger.debug(name + "scanning channels"); try { SML_ListEntry[] list = getSML_ListEntries(); for (SML_ListEntry entry : list) { String channelAddress = getAddress(entry.getObjName().getOctetString()); String description = "Current value: " + getValue(entry); // TODO entry.getUnit(); ValueType valueType = ValueType.DOUBLE; Integer valueTypeLength = null; Boolean readable = true; Boolean writable = false; ChannelScanInfo channelInfo = new ChannelScanInfo( channelAddress, description, valueType, valueTypeLength, readable, writable); channelInfos.add(channelInfo); } } catch (IOException e) { e.printStackTrace(); logger.error(name + "read failed"); } return channelInfos; }
/* * (non-Javadoc) * * @see org.openmuc.framework.driver.ehz.Connection#read(java.util.List, int) */ @Override public void read(List<ChannelRecordContainer> containers, int timeout) throws ConnectionException { logger.trace(name + "reading channels"); try { long timestamp = System.currentTimeMillis(); SML_ListEntry[] list = getSML_ListEntries(); Map<String, Double> values = new LinkedHashMap<String, Double>(); for (SML_ListEntry entry : list) { String address = getAddress(entry.getObjName().getOctetString()); double value = getValue(entry); values.put(address, value); logger.trace(name + address + " = " + value); } handleChannelRecordContainer(containers, values, timestamp); } catch (IOException e) { e.printStackTrace(); logger.error(name + "read failed"); close(); throw new ConnectionException(e); } }