Class SmcUtil

java.lang.Object
oshi.util.platform.mac.SmcUtil

@ThreadSafe public final class SmcUtil extends Object
Provides access to SMC calls on macOS
  • Field Details

    • SMC_KEY_FAN_NUM

      public static final String SMC_KEY_FAN_NUM
      SMC key for the number of fans.
      See Also:
    • SMC_KEY_FAN_SPEED

      public static final String SMC_KEY_FAN_SPEED
      SMC key format string for fan speed (use with fan index).
      See Also:
    • SMC_KEY_CPU_TEMP

      public static final String SMC_KEY_CPU_TEMP
      SMC key for CPU temperature (Intel).
      See Also:
    • SMC_KEY_CPU_VOLTAGE

      public static final String SMC_KEY_CPU_VOLTAGE
      SMC key for CPU voltage (Intel).
      See Also:
    • SMC_KEYS_CPU_TEMP_AS

      public static final List<String> SMC_KEYS_CPU_TEMP_AS
      Apple Silicon CPU temperature keys, tried in order until one returns a positive value.
    • SMC_KEYS_GPU_TEMP_AS

      public static final List<String> SMC_KEYS_GPU_TEMP_AS
      Apple Silicon GPU temperature keys, tried in order until one returns a positive value.
    • SMC_KEY_CPU_VOLTAGE_AS

      public static final String SMC_KEY_CPU_VOLTAGE_AS
      SMC key for CPU voltage (Apple Silicon).
      See Also:
    • SMC_CMD_READ_BYTES

      public static final byte SMC_CMD_READ_BYTES
      SMC command to read bytes.
      See Also:
    • SMC_CMD_READ_KEYINFO

      public static final byte SMC_CMD_READ_KEYINFO
      SMC command to read key info.
      See Also:
    • KERNEL_INDEX_SMC

      public static final int KERNEL_INDEX_SMC
      Kernel index for SMC calls.
      See Also:
  • Method Details

    • smcOpen

      public static IOKit.IOConnect smcOpen()
      Open a connection to SMC.
      Returns:
      The connection if successful, null if failure
    • smcClose

      public static int smcClose(IOKit.IOConnect conn)
      Close connection to SMC.
      Parameters:
      conn - The connection
      Returns:
      0 if successful, nonzero if failure
    • smcGetFloat

      public static double smcGetFloat(IOKit.IOConnect conn, String key)
      Get a value from SMC which is in a floating point datatype (SP78, FPE2, FLT)
      Parameters:
      conn - The connection
      key - The key to retrieve
      Returns:
      Double representing the value
    • smcGetFirstFloat

      public static double smcGetFirstFloat(IOKit.IOConnect conn, List<String> keys)
      Get the first positive value from a list of SMC keys.
      Parameters:
      conn - The connection
      keys - The keys to try in order
      Returns:
      The first value greater than 0, or 0 if all keys fail
    • smcGetLong

      public static long smcGetLong(IOKit.IOConnect conn, String key)
      Get a 64-bit integer value from SMC
      Parameters:
      conn - The connection
      key - The key to retrieve
      Returns:
      Long representing the value
    • smcGetKeyInfo

      public static int smcGetKeyInfo(IOKit.IOConnect conn, IOKit.SMCKeyData inputStructure, IOKit.SMCKeyData outputStructure)
      Get cached keyInfo if it exists, or generate new keyInfo
      Parameters:
      conn - The connection
      inputStructure - Key data input
      outputStructure - Key data output
      Returns:
      0 if successful, nonzero if failure
    • smcReadKey

      public static int smcReadKey(IOKit.IOConnect conn, String key, IOKit.SMCVal val)
      Read a key from SMC
      Parameters:
      conn - The connection
      key - Key to read
      val - Structure to receive the result
      Returns:
      0 if successful, nonzero if failure
    • smcCall

      public static int smcCall(IOKit.IOConnect conn, int index, IOKit.SMCKeyData inputStructure, IOKit.SMCKeyData outputStructure)
      Call SMC
      Parameters:
      conn - The connection
      index - Kernel index
      inputStructure - Key data input
      outputStructure - Key data output
      Returns:
      0 if successful, nonzero if failure