- elif (code == "BIT"):
- if (self.state == "COMMAND"):
- # Receiving and decoding a ROM command
- if (self.onewire_collect(8, val, ss, es)):
- self.put(self.net_beg, self.net_end, self.out_ann, [ANN_NETWORK,
- ['ROM COMMAND: 0x%02x \'%s\'' % (self.data, rom_command[self.data])]])
- if (self.data == 0x33): # READ ROM
- self.state = "GET ROM"
- elif (self.data == 0x0f): # CONDITIONAL READ ROM
- self.state = "GET ROM"
- elif (self.data == 0xcc): # SKIP ROM
- self.state = "TRANSPORT"
- elif (self.data == 0x55): # MATCH ROM
- self.state = "GET ROM"
- elif (self.data == 0xf0): # SEARCH ROM
- self.state = "SEARCH ROM"
- elif (self.data == 0xec): # CONDITIONAL SEARCH ROM
- self.state = "SEARCH ROM"
- elif (self.data == 0x3c): # OVERDRIVE SKIP ROM
- self.state = "TRANSPORT"
- elif (self.data == 0x69): # OVERDRIVE MATCH ROM
- self.state = "GET ROM"
- elif (self.state == "GET ROM"):
- # A 64 bit device address is selected
- # family code (1B) + serial number (6B) + CRC (1B)
- if (self.onewire_collect(64, val, ss, es)):
- self.net_rom = self.data & 0xffffffffffffffff
- self.put(self.net_beg, self.net_end, self.out_ann, [ANN_NETWORK, ['ROM: 0x%016x' % self.net_rom]])
- self.state = "TRANSPORT"
- elif (self.state == "SEARCH ROM"):
- # A 64 bit device address is searched for
- # family code (1B) + serial number (6B) + CRC (1B)
- if (self.onewire_search(64, val, ss, es)):
- self.net_rom = self.data & 0xffffffffffffffff
- self.put(self.net_beg, self.net_end, self.out_ann, [ANN_NETWORK, ['ROM: 0x%016x' % self.net_rom]])
- self.state = "TRANSPORT"
- elif (self.state == "TRANSPORT"):
- # The transport layer is handled in byte sized units
- if (self.onewire_collect(8, val, ss, es)):
- self.put(self.net_beg, self.net_end, self.out_ann, [ANN_NETWORK , ['TRANSPORT: 0x%02x' % self.data]])
- self.put(self.net_beg, self.net_end, self.out_ann, [ANN_TRANSPORT, ['TRANSPORT: 0x%02x' % self.data]])
- self.put(self.net_beg, self.net_end, self.out_proto, ['transfer', self.data])
- # TODO: Sending translort layer data to 1-Wire device models
- else:
- raise Exception('Invalid state: %s' % self.state)