2024-11-16 13:36:54 +08:00

101 lines
3.4 KiB
C

/*********************************************************************************************************
* ------------------------------------------------------------------------------------------------------
* file description
* ------------------------------------------------------------------------------------------------------
* \file cpul.h
* \unit cpul
* \brief This is a simple cpuload module for C language
* \author Lamdonn
* \version v1.0.0
* \license GPL-2.0
* \copyright Copyright (C) 2023 Lamdonn.
********************************************************************************************************/
#ifndef __cpul_H
#define __cpul_H
#include "stdint.h"
/* Version infomation */
#define CPUL_V_MAJOR 0
#define CPUL_V_MINOR 1
#define CPUL_V_PATCH 0
#define CPUL_GEN_BSIZE 4
#define CPUL_E_OK 0 // Success
#define CPUL_E_INVALID 1 // Invalid `CPUL` pointer
#define CPUL_E_RAW 2 // Invalid raw function
#define CPUL_E_PARA 3 // Invalid parameter
#define CPUL_E_NTEST 4 // CPUL load testing has not started
#define CPUL_E_OVER 5 // CPUL load exceeds range
typedef uint16_t (*cpul_raw_t)(uint8_t coreid); // Type definition for the raw CPUL load function
/**
* \brief Structure to control CPUL load parameters.
*/
typedef struct
{
uint32_t refine; ///< Refined load value
uint16_t cload; ///< Current load value
uint16_t tload; ///< Target load value
} CPUL_CTRL;
/**
* \brief Structure to represent a CPU Load Manager.
*/
typedef struct
{
uint8_t coreid; ///< Core ID
cpul_raw_t raw; ///< Pointer to the raw CPUL load function
uint32_t resolution; ///< Resolution of the load control
CPUL_CTRL ctrl; ///< Control structure for CPUL management
} CPUL;
/**
* \brief Initialize the CPUL instance.
*
* This function initializes the CPUL structure to default values
* and checks for valid pointers.
*
* \param[in] cpul: Pointer to the CPUL instance.
* \return Returns CPUL_E_OK on success, otherwise an error code.
*/
int cpul_init(CPUL *cpul);
/**
* \brief Get the current CPU load.
*
* This function retrieves the current load from the CPUL instance
* and checks for validity of parameters and state.
*
* \param[in] cpul: Pointer to the CPUL instance.
* \param[out] load: Pointer to store the current load value.
* \return Returns CPUL_E_OK on success, otherwise an error code.
*/
int cpul_get(CPUL *cpul, uint16_t *load);
/**
* \brief Set the target CPU load.
*
* This function sets the target load for the CPUL instance and checks for valid parameters.
*
* \param[in] cpul: Pointer to the CPUL instance.
* \param[in] load: Target load value to set.
* \return Returns CPUL_E_OK on success, otherwise an error code.
*/
int cpul_set(CPUL *cpul, uint16_t load);
/**
* \brief Execute a CPUL management task.
*
* This function executes a task to manage the CPU load based on
* the current and target load values.
*
* \param[in] cpul: Pointer to the CPUL instance.
* \return Returns CPUL_E_OK on success, otherwise an error code.
*/
int cpul_task(CPUL *cpul);
#endif