1 package org.metricshub.ipmi.core.coding.payload.sol;
2
3 /*-
4 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5 * IPMI Java Client
6 * ჻჻჻჻჻჻
7 * Copyright 2023 Verax Systems, MetricsHub
8 * ჻჻჻჻჻჻
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU General Lesser Public
20 * License along with this program. If not, see
21 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
23 */
24
25 import org.metricshub.ipmi.core.common.TypeConverter;
26
27 /**
28 * Enumeration of possible acknowledge states for SOL messages.
29 */
30 public enum SolAckState {
31
32 /**
33 * Message was acknowledged.
34 */
35 ACK,
36
37 /**
38 * Message was not acknowledged.
39 */
40 NACK;
41
42 private static final int ACK_BIT_NUMBER = 6;
43
44 /**
45 * Extracts {@link SolAckState} from given byte.
46 *
47 * @param value
48 * byte with encoded {@link SolAckState}
49 * @return {@link SolAckState} extracted from byte
50 */
51 public static SolAckState extractFromByte(byte value) {
52 return TypeConverter.isBitSetOnPosition(ACK_BIT_NUMBER, value) ? SolAckState.NACK : SolAckState.ACK;
53 }
54
55 /**
56 * Encode information about this {@link SolAckState} in given byte, returning updated byte.
57 *
58 * @param value
59 * current byte value
60 * @return updated byte value
61 */
62 public byte encodeInByte(final byte value) {
63 byte updatedValue = value;
64
65 if (this == SolAckState.NACK) {
66 updatedValue = TypeConverter.setBitOnPosition(ACK_BIT_NUMBER, value);
67 }
68
69 return updatedValue;
70 }
71 }