text: /**
   * @file psc.h
   * @brief PSC service IPC wrapper.
   * @author SciresM
   * @copyright libnx Authors
   */
  #pragma once
  #include "../types.h"
  #include "../kernel/event.h"
  #include "../services/sm.h"
  
  typedef enum {
      PscPmState_Awake = 0,               ///< Everything is awake.
      PscPmState_ReadyAwaken = 1,         ///< Preparing to transition to awake.
      PscPmState_ReadySleep = 2,          ///< Preparing to transition to sleep.
      PscPmState_ReadySleepCritical = 3,  ///< Critical services are ready to sleep.
      PscPmState_ReadyAwakenCritical = 4, ///< Critical services are ready to wake up.
      PscPmState_ReadyShutdown = 5,       ///< Preparing to transition to shutdown.
  } PscPmState;
  
  typedef struct {
      Event event;
      Service srv;
      u16 module_id;
  } PscPmModule;
  
  Result pscInitialize(void);
  void pscExit(void);
  Service* pscGetServiceSession(void);
  
  Result pscGetPmModule(PscPmModule *out, u16 module_id, const u16 *dependencies, size_t dependency_count, bool autoclear);
  
  Result pscPmModuleGetRequest(PscPmModule *module, PscPmState *out_state, u32 *out_flags);
  Result pscPmModuleAcknowledge(PscPmModule *module, PscPmState state);
  Result pscPmModuleFinalize(PscPmModule *module);
  