53 lines
2.4 KiB
Python
53 lines
2.4 KiB
Python
# tool/core/cmd/flash_info.py
|
|
import struct
|
|
from core.utils import console, console_err
|
|
from core.protocol import COMMANDS, ERRORS
|
|
|
|
class flash_info:
|
|
def __init__(self, bus):
|
|
self.bus = bus
|
|
|
|
|
|
def get(self):
|
|
import struct
|
|
self.bus.send_request(COMMANDS['get_flash_info'])
|
|
|
|
data = self.bus.receive_response(length=21)
|
|
if not data or data.get('type') == 'error':
|
|
return None
|
|
|
|
payload = data['data']
|
|
ext_block_size = struct.unpack('<I', payload[0:4])[0]
|
|
ext_total_blocks = struct.unpack('<I', payload[4:8])[0]
|
|
ext_free_blocks = struct.unpack('<I', payload[8:12])[0]
|
|
int_slot_size = struct.unpack('<I', payload[12:16])[0]
|
|
ext_page_size = struct.unpack('<H', payload[16:18])[0]
|
|
int_page_size = struct.unpack('<H', payload[18:20])[0]
|
|
max_path_len = payload[20]
|
|
|
|
result = {
|
|
'ext_block_size': ext_block_size,
|
|
'ext_total_blocks': ext_total_blocks,
|
|
'ext_free_blocks': ext_free_blocks,
|
|
'int_slot_size': int_slot_size,
|
|
'ext_page_size': ext_page_size,
|
|
'int_page_size': int_page_size,
|
|
'max_path_len': max_path_len,
|
|
'ext_total_size': ext_block_size * ext_total_blocks,
|
|
'ext_free_size': ext_block_size * ext_free_blocks,
|
|
'ext_used_size': ext_block_size * (ext_total_blocks - ext_free_blocks)
|
|
}
|
|
return result
|
|
|
|
def print(self, result):
|
|
if not result:
|
|
return
|
|
|
|
console.print(f"[info]Flash-Informationen:[/info]")
|
|
console.print(f" • [info]Externer Flash:[/info] {result['ext_total_size']/1024/1024:.2f} MB ({result['ext_total_blocks']} Blöcke à {result['ext_block_size']} Bytes)")
|
|
console.print(f" - Belegt: {result['ext_used_size']/1024/1024:.2f} MB ({result['ext_total_blocks'] - result['ext_free_blocks']} Blöcke)")
|
|
console.print(f" - Frei: {result['ext_free_size']/1024/1024:.2f} MB ({result['ext_free_blocks']} Blöcke)")
|
|
console.print(f" • [info]FW Flash Slot:[/info] {result['int_slot_size']/1024:.2f} KB")
|
|
console.print(f" • [info]EXTFLASH Seitengröße:[/info] {result['ext_page_size']} Bytes")
|
|
console.print(f" • [info]INTFLASH Seitengröße:[/info] {result['int_page_size']} Bytes")
|
|
console.print(f" • [info]Maximale Pfadlänge:[/info] {result['max_path_len']} Zeichen") |