docs: def _recv_ff(self, data):
          """Process a received 'First Frame' frame"""
          self.rx_timer.cancel()
          if self.rx_state != ISOTP_IDLE:
              warning("RX state was reset because first frame was received")
              self.rx_state = ISOTP_IDLE
  
          if len(data) < 7:
              return 1
          self.rx_ll_dl = len(data)
  
          # get the FF_DL
          self.rx_len = (six.indexbytes(data, 0) & 0x0f) * 256 + six.indexbytes(
              data, 1)
          ff_pci_sz = 2
  
          # Check for FF_DL escape sequence supporting 32 bit PDU length
          if self.rx_len == 0:
              # FF_DL = 0 => get real length from next 4 bytes
              self.rx_len = six.indexbytes(data, 2) << 24
              self.rx_len += six.indexbytes(data, 3) << 16
              self.rx_len += six.indexbytes(data, 4) << 8
              self.rx_len += six.indexbytes(data, 5)
              ff_pci_sz = 6
  
          # copy the first received data bytes
          data_bytes = data[ff_pci_sz:]
          self.rx_idx = len(data_bytes)
          self.rx_buf = data_bytes
  
          # initial setup for this pdu reception
          self.rx_sn = 1
          self.rx_state = ISOTP_WAIT_DATA
  
          # no creation of flow control frames
          if not self.listen_mode:
              # send our first FC frame
              load = self.ea_hdr
              load += struct.pack("BBB", N_PCI_FC, self.rxfc_bs, self.rxfc_stmin)
              self.can_send(load)
  
          # wait for a CF
          self.rx_bs = 0
          self.rx_timer.set_timeout(self.cf_timeout, self._rx_timer_handler)
  
          return 0