You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
5.4 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/****************************************************************************
** File name : HTIEC61850Macros.h
** Description : IEC 61850 Macros define
** Create date : 2019.09.01
** Auther by : Liuyx
** Version info : V1.0.01
** Copyright (C) 2002-2019 xi'an huatek, Inc Co., Ltd
** Update record:
** DATE AUTHER DESC
** -------------------------------------------------------------------------
** 2019.09.01 Liuyx first build
****************************************************************************/
#ifndef __HT_IEC_61850_MACROS_H
#define __HT_IEC_61850_MACROS_H
#include "HTGlobal.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/************************************************************************************
* 关于comtrade文件配置文件的宏定义。
* 在此采用预定义最大个数方法,避免动态内存管理的问题。
*
* 相关字符串最大字符个数一般不会超过16个
* 模拟量端口最大个数一般不会超过64个
* 数字量量端口最大个数一般不会超过64个
* 采样率最大个数一般不会超过8个
*
************************************************************************************/
#define CMTR_REV_YEAR_LENGTH 4
#define CMTR_STRING_MAX_LENGTH 64
#define CMTR_ANALOG_MAX_COUNT 255
#define CMTR_DIGIT_MAX_COUNT 255
#define CMTR_SMPRATE_MAX_COUNT 255
#ifdef _WIN32
#define f_open _open
#define f_read _read
#define f_write _write
#define f_close _close
#else
#define f_open open
#define f_read read
#define f_write write
#define f_close close
#endif
/************************************************************************************
* ht_cmtr_openrb/ht_cmtr_openwb/ht_cmtr_openab/ht_cmtr_close
* - 可以根据需要改写该接口如重定义为网口的recv\send、串口r\w等
* @pfd: 文件地址、缓冲区地址、或者socket地址等
* @str: 文件路径或者联机ip或者串口地址或者共享内存名称
*
************************************************************************************/
#define ht_cmtr_openrb(str) (f_open((str), O_RDONLY, S_IWRITE | S_IREAD))
#define ht_cmtr_openwb(str) (f_open((str), O_CREAT | O_RDWR, S_IWRITE | S_IREAD))
#define ht_cmtr_openab(str) (f_open((str), O_CREAT | O_APPEND | O_RDWR, S_IWRITE | S_IREAD))
#define ht_cmtr_close(pfd) (f_close(pfd))
//字节序高低位转换开关
//#define ENDIAN_CONIVER
// 宏开关 定义为文件读写
#define CMTR_IOFILE
//#define CMTR_IOBUFFER
// 是否输出txt的文本文件
//#define CMTR_OUT_TXTFILE
// 数据库操作类型
#define DB_OPT_INSERT 1
#define DB_OPT_UPDATE 2
#define DB_OPT_DELETE 3
/************************************************************************************
* 宏定义文件的读写操作,可以根据需要改写该接口,如重定义
* 为网口的recv\send、串口r\w等。
*
* ht_read_cmtr_bufn/ht_read_cmtr_bufn - cmtr的读写操作
* @pfd: 读写地址可以为文件的fd、或者buffer地址等
* @buf: 缓冲区地址
* @count: 需要读写的字节数
*
************************************************************************************/
#if defined(CMTR_IOFILE)
//typedef int _my_cmtr_ioptr;
#define ht_read_cmtr_bufn(pfd, buf, count) \
do { \
if (f_read((pfd), (buf), (count)) <= 0) { \
(pfd) = -1; \
} \
} while (0);
#define ht_write_cmtr_bufn(pfd, buf, count) \
do { \
if (f_write((pfd), (buf), (count)) <= 0) { \
(pfd) = -1; \
} \
} while (0);
#define ht_check_cmtr_ptr(pfd) \
(((pfd) != -1) && ((pfd) != 0))
#elif defined(CMTR_IOBUFFER)
//typedef u8* _my_cmtr_ioptr;
//typedef unsigned char* _my_cmtr_ioptr;
#define ht_read_cmtr_bufn(pfd, buf, count) \
do { \
memcpy((buf), (pfd), (count)); \
(pfd) += (count); \
} while (0);
#define ht_write_cmtr_bufn(pfd, buf, count) \
do { \
memcpy((pfd), (buf), (count)); \
(pfd) += (count); \
} while (0);
#define ht_check_cmtr_ptr(pfd) \
(((pfd) != -1) && ((pfd) != 0))
#endif
/************************************************************************************
* ht_read_cmtr_data/ht_write_cmtr_data - 读取/写入并且转换cmtr数据。
* @src: 读写地址为buffer地址
* @data: 读取/写入的数据;
* @count: 需要读取/写入的字节个数;
* @counter: 读取/写入的字节计数器;
*
************************************************************************************/
#define ht_read_cmtr_data(src, data, count, counter) \
do { \
if (ht_check_cmtr_ptr(src)) { \
ht_read_cmtr_bufn((src), (data), (count)); \
(counter) += (count); \
} \
} while (0);
#define ht_write_cmtr_data(src, data, count, counter) \
do { \
if (ht_check_cmtr_ptr(src)) { \
ht_write_cmtr_bufn((src), (data), (count)); \
(counter) += (count); \
} \
} while (0);
#ifdef __cplusplus
}
#endif
#endif /* end __HT_IEC_61850_MACROS_H */