#ifndef _CSU_SHARE_MEMORY_H_
#define _CSU_SHARE_MEMORY_H_

#include <stdint.h>
#include <stdbool.h>
#include "../Define/define.h"

//------------------------------------------------------------------------------
#define ShmCsuMeterKey          2001
#define ShmCommonKey            2002

//------------------------------------------------------------------------------
typedef struct StGunIndexInfo {
    volatile uint8_t AcIndex;    //AC Gun Count
    volatile uint8_t AcGunIndex; //AC type index

    volatile uint8_t DcGunIndex; //DC gun Count

    //DC gun type index
    volatile uint8_t ChademoIndex;
    volatile uint8_t CcsIndex;
    volatile uint8_t GbIndex;
} GunIndexInfo;

//------------------------------------------------------------------------------
void *GetGunIndexInfo(void);
bool MappingGunChargingInfo(char *whichTask);

int CreateAllCsuShareMemory(void);
void ClearAllShmMemParameter(void);
void InitialShareMemoryInfo(void);

void SetDcChargingInfoData(uint8_t index, struct ChargingInfoData *chargingInfoIndex);
void *GetDcChargingInfoData(uint8_t index);

void SetAcChargingInfoData(uint8_t index, struct ChargingInfoData *chargingInfoIndex);
void *GetAcChargingInfoData(uint8_t index);

void *GetShmSysConfigAndInfo(void);
void *GetShmSysConfigData(void);
void *GetShmSysInfoData(void);
void *GetShmSysWarningInfo(void);

void *GetShmOCPP16Data(void);
void* GetShmOCPP20Data(void);

void *GetShmCHAdeMOData(void);
void *GetShmGBTData(void);
void *GetShmCcsData(void);

void *GetShmInfoCodeData(void);
void *GetShmFaultCodeData(void);
void *GetShmAlarmCodeData(void);
void *GetShmStatusCodeData(void);

void *GetShmPsuData(void);
void *GetShmPrimaryMcuData(void);

void *GetShmRelayModuleData(void);
void *GetShmFanModuleData(void);
void *GetShmLedModuleData(void);

void *GetShmCsuMeterData(void);
void *GetShmDcCommonData(void);

void MappingChargingInfoData(void);

void *GetShmSelectGunInfo(void);

int InitSelectGunShmMem(void);

#endif /* _CSU_SHARE_MEMORY_H_ */