//
// Created by xajhu on 2021/7/6 0006.
//

#ifndef DAEMON_AGENT_PROJECT_AGENT_INCLUDE_HARDWARE_H
#define DAEMON_AGENT_PROJECT_AGENT_INCLUDE_HARDWARE_H
#ifdef __cplusplus
extern "C" {
#endif

#define MEM_VALUE_SIZE        (64)
#define MAX_WATCH_DISK_DEVICE (256)
#define REFRESH_MAX_PERIOD    (24 * 3600)
#define MAX_SENSOR_ITEMS      (1000)

typedef struct {
    char cpuName[MEM_VALUE_SIZE * 4];
    int  cpuSpeed;
} CPU_DESC, *PCPU_DESC;

typedef struct {
    unsigned int nCores;
    unsigned int nLogicCores;
    unsigned int nCpus;
    double       cpuUsed;
    unsigned int timestamp;
    CPU_DESC     cpuCoreDesc;
} CPU_INFO, *PCPU_INFO;

typedef struct {
    const char *deviceName;
    const char *diskSize;
    const char *diskUsed;
    const char *usedPercent;
} DISK_PART_USED, *PDISK_PART_USED;

typedef struct {
    int            nItems;
    unsigned int   timestamp;
    DISK_PART_USED diskPartInfo[MAX_WATCH_DISK_DEVICE];
} DISK_INFO, *PDISK_INFO;

typedef struct {
    const char *sensorName;
    const char *value;
    const char *unit;
    const char *status;
} SENSOR_ITEM, *PSENSOR_ITEM;

typedef struct {
    int          nItems;
    unsigned int timestamp;
    SENSOR_ITEM  sensorInfo[MAX_SENSOR_ITEMS];
} SENSOR_INFO, *PSENSOR_INFO;

typedef struct {
    char         cachedMemSize[MEM_VALUE_SIZE];
    char         bufferMemSize[MEM_VALUE_SIZE];
    char         availMemSize[MEM_VALUE_SIZE];
    char         freeMemSize[MEM_VALUE_SIZE];
    char         totalMemSize[MEM_VALUE_SIZE];
    unsigned int timestamp;
} MEMORY_INFO, *PMEMORY_INFO;

typedef struct {
    CPU_INFO    cpuInfo;
    MEMORY_INFO memInfo;
    DISK_INFO   diskInfo;
    SENSOR_INFO sensorInfo;
} HARDWARE_INFO, *PHARDWARE_INFO;

int         init_hardware();
const char *get_hardware_json();
//*****************************************************
//  CPU 相关功能
//*****************************************************
int cpu_watch_init();
int get_cpu_info(PCPU_INFO pInfo);

//*****************************************************
//  内存 相关功能
//*****************************************************
unsigned int get_sys_free_memory();
unsigned int get_sys_total_memory();
int          get_memory_info(PMEMORY_INFO pInfo);
int          memory_watch_init();

//*****************************************************
//  磁盘分区 相关功能
//*****************************************************
int get_disk_info(PDISK_INFO pInfo);
int disk_watch_info();

//*****************************************************
//  传感器 相关功能
//*****************************************************
int sensor_watch_init();
int get_sensor_info(PSENSOR_INFO pInfo);

#ifdef __cplusplus
}
#endif
#endif    //DAEMON_AGENT_PROJECT_AGENT_INCLUDE_HARDWARE_H