View Javadoc
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) ? NACK : 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 == NACK) {
66  			updatedValue = TypeConverter.setBitOnPosition(ACK_BIT_NUMBER, value);
67  		}
68  
69  		return updatedValue;
70  	}
71  }