关于SMC命令字的理解和疑问

通过AI把你的工具转换成了Python脚本,就不限平台了 :grin:

import sys

def main():
    if len(sys.argv) < 2 or len(sys.argv) > 6:
        print("使用方法:smc_tool [Func] [Cmd] [M/S] [R/W] [Parameter]")
        print("例如:smc_tool 7 3 0 1 0")
        print("以上参数均为十六进制数,也可以反推smc命令的offset")
        print("例如:smc_tool 469765376 或 smc_tool 0x1c000d00")
        print("位布局:Func(6位) | Command(16位) | MS(1位) | RW(1位) | Parameter(8位)")
        return -1

    if len(sys.argv) == 2:
        input_str = sys.argv[1]
        hex_num = int(input_str, 0)  # 自动识别进制

        print(f"Func     : {(hex_num >> 26) & 0b111111:x}")
        print(f"Command  : {(hex_num >> 10) & 0xffff:x}")
        print(f"M/S      : {(hex_num >> 9) & 0b1:x}")
        print(f"R/W      : {(hex_num >> 8) & 0b1:x}")
        print(f"Parameter: {hex_num & 0xff:x}")

    elif len(sys.argv) == 6:
        try:
            nums = [int(arg, 16) for arg in sys.argv[1:]]
            for num in nums:
                print(f"{num:02x} ", end="")

            result = (
                (nums[0] & 0b111111) << 26 |
                (nums[1] & 0xffff) << 10 |
                (nums[2] & 0b1) << 9 |
                (nums[3] & 0b1) << 8 |
                (nums[4] & 0xff)
            )
            print(f"\n转换结果为:\n{result} \n或 \n0x{result:x}")

        except ValueError:
            print("\n参数解析错误")
            return -1

    else:
        print("参数错误")
        return -1

if __name__ == "__main__":
    main()


8 个赞