#ifndef __PE_ADAPTER_H__
#define __PE_ADAPTER_H__

#include "adapter_define.h"

typedef struct pe_class pe_class;
typedef struct pe_adapter
{
    char **compatible; // 属性
    int (*init)(pe_class *this_p, void *);
    //
    int (*set_power)(pe_class *this_p, double power);
    int (*set_repower)(pe_class *this_p, double power);
    int (*set_mode)(pe_class *this_p, int mode);
    int (*set_onoff)(pe_class *this_p, int onoff);
    int (*set_connect)(pe_class *this_p, int connect);
    //
    int (*get_power)(pe_class *this_p, double *power);
    int (*get_repower)(pe_class *this_p, double *repower);
    int (*get_mode)(pe_class *this_p, int *mode);
    int (*get_onoff)(pe_class *this_p, int *onoff);
    int (*get_connect)(pe_class *this_p, int *connect);
    //
    // pe_class *this_p;
    // void* privdata; /* private data for specific PE adapter */
    int (*set_value)(pe_class* this_p, const char* function, double var);  // 扩展接口
    int (*get_int_value)(pe_class* this_p, const char* function, int* var); // 扩展接口
    int (*get_double_value)(pe_class* this_p, const char* function, double* var); // 扩展接口

} pe_adapter;

typedef struct adapter_function adapter_function_t;

struct template_t;
struct pe_class
{
    char *no;
    int compatible_index;
    pe_adapter *opt;
};

extern void dev_set_dev_tag_float(const char *dev_id, const char *var_id, double val);
extern void dev_set_dev_tag_int(const char *dev_id, const char *var_id, int val);
extern int dev_get_dev_tag_int(const char *dev_id, const char *var_id);
extern int dev_get_dev_tag_int_with_result(const char* dev_id, const char* var_id,int *value);
extern double dev_get_dev_tag_float(const char *dev_id, const char *var_id);
extern int dev_get_dev_tag_int_with_result(const char* dev_id, const char* var_id,int *value);
// PCS
int pe_set_power(const char *dev_id, double val);
int pe_set_repower(const char *dev_id, double val);
int pe_set_onoff(const char *dev_id, int val);
int pe_set_mode(const char *dev_id, int val);
int pe_set_connect(const char *dev_id, int val);
int pe_get_onoff(const char *dev_id);
int pe_get_power(const char *dev_id, double *val);
int pe_get_repower(const char *dev_id, double *val);
int pe_get_connect(const char* dev_id);
int pe_get_mode(const char *dev_id);
// adapter init
int pe_adapter_probe(void);

// common function
int pe_set_value(const char* dev_id, const char* function, double val);
int pe_get_int_value(const char* dev_id, const char* function, int* val);
int pe_get_double_value(const char* dev_id, const char* function, double* val);
int pe_function_exist(const char* dev_id, const char* function);
void pe_destory_adapter_group(void);

extern int adapter_function_set(pe_class* this_p, const char* function, double value);
extern int adapter_function_get_int(pe_class* this_p, const char* function, int* value);
extern int adapter_function_get_double(pe_class* this_p, const char* function, double* value);


#endif
