code: def reset_to_firmware(self, target_id):
          
          # The fake CPU ID is legacy from the Crazyflie 1.0
          # In order to reset the CPU id had to be sent, but this
          # was removed before launching it. But the length check is
          # still in the bootloader. So to work around this bug so
          # some extra data needs to be sent.
          fake_cpu_id = (1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12)
          # Send the reset to bootloader request
          pk = CRTPPacket()
          pk.set_header(0xFF, 0xFF)
          pk.data = (target_id, 0xFF) + fake_cpu_id
          self.link.send_packet(pk)
  
          # Wait to ack the reset ...
          pk = None
          while True:
              pk = self.link.receive_packet(2)
              if not pk:
                  return False
  
              if (pk.header == 0xFF and struct.unpack(
                      'B' * len(pk.data), pk.data)[:2] == (target_id, 0xFF)):
                  # Difference in CF1 and CF2 (CPU ID)
                  if target_id == 0xFE:
                      pk.data = (target_id, 0xF0, 0x01)
                  else:
                      pk.data = (target_id, 0xF0) + fake_cpu_id
                  self.link.send_packet(pk)
                  break
  
          time.sleep(0.1)
docs: Reset to firmware
          The parameter cpuid shall correspond to the device to reset.
  
          Return true if the reset has been done