-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathcmd_get_payload_activation_status.go
126 lines (111 loc) · 4.12 KB
/
cmd_get_payload_activation_status.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package ipmi
import (
"context"
"fmt"
)
// 24.4 Get Payload Activation Status Command
type GetPayloadActivationStatusRequest struct {
PayloadType PayloadType
}
type GetPayloadActivationStatusResponse struct {
// [3:0] - Number of instances of given payload type that can be simultaneously activated on BMC. 1-based. 0h = reserved.
InstanceCapacity uint8
Instance01Activated bool
Instance02Activated bool
Instance03Activated bool
Instance04Activated bool
Instance05Activated bool
Instance06Activated bool
Instance07Activated bool
Instance08Activated bool
Instance09Activated bool
Instance10Activated bool
Instance11Activated bool
Instance12Activated bool
Instance13Activated bool
Instance14Activated bool
Instance15Activated bool
Instance16Activated bool
// Store the PayloadType specified in GetPayloadActivationStatusRequest
PayloadType PayloadType
}
func (req *GetPayloadActivationStatusRequest) Pack() []byte {
return []byte{byte(req.PayloadType)}
}
func (req *GetPayloadActivationStatusRequest) Command() Command {
return CommandGetPayloadActivationStatus
}
func (res *GetPayloadActivationStatusResponse) CompletionCodes() map[uint8]string {
return map[uint8]string{}
}
func (res *GetPayloadActivationStatusResponse) Unpack(msg []byte) error {
if len(msg) < 3 {
return ErrUnpackedDataTooShortWith(len(msg), 3)
}
res.InstanceCapacity = msg[0] + 1 // plus 1 cause of 1-based.
res.Instance01Activated = isBit0Set(msg[1])
res.Instance02Activated = isBit1Set(msg[1])
res.Instance03Activated = isBit2Set(msg[1])
res.Instance04Activated = isBit3Set(msg[1])
res.Instance05Activated = isBit4Set(msg[1])
res.Instance06Activated = isBit5Set(msg[1])
res.Instance07Activated = isBit6Set(msg[1])
res.Instance08Activated = isBit7Set(msg[1])
res.Instance09Activated = isBit0Set(msg[2])
res.Instance10Activated = isBit1Set(msg[2])
res.Instance11Activated = isBit2Set(msg[2])
res.Instance12Activated = isBit3Set(msg[2])
res.Instance13Activated = isBit4Set(msg[2])
res.Instance14Activated = isBit5Set(msg[2])
res.Instance15Activated = isBit6Set(msg[2])
res.Instance16Activated = isBit7Set(msg[2])
return nil
}
func (res *GetPayloadActivationStatusResponse) Format() string {
return fmt.Sprintf(` Payload Type : %s (%d)
Instance Capacity : %d
Instance 01 : %s
Instance 02 : %s
Instance 03 : %s
Instance 04 : %s
Instance 05 : %s
Instance 06 : %s
Instance 07 : %s
Instance 08 : %s
Instance 09 : %s
Instance 10 : %s
Instance 11 : %s
Instance 12 : %s
Instance 13 : %s
Instance 14 : %s
Instance 15 : %s
Instance 16 : %s`,
res.PayloadType.String(), res.PayloadType,
res.InstanceCapacity,
formatBool(res.Instance01Activated, "activated", "deactivated"),
formatBool(res.Instance02Activated, "activated", "deactivated"),
formatBool(res.Instance03Activated, "activated", "deactivated"),
formatBool(res.Instance04Activated, "activated", "deactivated"),
formatBool(res.Instance05Activated, "activated", "deactivated"),
formatBool(res.Instance06Activated, "activated", "deactivated"),
formatBool(res.Instance07Activated, "activated", "deactivated"),
formatBool(res.Instance08Activated, "activated", "deactivated"),
formatBool(res.Instance09Activated, "activated", "deactivated"),
formatBool(res.Instance10Activated, "activated", "deactivated"),
formatBool(res.Instance11Activated, "activated", "deactivated"),
formatBool(res.Instance12Activated, "activated", "deactivated"),
formatBool(res.Instance13Activated, "activated", "deactivated"),
formatBool(res.Instance14Activated, "activated", "deactivated"),
formatBool(res.Instance15Activated, "activated", "deactivated"),
formatBool(res.Instance16Activated, "activated", "deactivated"),
)
}
func (c *Client) GetPayloadActivationStatus(ctx context.Context, payloadType PayloadType) (response *GetPayloadActivationStatusResponse, err error) {
request := &GetPayloadActivationStatusRequest{
PayloadType: payloadType,
}
response = &GetPayloadActivationStatusResponse{}
response.PayloadType = request.PayloadType
err = c.Exchange(ctx, request, response)
return
}