| 107 | self._write_finished_cb = None |
| 108 | |
| 109 | def write_data(self, write_finished_cb): |
| 110 | # First generate the header part |
| 111 | header_data = struct.pack('<BIBB', 0xEB, self.pins, self.vid, self.pid) |
| 112 | header_crc = crc32(header_data) & 0x0ff |
| 113 | header_data += struct.pack('B', header_crc) |
| 114 | |
| 115 | # Now generate the elements part |
| 116 | elem = bytearray() |
| 117 | logger.debug(list(self.elements.keys())) |
| 118 | for element in reversed(list(self.elements.keys())): |
| 119 | elem_string = self.elements[element] |
| 120 | key_encoding = self._rev_element_mapping[element] |
| 121 | elem += struct.pack('BB', key_encoding, len(elem_string)) |
| 122 | elem += bytearray(elem_string.encode('ISO-8859-1')) |
| 123 | |
| 124 | elem_data = struct.pack('BB', 0x00, len(elem)) |
| 125 | elem_data += elem |
| 126 | elem_crc = crc32(elem_data) & 0x0ff |
| 127 | elem_data += struct.pack('B', elem_crc) |
| 128 | |
| 129 | data = header_data + elem_data |
| 130 | |
| 131 | self.mem_handler.write(self, 0x00, |
| 132 | struct.unpack('B' * len(data), data)) |
| 133 | |
| 134 | self._write_finished_cb = write_finished_cb |
| 135 | |
| 136 | def erase(self, write_finished_cb): |
| 137 | erase_data = array('B', [0xFF] * 112) |