diff --git a/pyproject.toml b/pyproject.toml index 11eca69..2c6abc8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "infuse_iot" -version = "0.1.2" +version = "0.2.0" authors = [{name = "Embeint Holdings Pty Ltd", email = "support@embeint.com"}] description = "Infuse-IoT Platform python package" classifiers = [ diff --git a/src/infuse_iot/diff.py b/src/infuse_iot/cpatch.py similarity index 97% rename from src/infuse_iot/diff.py rename to src/infuse_iot/cpatch.py index f299703..6f90d40 100644 --- a/src/infuse_iot/diff.py +++ b/src/infuse_iot/cpatch.py @@ -469,7 +469,7 @@ def __len__(self): return length -class diff: +class cpatch: class PatchHeader(ctypes.LittleEndianStructure): VERSION_MAJOR = 1 VERSION_MINOR = 0 @@ -591,6 +591,7 @@ def _cleanup_jumps(cls, old: bytes, instructions: list[Instr]) -> list[Instr]: if len(instructions) >= 2 and isinstance(instructions[1], SetAddrInstr): # ADDR, COPY, ADRR if instr.shift == -instructions[1].shift: + print(copy.length) # Replace with a write instead merged.append(WriteInstr(old[instr.new : instr.new + copy.length])) replaced = True @@ -845,9 +846,9 @@ def generate( bin_new: bytes, verbose: bool, ) -> bytes: - meta, instructions = diff._gen_patch_instr(bin_original, bin_new) - patch_data = diff._gen_patch_data(instructions) - patch_header = diff._gen_patch_header(meta, patch_data) + meta, instructions = cls._gen_patch_instr(bin_original, bin_new) + patch_data = cls._gen_patch_data(instructions) + patch_header = cls._gen_patch_header(meta, patch_data) bin_patch = patch_header + patch_data ratio = 100 * len(bin_patch) / meta["new"]["len"] @@ -901,14 +902,14 @@ def validation(cls, bin_original: bytes, invalid_length: bool, invalid_crc: bool ) instructions.append(CopyInstr(len(bin_original) - 544)) - meta, _ = diff._gen_patch_instr(bin_original, bin_original) + meta, _ = cls._gen_patch_instr(bin_original, bin_original) if invalid_length: meta["new"]["len"] -= 1 if invalid_crc: meta["new"]["crc"] -= 1 - patch_data = diff._gen_patch_data(instructions) - patch_header = diff._gen_patch_header(meta, patch_data) + patch_data = cls._gen_patch_data(instructions) + patch_header = cls._gen_patch_header(meta, patch_data) bin_patch = patch_header + patch_data # Validate that file can be reconstructed @@ -924,7 +925,7 @@ def patch( bin_original: bytes, bin_patch: bytes, ) -> bytes: - meta, instructions = diff._patch_load(bin_patch) + meta, instructions = cls._patch_load(bin_patch) patched = b"" orig_offset = 0 @@ -984,7 +985,7 @@ def dump( cls, bin_patch: bytes, ): - meta, instructions = diff._patch_load(bin_patch) + meta, instructions = cls._patch_load(bin_patch) total_write_bytes = 0 print(f"Original File: {meta['original']['len']:6d} bytes") @@ -1003,7 +1004,7 @@ def dump( print("") print("Total WRITE data:") - print(f"\t{total_write_bytes} bytes ({100*total_write_bytes/len(bin_patch):.2f}%)") + print(f"\t{total_write_bytes} bytes ({100 * total_write_bytes / len(bin_patch):.2f}%)") print("") print("Instruction Count:") @@ -1050,7 +1051,7 @@ def dump( # Run requested command if args.command == "generate": with open(args.original, "rb") as f_orig, open(args.new, "rb") as f_new: - patch = diff.generate( + patch = cpatch.generate( f_orig.read(-1), f_new.read(-1), args.verbose, @@ -1059,14 +1060,14 @@ def dump( f_output.write(patch) elif args.command == "validation": with open(args.input_file, "rb") as f_input: - patch = diff.validation(f_input.read(-1), args.invalid_length, args.invalid_crc) + patch = cpatch.validation(f_input.read(-1), args.invalid_length, args.invalid_crc) with open(args.patch, "wb") as f_output: f_output.write(patch) elif args.command == "patch": with open(args.original, "rb") as f_orig, open(args.patch, "rb") as f_patch: - output = diff.patch(f_orig.read(-1), f_patch.read(-1)) + output = cpatch.patch(f_orig.read(-1), f_patch.read(-1)) with open(args.output, "wb") as f_output: f_output.write(output) elif args.command == "dump": with open(args.patch, "rb") as f_patch: - diff.dump(f_patch.read(-1)) + cpatch.dump(f_patch.read(-1)) diff --git a/src/infuse_iot/generated/tdf_definitions.py b/src/infuse_iot/generated/tdf_definitions.py index 351786b..05e7615 100644 --- a/src/infuse_iot/generated/tdf_definitions.py +++ b/src/infuse_iot/generated/tdf_definitions.py @@ -1468,20 +1468,39 @@ class wifi_disconnected(TdfReadingBase): "reason": "{}", } - class array_type(TdfReadingBase): - """Example array type""" + class network_scan_count(TdfReadingBase): + """Counts associated with scanning Wi-Fi and LTE networks""" - ID = 100 - NAME = "ARRAY_TYPE" + ID = 51 + NAME = "NETWORK_SCAN_COUNT" _fields_ = [ - ("array", 4 * ctypes.c_uint8), + ("num_wifi", ctypes.c_uint8), + ("num_lte", ctypes.c_uint8), ] _pack_ = 1 _postfix_ = { - "array": "", + "num_wifi": "", + "num_lte": "", } _display_fmt_ = { - "array": "{}", + "num_wifi": "{}", + "num_lte": "{}", + } + + class exception_stack_frame(TdfReadingBase): + """Generic exception stack frame""" + + ID = 52 + NAME = "EXCEPTION_STACK_FRAME" + _fields_ = [ + ("frame", 0 * ctypes.c_uint32), + ] + _pack_ = 1 + _postfix_ = { + "frame": "", + } + _display_fmt_ = { + "frame": "{}", } @@ -1533,7 +1552,8 @@ class array_type(TdfReadingBase): readings.wifi_connected.ID: readings.wifi_connected, readings.wifi_connection_failed.ID: readings.wifi_connection_failed, readings.wifi_disconnected.ID: readings.wifi_disconnected, - readings.array_type.ID: readings.array_type, + readings.network_scan_count.ID: readings.network_scan_count, + readings.exception_stack_frame.ID: readings.exception_stack_frame, } __all__ = [ diff --git a/src/infuse_iot/tools/tdf_csv.py b/src/infuse_iot/tools/tdf_csv.py index 9ca8efe..b4992dd 100644 --- a/src/infuse_iot/tools/tdf_csv.py +++ b/src/infuse_iot/tools/tdf_csv.py @@ -78,7 +78,7 @@ def run(self): # Handle file creation/opening first = tdf.data[0] - filename = f"{source.infuse_id:016x}_{first.name}.csv" + filename = f"{source.infuse_id:016x}_{first.NAME}.csv" if filename not in files: if os.path.exists(filename): print(f"Appending to existing {filename}") diff --git a/src/infuse_iot/tools/tdf_list.py b/src/infuse_iot/tools/tdf_list.py index ba04f42..fa6ba41 100644 --- a/src/infuse_iot/tools/tdf_list.py +++ b/src/infuse_iot/tools/tdf_list.py @@ -49,9 +49,9 @@ def run(self) -> None: tdf_name: None | str = None time_str: None | str = None if num > 1: - tdf_name = f"{t.name}[{num - 1}]" + tdf_name = f"{t.NAME}[{num - 1}]" else: - tdf_name = t.name + tdf_name = t.NAME if tdf.time is not None: if tdf.period is None: time_str = InfuseTime.utc_time_string(tdf.time)