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) ? 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  }