|
|
/*****************************************************************************
|
|
|
* file include/pd_dau.h
|
|
|
* author YuLiang
|
|
|
* version 1.0.0
|
|
|
* date 03-Feb-2023
|
|
|
* brief This file provides all the headers of the dau functions.
|
|
|
******************************************************************************
|
|
|
* Attention
|
|
|
*
|
|
|
* <h2><center>© COPYRIGHT(c) 2021 LandPower</center></h2>
|
|
|
*
|
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
|
* are permitted provided that the following conditions are met:
|
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
|
* this list of conditions and the following disclaimer.
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
|
* and/or other materials provided with the distribution.
|
|
|
* 3. Neither the name of LandPower nor the names of its contributors may be used to
|
|
|
* endorse or promote products derived from this software without specific
|
|
|
* prior written permission.
|
|
|
*
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
*
|
|
|
******************************************************************************/
|
|
|
|
|
|
#ifndef __PD_DAU_H__
|
|
|
#define __PD_DAU_H__
|
|
|
|
|
|
#ifdef CFG_DEV_TYPE_LAND_PD
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
#include <semaphore.h>
|
|
|
#include <termios.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
#include "pd_main.h"
|
|
|
#include "common.h"
|
|
|
|
|
|
/* Define --------------------------------------------------------------------*/
|
|
|
#define DAU_ETH_SLOTS_SUM 4
|
|
|
#define RS485_SLOTS 2
|
|
|
#define DAU_BUF_SIZE 1536
|
|
|
|
|
|
|
|
|
|
|
|
#define UHF "UDP_UHF"
|
|
|
#define HF "UDP_HF"
|
|
|
#define ULTRASONIC "UDP_ULTRASONIC"
|
|
|
#define IRONCORE "RS485_IRONCORE"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Exported types ------------------------------------------------------------*/
|
|
|
typedef int32_t (*dau_recv_cb)(uint8_t, char*, uint16_t);
|
|
|
typedef void (*dau_recv_fun_cb)(uint8_t, char*, uint16_t);
|
|
|
|
|
|
/* 命令类型. */
|
|
|
enum DAU_CMD_TYPE
|
|
|
{
|
|
|
DAU_REQUEST = 1,
|
|
|
DAU_REPLY = 2,
|
|
|
DAU_PRV_REQUEST = 121,
|
|
|
DAU_PRV_REPLY = 122
|
|
|
};
|
|
|
|
|
|
/* 共有命令字. */
|
|
|
enum DAU_CMD
|
|
|
{
|
|
|
DAU_C_CONTACT = 1,
|
|
|
DAU_C_ADD_DAU = 2,
|
|
|
DAU_C_RESET = 3,
|
|
|
DAU_C_UPDATE = 5,
|
|
|
DAU_C_DEV_INFO_SET = 6,
|
|
|
DAU_C_DEV_INFO_GET = 7,
|
|
|
DAU_C_UPDATE_RESULT = 9,
|
|
|
DAU_C_HEARTBEAT = 10,
|
|
|
DAU_C_MAX
|
|
|
};
|
|
|
|
|
|
/* 私有命令字. */
|
|
|
enum DAU_P_CMD
|
|
|
{
|
|
|
DAU_P_CONFIG_SET = 1, // 设备全局参数设置
|
|
|
DAU_P_CONFIG_GET = 2, // 设备全局参数获取
|
|
|
DAU_P_CONFIG_PORT_SET = 3, // 设备端口参数设置
|
|
|
DAU_P_CONFIG_PORT_GET = 4, // 设备端口参数获取
|
|
|
DAU_P_CONFIG_REAL_WAVE = 5, // 实时波形配置
|
|
|
DAU_P_TREND = 10,
|
|
|
DAU_P_REAL_PRPS = 11,
|
|
|
DAU_P_EVENT = 12,
|
|
|
DAU_P_MAX
|
|
|
};
|
|
|
|
|
|
// 板卡类型枚举
|
|
|
typedef enum {
|
|
|
DAU_TYPE_UDP,
|
|
|
DAU_TYPE_RS485,
|
|
|
DAU_TYPE_NONE
|
|
|
} DauType;
|
|
|
|
|
|
// 板卡状态枚举
|
|
|
typedef enum {
|
|
|
DAU_STATE_DISCONNECTED,
|
|
|
DAU_STATE_CONNECTED,
|
|
|
DAU_STATE_REGISTERED
|
|
|
} DauState;
|
|
|
|
|
|
|
|
|
// 通信回调函数类型
|
|
|
//typedef void (*data_recv_callback)(void* priv_data, const void* data, size_t len);
|
|
|
//typedef void (*data_send_callback)(void* priv_data, void* data, size_t len);
|
|
|
|
|
|
// 板卡私有数据结构
|
|
|
typedef struct
|
|
|
{
|
|
|
DauType type;
|
|
|
union
|
|
|
{
|
|
|
struct
|
|
|
{
|
|
|
int sockfd;
|
|
|
struct sockaddr_in addr;
|
|
|
} udp;
|
|
|
struct
|
|
|
{
|
|
|
int fd;
|
|
|
char port[20];
|
|
|
struct termios options;
|
|
|
} rs485;
|
|
|
} comm;
|
|
|
char board_id[32];
|
|
|
void *rx_buffer;
|
|
|
size_t buffer_size;
|
|
|
uint8_t cmd_type;
|
|
|
uint8_t cmd;
|
|
|
} dau_private_data_t;
|
|
|
|
|
|
// 板卡操作回调函数结构
|
|
|
typedef struct
|
|
|
{
|
|
|
int (*init)(dau_private_data_t *data, const char *config);
|
|
|
int (*receive)(dau_private_data_t *data, void *buf, size_t len);
|
|
|
int (*transmit)(dau_private_data_t *data, const void *buf, size_t len);
|
|
|
void (*cleanup)(dau_private_data_t *data);
|
|
|
} dau_operations_t;
|
|
|
|
|
|
// UDP客户端信息
|
|
|
typedef struct {
|
|
|
struct sockaddr_in addr;
|
|
|
char board_id[32];
|
|
|
} udp_client_data;
|
|
|
|
|
|
|
|
|
// RS485设备信息
|
|
|
typedef struct {
|
|
|
int fd; // 串口文件描述符
|
|
|
char board_id[32];
|
|
|
uint8_t address; // 从机地址
|
|
|
} rs485_device_data;
|
|
|
|
|
|
/* 报文头初始化结构体 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t cmd_type;
|
|
|
uint8_t cmd;
|
|
|
uint16_t pkt_id;
|
|
|
char *pkt;
|
|
|
uint32_t len;
|
|
|
} dau_head_init_t;
|
|
|
|
|
|
/* 应答报文 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t result; // 应答结果. 0:成功 1:失败
|
|
|
uint8_t reserved[3]; // 保留
|
|
|
} dau_ack_t;
|
|
|
|
|
|
/* 报文头 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint16_t len;
|
|
|
uint8_t dev_type_m;
|
|
|
uint8_t dev_type_s;
|
|
|
uint32_t dev_id;
|
|
|
uint8_t cmd_type;
|
|
|
uint8_t cmd;
|
|
|
uint16_t pkt_id;
|
|
|
uint8_t version;
|
|
|
uint8_t reserve1[2];
|
|
|
uint8_t slot;
|
|
|
uint32_t sdev_id;
|
|
|
uint8_t reserve2[12];
|
|
|
} dau_pkt_head_t;
|
|
|
|
|
|
/* 开机联络 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t type_m; // 主设备号
|
|
|
uint8_t type_s; // 次设备号
|
|
|
uint8_t reserved1[2]; // 保留
|
|
|
uint32_t dev_id; // 设备ID
|
|
|
char hostname[FILE_NAME_LEN]; // 设备名 128byte
|
|
|
uint32_t factory_date; // 出厂日期.
|
|
|
uint32_t deployment_date; // 部署日期.
|
|
|
uint8_t app_version[DEV_VERSION_STR_LEN]; // 软件版本
|
|
|
uint8_t app_compile_time[DEV_VERSION_STR_LEN]; // 软件编译时间
|
|
|
uint8_t hardware_version[DEV_VERSION_STR_LEN]; // 硬件版本
|
|
|
uint8_t FPGA_version[DEV_VERSION_STR_LEN]; // fpga版本
|
|
|
uint32_t ip; // 本机 IP.
|
|
|
uint32_t mask; // 本机 MASK.
|
|
|
uint32_t gw; // 本机网关
|
|
|
uint8_t mac[MAC_ADDR_LEN]; // MAC地址.
|
|
|
uint16_t server_port; // 服务器端口号.
|
|
|
uint32_t server_ipv4; // 服务器 IP.
|
|
|
uint8_t port[PD_PORT_SUM];
|
|
|
uint8_t port_type[PD_PORT_SUM];
|
|
|
} dau_contact_t;
|
|
|
|
|
|
/* 心跳报文. */
|
|
|
typedef struct
|
|
|
{
|
|
|
float freq; // 实测同步源工频频率.
|
|
|
uint8_t dau_state[4]; // 采集模块的状态.
|
|
|
uint8_t out_sync; // 外接调频同步 1: 有效 0: 无效.
|
|
|
uint8_t pt_sync; // PT同步 1: 有效 0: 无效.
|
|
|
uint8_t in_sync; // 内同步 1: 有效 0: 无效.
|
|
|
uint8_t reserved1; // 预留 字节对齐.
|
|
|
uint8_t port_link_alarm[PD_PORT_SUM]; // 通道传感器连接状态 断线告警.
|
|
|
uint8_t dau_port_num[4]; // 采集板端口数量.
|
|
|
} dau_heartbeat_t;
|
|
|
|
|
|
/* 时间头 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint16_t index; // 包索引
|
|
|
uint16_t sum; // 总包数
|
|
|
uint8_t vport; // 通道号
|
|
|
uint8_t boosterpack; // 是否补包 0:否 1:是
|
|
|
int16_t max; // 通道的最大值.
|
|
|
uint32_t power_fre; // 工频周期.
|
|
|
uint8_t type; // 事件类型.
|
|
|
uint8_t reserved[3]; // 保留
|
|
|
uint32_t identifier; // 数据编号: 0 - (2^32-1) 循环.
|
|
|
uint32_t utc; // UTC 时标.
|
|
|
uint32_t cnt; // 通道每秒脉冲计数值.
|
|
|
uint16_t avg_o; // 通道原始信号 (降噪前) 的平均值.
|
|
|
uint16_t avg; // 脉冲平均值.
|
|
|
uint32_t point_cnt; // 数据累计点数
|
|
|
uint32_t len; // 当前包长度
|
|
|
} dau_event_head_t;
|
|
|
|
|
|
// 板卡管理器结构
|
|
|
typedef struct
|
|
|
{
|
|
|
//dau_private_data_t *private_data;
|
|
|
|
|
|
dau_operations_t ops;
|
|
|
|
|
|
// udp
|
|
|
int sockfd;
|
|
|
struct sockaddr_in addr;
|
|
|
// rs485
|
|
|
int fd;
|
|
|
char port[20];
|
|
|
struct termios options;
|
|
|
|
|
|
char board_id[32];
|
|
|
void *rx_buffer;
|
|
|
size_t buffer_size;
|
|
|
uint8_t cmd_type;
|
|
|
uint8_t cmd;
|
|
|
|
|
|
pthread_t thread_id;
|
|
|
int slot;
|
|
|
bool occupied; // 槽位占用标志
|
|
|
} dau_manager_t;
|
|
|
|
|
|
/* DAU 状态结构体 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t is_insert:1;
|
|
|
uint8_t is_connect:1;
|
|
|
} dau_state_t;
|
|
|
|
|
|
/* DAU 全局结构体 */
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t slot; // dau slot
|
|
|
DauType type;
|
|
|
int fd; // dau socket fd
|
|
|
struct sockaddr_in server; // dau client ip
|
|
|
char buf_recv[DAU_BUF_SIZE]; // dau 收包 buf
|
|
|
DauState stat;
|
|
|
void *private_data;
|
|
|
dau_contact_t info; // dau 信息
|
|
|
dau_heartbeat_t run_status; // dau 运行状态
|
|
|
dau_state_t state; // dau 状态
|
|
|
dau_recv_cb recv_cb; // dau 收包处理函数
|
|
|
} dau_t;
|
|
|
|
|
|
/* Exported macro ------------------------------------------------------------*/
|
|
|
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
|
|
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
|
|
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
|
|
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
|
|
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((REG) & (~(CLEARMASK))) | (SETMASK)))
|
|
|
|
|
|
#define DAU_REG_PORT_ADDR_GET(port) ((port + 1) << 8)
|
|
|
|
|
|
/* Extern global variables ---------------------------------------------------*/
|
|
|
extern dau_t daus[PD_SLOTS_MAX];
|
|
|
|
|
|
/* Extern functions ----------------------------------------------------------*/
|
|
|
extern int32_t dau_handle_init(void);
|
|
|
extern int32_t dau_handle_init_after(void);
|
|
|
extern void dau_send_data(dau_t *dau, dau_head_init_t *head_data);
|
|
|
#endif
|
|
|
#endif
|
|
|
/************************ (C) COPYRIGHT LandPower ***** END OF FILE ****/
|