Skip to content

Commit cf43067

Browse files
committed
AML: fix bug in ToHexString, add test for To* opcodes from uACPI
1 parent 22867c6 commit cf43067

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

src/aml/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1677,7 +1677,7 @@ where
16771677
for byte in bytes {
16781678
let as_str = match op.op {
16791679
Opcode::ToDecimalString => alloc::format!("{},", byte),
1680-
Opcode::ToHexString => alloc::format!("{:?},", byte),
1680+
Opcode::ToHexString => alloc::format!("{:#04X},", byte),
16811681
_ => panic!(),
16821682
};
16831683
string.push_str(&as_str);

tests/to_x.asl

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
DefinitionBlock ("", "SSDT", 2, "uTEST", "TESTTABL", 0xF0F0F0F0)
2+
{
3+
Name(FCNT, 0)
4+
5+
Method (CHEK, 2)
6+
{
7+
If (ObjectType(Arg0) == 3) {
8+
Arg0 = ToHexString(Arg0)
9+
}
10+
11+
If (ObjectType(Arg1) == 3) {
12+
Arg1 = ToHexString(Arg1)
13+
}
14+
15+
If (Arg0 != Arg1) {
16+
FCNT++
17+
Printf("Invalid string %o, expected %o", Arg0, Arg1)
18+
}
19+
}
20+
21+
Method (MAIN, 0, NotSerialized)
22+
{
23+
// Dec string
24+
Local0 = ToDecimalString(123)
25+
Local1 = "123"
26+
CHEK(Local0, Local1)
27+
28+
Local0 = ToDecimalString(Buffer { 1, 2, 222, 33, 45, 192, 3, 255 })
29+
Local1 = "1,2,222,33,45,192,3,255"
30+
CHEK(Local0, Local1)
31+
32+
Local0 = ToDecimalString("")
33+
Local1 = ""
34+
CHEK(Local0, Local1)
35+
36+
Local0 = ToDecimalString("123")
37+
Local1 = "123"
38+
CHEK(Local0, Local1)
39+
40+
Local0 = ToDecimalString(0xFFFFFFFFFFFFFFFF)
41+
Local1 = "18446744073709551615"
42+
CHEK(Local0, Local1)
43+
44+
// Hex string
45+
Local0 = ToHexString(123)
46+
Local1 = "0x7B"
47+
CHEK(Local0, Local1)
48+
49+
Local0 = ToHexString(Buffer { 1, 2, 222, 33, 45, 192, 3, 255 })
50+
Local1 = "0x01,0x02,0xDE,0x21,0x2D,0xC0,0x03,0xFF"
51+
CHEK(Local0, Local1)
52+
53+
Local0 = ToHexString("")
54+
Local1 = ""
55+
CHEK(Local0, Local1)
56+
57+
Local0 = ToHexString("123")
58+
Local1 = "123"
59+
CHEK(Local0, Local1)
60+
61+
Local0 = ToHexString(0xF)
62+
Local1 = "0xF"
63+
CHEK(Local0, Local1)
64+
65+
Local0 = ToHexString(0xFF)
66+
Local1 = "0xFF"
67+
CHEK(Local0, Local1)
68+
69+
Local0 = ToHexString(0xFFF)
70+
Local1 = "0xFFF"
71+
CHEK(Local0, Local1)
72+
73+
Local0 = ToHexString(0xFFFFF)
74+
Local1 = "0xFFFFF"
75+
CHEK(Local0, Local1)
76+
77+
Local0 = ToHexString(0xFFFFFFFFFFFFFFFF)
78+
Local1 = "0xFFFFFFFFFFFFFFFF"
79+
CHEK(Local0, Local1)
80+
81+
// Buffer
82+
Local0 = ToBuffer(Buffer { 1, 2, 3 })
83+
Local1 = Buffer { 1, 2, 3 }
84+
CHEK(Local0, Local1)
85+
86+
Local0 = ToBuffer("Hello")
87+
Local1 = Buffer { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00 }
88+
CHEK(Local0, Local1)
89+
90+
Local0 = ToBuffer(0xDEADBEEFCAFEBABE)
91+
Local1 = Buffer { 0xBE, 0xBA, 0xFE, 0xCA, 0xEF, 0xBE, 0xAD, 0xDE }
92+
CHEK(Local0, Local1)
93+
94+
Return (FCNT)
95+
}
96+
}

0 commit comments

Comments
 (0)