def _from_data(self, data): buffer = ByteBuffer(data[5:]) # record key bytes self._common_record_key(buffer.pop_slice(3)) # record body bytes self._entity(buffer.pop_slice(2)) self.sensor_initialization = buffer.pop_unsigned_int(1) self.capabilities = buffer.pop_unsigned_int(1) self.sensor_type_code = buffer.pop_unsigned_int(1) self.event_reading_type_code = buffer.pop_unsigned_int(1) self.assertion_mask = buffer.pop_unsigned_int(2) self.deassertion_mask = buffer.pop_unsigned_int(2) self.discrete_reading_mask = buffer.pop_unsigned_int(2) self.units_1 = buffer.pop_unsigned_int(1) self.units_2 = buffer.pop_unsigned_int(1) self.units_3 = buffer.pop_unsigned_int(1) self.record_sharing = buffer.pop_unsigned_int(2) self.positive_going_hysteresis = buffer.pop_unsigned_int(1) self.negative_going_hysteresis = buffer.pop_unsigned_int(1) self.reserved = buffer.pop_unsigned_int(3) self.oem = buffer.pop_unsigned_int(1) self.device_id_string_type_length = buffer.pop_unsigned_int(1) self.device_id_string = buffer.tostring()
def _from_data(self, data): buffer = ByteBuffer(data[5:]) # record key bytes self._common_record_key(buffer.pop_slice(3)) # record body bytes self._entity(buffer.pop_slice(2)) self.sensor_type = buffer.pop_unsigned_int(1) self.event_reading_type_code = buffer.pop_unsigned_int(1) self.record_sharing = buffer.pop_unsigned_int(2) self.reserved = buffer.pop_unsigned_int(1) self.oem = buffer.pop_unsigned_int(1) self.device_id_string_type_length = buffer.pop_unsigned_int(1) self.device_id_string = buffer.tostring()
def test_bytebuffer_pop_slice(): buf = ByteBuffer(b'\x30\x31\x32\x33') cut = buf.pop_slice(1) eq_(buf.tostring(), b'123') eq_(cut.tostring(), b'0') buf = ByteBuffer(b'\x30\x31\x32\x33') cut = buf.pop_slice(2) eq_(buf.tostring(), b'23') eq_(cut.tostring(), b'01') buf = ByteBuffer(b'\x30\x31\x32\x33') cut = buf.pop_slice(3) eq_(buf.tostring(), b'3') eq_(cut.tostring(), b'012') buf = ByteBuffer(b'\x30\x31\x32\x33') cut = buf.pop_slice(4) eq_(buf.tostring(), b'') eq_(cut.tostring(), b'0123')
def _from_data(self, data): buffer = ByteBuffer(data[5:]) self.device_slave_address = buffer.pop_unsigned_int(1) >> 1 self.channel_number = buffer.pop_unsigned_int(1) & 0xf self.power_state_notification = buffer.pop_unsigned_int(1) self.global_initialization = 0 self.device_capabilities = buffer.pop_unsigned_int(1) self.reserved = buffer.pop_unsigned_int(3) self._entity(buffer.pop_slice(2)) self.oem = buffer.pop_unsigned_int(1) self.device_id_string_type_length = buffer.pop_unsigned_int(1) self.device_id_string = buffer.tostring()
def _from_data(self, data): buffer = ByteBuffer(data[5:]) self.device_access_address = buffer.pop_unsigned_int(1) >> 1 self.fru_device_id = buffer.pop_unsigned_int(1) self.logical_physical = buffer.pop_unsigned_int(1) self.channel_number = buffer.pop_unsigned_int(1) self.reserved = buffer.pop_unsigned_int(1) self.device_type = buffer.pop_unsigned_int(1) self.device_type_modifier= buffer.pop_unsigned_int(1) self._entity(buffer.pop_slice(2)) self.oem = buffer.pop_unsigned_int(1) self.device_id_string_type_length = buffer.pop_unsigned_int(1) self.device_id_string = buffer.tostring()
def test_bytebuffer_pop_slice_error(): buf = ByteBuffer(b'\x30\x31\x32\x33') buf.pop_slice(5)
def _from_data(self, data): buffer = ByteBuffer(data[5:]) # record key bytes self._common_record_key(buffer.pop_slice(3)) # record body bytes self._entity(buffer.pop_slice(2)) # byte 11 initialization = buffer.pop_unsigned_int(1) self.initialization = [] if initialization & 0x40: self.initialization.append('scanning') if initialization & 0x20: self.initialization.append('events') if initialization & 0x10: self.initialization.append('thresholds') if initialization & 0x08: self.initialization.append('hysteresis') if initialization & 0x04: self.initialization.append('type') if initialization & 0x02: self.initialization.append('default_event_generation') if initialization & 0x01: self.initialization.append('default_scanning') # byte 12 - sensor capabilities capabilities = buffer.pop_unsigned_int(1) self.capabilities = [] # ignore sensor if capabilities & 0x80: self.capabilities.append('ignore_sensor') # sensor auto re-arm support if capabilities & 0x40: self.capabilities.append('auto_rearm') # sensor hysteresis support HYSTERESIS_MASK = 0x30 HYSTERESIS_IS_NOT_SUPPORTED = 0x00 HYSTERESIS_IS_READABLE = 0x10 HYSTERESIS_IS_READ_AND_SETTABLE = 0x20 HYSTERESIS_IS_FIXED = 0x30 if capabilities & HYSTERESIS_MASK == HYSTERESIS_IS_NOT_SUPPORTED: self.capabilities.append('hysteresis_not_supported') elif capabilities & HYSTERESIS_MASK == HYSTERESIS_IS_READABLE: self.capabilities.append('hysteresis_readable') elif capabilities & HYSTERESIS_MASK == HYSTERESIS_IS_READ_AND_SETTABLE: self.capabilities.append('hysteresis_read_and_setable') elif capabilities & HYSTERESIS_MASK == HYSTERESIS_IS_FIXED: self.capabilities.append('hysteresis_fixed') # sensor threshold support THRESHOLD_MASK = 0x30 THRESHOLD_IS_NOT_SUPPORTED = 0x00 THRESHOLD_IS_READABLE = 0x10 THRESHOLD_IS_READ_AND_SETTABLE = 0x20 THRESHOLD_IS_FIXED = 0x30 if capabilities & THRESHOLD_MASK == THRESHOLD_IS_NOT_SUPPORTED: self.capabilities.append('threshold_not_supported') elif capabilities & THRESHOLD_MASK == THRESHOLD_IS_READABLE: self.capabilities.append('threshold_readable') elif capabilities & THRESHOLD_MASK == THRESHOLD_IS_READ_AND_SETTABLE: self.capabilities.append('threshold_read_and_setable') elif capabilities & THRESHOLD_MASK == THRESHOLD_IS_FIXED: self.capabilities.append('threshold_fixed') # sensor event message control support if (capabilities & 0x03) is 0: pass if (capabilities & 0x03) is 1: pass if (capabilities & 0x03) is 2: pass if (capabilities & 0x03) is 3: pass self.sensor_type_code = buffer.pop_unsigned_int(1) self.event_reading_type_code = buffer.pop_unsigned_int(1) self.assertion_mask = buffer.pop_unsigned_int(2) self.deassertion_mask = buffer.pop_unsigned_int(2) self.discrete_reading_mask = buffer.pop_unsigned_int(2) # byte 21, 22, 23 units_1 = buffer.pop_unsigned_int(1) units_2 = buffer.pop_unsigned_int(1) units_3 = buffer.pop_unsigned_int(1) self.analog_data_format = (units_1 >> 6) & 0x3 self.rate_unit = (units_1 >> 3) >> 0x7 self.modifier_unit = (units_1 >> 1) & 0x2 self.percentage = units_1 & 0x1 # byte 24 self.linearization = buffer.pop_unsigned_int(1) & 0x7f # byte 25, 26 m = buffer.pop_unsigned_int(1) m_tol = buffer.pop_unsigned_int(1) #self.m = (m & 0xff) | (((m_tol & 0xc0) << 2) | ~0x3ff) self.m = (m & 0xff) | ((m_tol & 0xc0) << 2) # NAC: Bug fix. Upstream did not properly account for # 'M' being a twos complement value. self.m = self._convert_complement(self.m, 10) self.tolerance = (m_tol & 0x3f) # byte 27, 28, 29 b = buffer.pop_unsigned_int(1) b_acc = buffer.pop_unsigned_int(1) acc_accexp = buffer.pop_unsigned_int(1) self.b = (b & 0xff) | ((b_acc & 0xc0) << 2) self.b = self._convert_complement(self.b, 10) self.accuracy = (b_acc & 0x3f) | ((acc_accexp & 0xf0) << 4) self.accuracy_exp = (acc_accexp & 0x0c) >> 2 # byte 30 rexp_bexp = buffer.pop_unsigned_int(1) self.k2 = (rexp_bexp & 0xf0) >> 4 # convert 2s complement #if self.k2 & 0x8: # 4bit # self.k2 = -0x10 + self.k2 self.k2 = self._convert_complement(self.k2, 4) self.k1 = rexp_bexp & 0x0f # convert 2s complement #if self.k1 & 0x8: # self.k1 = -0x10 + self.k1 self.k1 = self._convert_complement(self.k1, 4) # byte 31 analog_characteristics = buffer.pop_unsigned_int(1) self.analog_characteristic = [] if analog_characteristics & 0x01: self.analog_characteristic.append('nominal_reading') if analog_characteristics & 0x02: self.analog_characteristic.append('normal_max') if analog_characteristics & 0x04: self.analog_characteristic.append('normal_min') self.nominal_reading = buffer.pop_unsigned_int(1) self.normal_maximum = buffer.pop_unsigned_int(1) self.normal_minimum = buffer.pop_unsigned_int(1) self.sensor_maximum_reading = buffer.pop_unsigned_int(1) self.sensor_minimum_reading = buffer.pop_unsigned_int(1) self.threshold = {} self.threshold['unr'] = buffer.pop_unsigned_int(1) self.threshold['ucr'] = buffer.pop_unsigned_int(1) self.threshold['unc'] = buffer.pop_unsigned_int(1) self.threshold['lnr'] = buffer.pop_unsigned_int(1) self.threshold['lcr'] = buffer.pop_unsigned_int(1) self.threshold['lnc'] = buffer.pop_unsigned_int(1) self.hysteresis = {} self.hysteresis['positive_going'] = buffer.pop_unsigned_int(1) self.hysteresis['negative_going'] = buffer.pop_unsigned_int(1) self.reserved = buffer.pop_unsigned_int(2) self.oem = buffer.pop_unsigned_int(1) self.device_id_string_type_length = buffer.pop_unsigned_int(1) self.device_id_string = buffer.tostring()