xiuos/APP_Framework/Framework/control/shared/control.h

127 lines
2.9 KiB
C

/*
* Copyright (c) 2022 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file control.h
* @brief DEFINE code for control framework app
* @version 3.0
* @author AIIT XUOS Lab
* @date 2022-09-27
*/
#ifndef CONTROL_H
#define CONTROL_H
#include <transform.h>
#include <list.h>
#ifdef __cplusplus
extern "C" {
#endif
struct ControlProtocol;
typedef struct ControlProtocol *ControlProtocolType;
struct ControlDone
{
int (*_open)(struct ControlProtocol *control_protocol);
int (*_close)(struct ControlProtocol *control_protocol);
int (*_read)(struct ControlProtocol *control_protocol, void *buf, size_t len);
int (*_write)(struct ControlProtocol *control_protocol, const void *buf, size_t len);
int (*_ioctl)(struct ControlProtocol *control_protocol, int cmd, void *args);
};
typedef enum
{
PROTOCOL_S7 = 1,
PROTOCOL_MODBUS_TCP,
PROTOCOL_MODBUS_UART,
PROTOCOL_OPC_UA,
PROTOCOL_FINS,
PROTOCOL_MELSEC_1E,
PROTOCOL_MELSEC_3E_Q_L,
PROTOCOL_MELSEC_3E_IQ_R,
PROTOCOL_MELSEC_1C,
PROTOCOL_MELSEC_3C,
PROTOCOL_FREEMODBUS_TCP_SERVER,
PROTOCOL_CIP,
PROTOCOL_ETHERCAT,
PROTOCOL_END
}ProtocolType;
typedef enum
{
CONTROL_INIT,
CONTROL_REGISTERED,
CONTROL_UNREGISTERED,
}ProtocolStatus;
struct ControlDevice
{
char dev_name[20];
int status;
//to do
void *dev_done;
};
struct ControlProtocol
{
char *name;
ProtocolType protocol_type;
ProtocolStatus protocol_status;
struct ControlRecipe *recipe;
struct ControlDone *done;
struct ControlDevice *device;
void *args;
sem_t sem;
pthread_mutex_t lock;
};
/*Control Framework Protocol Init*/
int ControlFrameworkInit(void);
/*Control Framework Find certain Protocol*/
ControlProtocolType ControlProtocolFind(void);
/*Control Framework Protocol Open*/
int ControlProtocolOpen(struct ControlProtocol *control_protocol);
/*Control Framework Protocol Close*/
int ControlProtocolClose(struct ControlProtocol *control_protocol);
/*Control Framework Protocol Read*/
int ControlProtocolRead(struct ControlProtocol *control_protocol, void *buf, size_t len);
/*Control Framework Protocol Write*/
int ControlProtocolWrite(struct ControlProtocol *control_protocol, const void *buf, size_t len);
/*Control Framework Protocol Ioctl*/
int ControlProtocolIoctl(struct ControlProtocol *control_protocol, int cmd, void *args);
/*Control Framework new certain Protocol*/
ControlProtocolType control_protocol;
#ifdef __cplusplus
}
#endif
#endif