<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reset_to_firmware(self, target_id):
 """ Reset to firmware The parameter cpuid shall correspond to the device to reset. Return true if the reset has been done """

        # 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)