#ifndef __LRS_SERVICE_H__
#define __LRS_SERVICE_H__

#define LRS_DEV_TABLE_SIZE  64
#define LRS_DEV_TYPE_LEN    32
#define LRS_DEV_NO_LEN      64
#define LRS_TAG_NAME_LEN    64
#define LRS_LC_NAME    32
#define LRS_PE_FUNC_NAME_LEN    32

#define LRS_DEFAULT_INTERVAL_MS     1000
#define LRS_MIN_INTERVAL_MS         100

enum lrs_calc_type_t {
    LRS_CT_AND = 0,
    LRS_CT_OR,
    LRS_CT_ADD,
    LRS_CT_USE_CALC_CB,
};

typedef void (*lrs_tag_cb)(const char *dev_type, const char *ems_tag_name, double val);
typedef void(*lrs_calc_val_cb)(double cache_val, double new_val, double *update_val);

int lrs_init(void);
int lrs_start(void);

void lrs_deinit(void);

int lrs_update_dev_no(const char *dev_type, const char *dev_no);

typedef struct lrs_tag_info {
    char *dev_type;
    char *ems_tag_name;
    char *lc_tag_name;
    int calc_type;
    char *pe_func_name;
    lrs_tag_cb cb;
    double init_val;
    lrs_calc_val_cb calc_cb;
    int skip_if_no_dev;  // 本轮未遍历到设备时跳过写点位(保持点位原值)
} lrs_tag_info_t;
int lrs_register_tag(lrs_tag_info_t *info);

int lrs_set_interval(int ms);

#endif

