@@ -23,48 +23,42 @@ import (
23
23
"github.com/hashicorp/packer-plugin-sdk/tmp"
24
24
)
25
25
26
- // Struct to format Scancodes in JSON
27
- type ScanCodes struct {
28
- Scancode int64 `json:"scancode "`
29
- Event string `json:"event"`
30
- Delay int `json:"delay"`
26
+ // Struct to format keyCodes in JSON
27
+ type keyCodes struct {
28
+ KeyCode int `json:"key "`
29
+ Event string `json:"event"`
30
+ Delay int `json:"delay"`
31
31
}
32
32
33
33
// sending scancodes to VM via prlctl send-key-event CMD
34
34
func (d * Parallels9Driver ) sendJsonScancodes (vmName string , inputScanCodes []string ) error {
35
- scancodeData := []ScanCodes {}
36
35
37
36
log .Println ("scancodes received for JSON encoding " , inputScanCodes )
38
37
delay := 100
39
- for i := 0 ; i < len (inputScanCodes ); i ++ {
40
- key1 , convErr_ := strconv .ParseInt (inputScanCodes [i ], 16 , 64 )
41
- if convErr_ != nil {
42
- log .Println (convErr_ , "conversion error for %s" , inputScanCodes [i ])
43
- return convErr_
44
- }
45
-
38
+ var inputHexScanCodes []uint
39
+ for _ , hexStr := range inputScanCodes {
40
+ var val uint
41
+ fmt .Sscanf (hexStr , "%X" , & val ) // Convert hex string to uint
42
+ inputHexScanCodes = append (inputHexScanCodes , val )
43
+ }
44
+ keyCodeData := []keyCodes {}
45
+ for i := 0 ; i < len (inputHexScanCodes ); i ++ {
46
+ key1 := inputHexScanCodes [i ]
46
47
if key1 == 224 {
47
- key2 , convErr_ := strconv . ParseInt ( inputScanCodes [i + 1 ], 16 , 64 )
48
+ key2 := inputHexScanCodes [i + 1 ]
48
49
i = i + 1
49
- if convErr_ != nil {
50
- log .Println (convErr_ , "conversion error for %s" , inputScanCodes [i ])
51
- return convErr_
52
- }
53
50
if key2 < 128 {
54
- scancodeData = append (scancodeData , ScanCodes {Scancode : key1 , Event : "press" , Delay : delay })
55
- scancodeData = append (scancodeData , ScanCodes {Scancode : key2 , Event : "press" , Delay : delay })
51
+ keyCodeData = append (keyCodeData , keyCodes {KeyCode : getKeycodeFromScanCode ([]uint {key1 , key2 }), Event : "press" , Delay : delay })
56
52
} else {
57
- scancodeData = append (scancodeData , ScanCodes {Scancode : key1 , Event : "release" , Delay : delay })
58
- scancodeData = append (scancodeData , ScanCodes {Scancode : key2 - 128 , Event : "release" , Delay : delay })
53
+ keyCodeData = append (keyCodeData , keyCodes {KeyCode : getKeycodeFromScanCode ([]uint {key1 , key2 - 128 }), Event : "release" , Delay : delay })
59
54
}
60
55
} else if key1 < 128 {
61
- scancodeData = append (scancodeData , ScanCodes { Scancode : key1 , Event : "press" , Delay : delay })
56
+ keyCodeData = append (keyCodeData , keyCodes { KeyCode : getKeycodeFromScanCode ([] uint { key1 }) , Event : "press" , Delay : delay })
62
57
} else {
63
- scancodeData = append (scancodeData , ScanCodes { Scancode : key1 - 128 , Event : "release" , Delay : delay })
58
+ keyCodeData = append (keyCodeData , keyCodes { KeyCode : getKeycodeFromScanCode ([] uint { key1 - 128 }) , Event : "release" , Delay : delay })
64
59
}
65
60
}
66
-
67
- jsonFormat , err := json .MarshalIndent (scancodeData , "" , "\t " )
61
+ jsonFormat , err := json .MarshalIndent (keyCodeData , "" , "\t " )
68
62
if err != nil {
69
63
log .Println (err )
70
64
return err
0 commit comments