Program Listing for File IOApi.h

Return to documentation for file (common\include\IOApi.h)

//This header file is used to generate the Doxygen manual
//TO STRIP ALL DOXYGEN COMMENTS FROM THIS HEADER FILE, SEARCH FOR THE FOLLOWING REGULAR EXPRESSION AND REPLACE IT WITH BLANK
// (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/\s+)|((//(/)<.*\s*)*(//(/)<.*))|(//(/)[^<].*\s*)

//==========================================DOCUMENTATION GUIDELINES (2017/3/30)=======================================================
//
// 1. References to constants, functions, classes, and class members should be linked using the @ref command. The format should be as
//   follows:
//
//   @ref [Full Path Including Namespaces] "[Name of Constant/Function/Class/Member]"
//
//   Examples: @ref Motion::StartPos "StartPos"
//             @ref Motion::StartPos(TriggerPosCommand *pPosCommand) "StartPos"
//
// 2. When documenting functions, @param should be used to document every function argument. @remarks should be used to explain the
//   function in further detail.
//
// 3. Try to follow the conventions of the existing documentation as much as possible.
//

#ifndef WMX3_IO_API_H
#define WMX3_IO_API_H
#include <windows.h>
#include "WMX3Api.h"

namespace wmx3Api{

    class IOErrorCode : public ErrorCode{
    public:
        enum {
            SharedMemoryNull = 0x00014000,
            IOCountOutOfRange,
            ParameterSettingInvalid,
        };
    };

    namespace constants {
        static const int maxIoLogAddressSize = 256;
        static const int maxIoLogFormatSize = 100;
        static const int maxLogOutputIoInputByteSize = 128;
        static const int maxLogOutputIoOutputByteSize = 128;
    };

    class IoLogInput : public LogInput {
    public:
        IoLogInput();
        unsigned int GetModuleId();
        WMX3APIFUNC GetInputData(unsigned char* buff, int buffSize, unsigned int* dataSize);
        WMX3APIFUNC SetInputData(int moduleId, unsigned char* data, unsigned int dataSize);

        IOAddress inputIOAddress[constants::maxIoLogAddressSize];
        unsigned int inputSize;
        IOAddress outputIOAddress[constants::maxIoLogAddressSize];
        unsigned int outputSize;

        AIOFormat inputIOLogFormat[constants::maxIoLogFormatSize];
        unsigned int inputIOFormatCount;
        AIOFormat  outputIOLogFormat[constants::maxIoLogFormatSize];
        unsigned int outputIOFormatCount;
    };

    class IoLogOutput : public LogOutput {
    public:
        IoLogOutput();
        unsigned int GetModuleId();
        WMX3APIFUNC SetOutputData(int moduleId, unsigned char* cfgData, unsigned int cfgDataSize, unsigned char* data, unsigned int dataSize, unsigned int dataIndex, unsigned int storeIndex);

        char input[constants::maxLogOutputDataSize][constants::maxLogOutputIoInputByteSize];
        char output[constants::maxLogOutputDataSize][constants::maxLogOutputIoOutputByteSize];
    };

    class IoEventInput : public EventInput {
    public:
        enum IoEventInputType {
            IOBit,
            NotIOBit,
            OrIOBit,
            AndIOBit,
            XorIOBit,
            NandIOBit,
            NorIOBit,
            XnorIOBit,
            DelayIOBit,
            EqualIOBytes,
            GreaterIOBytes,
            LessIOBytes
        };

        IoEventInputType inputFunction;
        union InputFunctionArguments {
            InputFunctionArguments();

            struct IOBit {
                unsigned int byteAddress;
                unsigned char bitAddress;
                unsigned char invert;
                IOSourceType::T ioSourceType;
            }ioBit;

            struct NotIOBit {
                unsigned int byteAddress;
                unsigned char bitAddress;
                unsigned char invert;
                IOSourceType::T ioSourceType;
            }notIOBit;

            struct OrIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }orIOBit;

            struct AndIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }andIOBit;

            struct XorIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }xorIOBit;

            struct NandIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }nandIOBit;

            struct NorIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }norIOBit;

            struct XnorIOBit {
                unsigned int byteAddress[2];
                unsigned char bitAddress[2];
                unsigned char invert[2];
                IOSourceType::T ioSourceType[2];
            }xnorIOBit;

            struct DelayIOBit {
                unsigned int byteAddress;
                unsigned char bitAddress;
                unsigned char invert;
                IOSourceType::T ioSourceType;
                unsigned int delayTime;
            }delayIOBit;

            struct EqualIOBytes {
                unsigned int byteAddress;
                unsigned char size;
                unsigned int value;
                unsigned char invert;
                IOSourceType::T ioSourceType;
            }equalIOBytes;

            struct GreaterIOBytes {
                unsigned int byteAddress;
                unsigned char size;
                unsigned char isSigned;
                unsigned int value;
                unsigned char invert;
                IOSourceType::T ioSourceType;
            }greaterIOBytes;

            struct LessIOBytes {
                unsigned int byteAddress;
                unsigned char size;
                unsigned char isSigned;
                unsigned int value;
                unsigned char invert;
                IOSourceType::T ioSourceType;
            }lessIOBytes;
        } input;

        IoEventInput();

        int GetInputModuleId();
        WMX3APIFUNC GetInputData(unsigned char* buff, int buffSize, int* dataSize, char *initialState);
        WMX3APIFUNC SetInputData(int moduleId, unsigned char* data, int dataSize);
    };

    class IoEventOutput : public EventOutput {
    public:
        enum IoEventOutputType {
            SetIOOutBit,
        };

        IoEventOutputType outputFunction;
        union OutputFunctionArguments {
            OutputFunctionArguments();

            struct SetIOOutBit {
                unsigned int byteAddress;
                unsigned char bitAddress;
                unsigned char invert;

                unsigned char setOffState;
            }setIOOutBit;
        }output;

        IoEventOutput();

        int GetOutputModuleId();
        WMX3APIFUNC GetOutputData(unsigned char* buff, int buffSize, int* dataSize);
        WMX3APIFUNC SetOutputData(int moduleId, unsigned char* data, int dataSize);
    };

    class Io {
    private:
        WMX3Api *wmx3Api;
        bool isSelfDev;
        void init(WMX3Api *f);
        void close();
        HANDLE hdl;
        void* ioData;
        HANDLE hdlMask;
        void* maskData;

    public:
        Io(WMX3Api *f);
        Io(const Io& src);
        Io& operator=(const Io& src);
        Io();
        ~Io();

        static WMX3APIFUNC ErrorToString(int errCode, char *pString, unsigned int size);
        static WMX3APIFUNC ErrorToString(int errCode, wchar_t *pString, unsigned int size);
        static WMX3APIFUNC ApiLogToString(unsigned char* pLogData, unsigned int logDataSize, char *pString, unsigned int size);
        static WMX3APIFUNC ApiLogToString(unsigned char* pLogData, unsigned int logDataSize, wchar_t *pString, unsigned int size);
        static WMX3APIFUNC GetLibVersion(int *pMajorVersion, int *pMinorVersion, int *pRevisionVersion, int *pFixVersion);

        bool IsDeviceValid();

        WMX3APIFUNC GetVersion(int *pMajorVersion, int *pMinorVersion, int *pRevisionVersion, int *pFixVersion);

        WMX3APIFUNC SetOutBit(int addr, int bit, unsigned char data);
        WMX3APIFUNC SetOutByte(int addr, unsigned char data);
        WMX3APIFUNC SetOutBytes(int addr, int size, unsigned char *pData);
        WMX3APIFUNC SetOutBits(int *pAddr, int *pBit, unsigned char *pData, int count);
        WMX3APIFUNC SetOutAnalogDataChar(int addr, char analogData);
        WMX3APIFUNC SetOutAnalogDataUChar(int addr, unsigned char analogData);
        WMX3APIFUNC SetOutAnalogDataShort(int addr, short analogData);
        WMX3APIFUNC SetOutAnalogDataUShort(int addr, unsigned short analogData);
        WMX3APIFUNC SetOutAnalogDataInt(int addr, int analogData);
        WMX3APIFUNC SetOutAnalogDataUInt(int addr, unsigned int analogData);
        WMX3APIFUNC SetOutBitMaskMode(bool enable);
        WMX3APIFUNC SetOutBitMaskBit(int addr, int bit, unsigned char data);
        WMX3APIFUNC SetOutBitMaskByte(int addr, unsigned char data);
        WMX3APIFUNC SetOutBitMaskBytes(int addr, int size, unsigned char* pData);
        WMX3APIFUNC SetOutBitMaskBits(int* pAddr, int* pBit, unsigned char* pData, int count);

        WMX3APIFUNC GetInBit(int addr, int bit, unsigned char *pData);
        WMX3APIFUNC GetInByte(int addr, unsigned char *pData);
        WMX3APIFUNC GetInBytes(int addr, int size,unsigned char *pData);
        WMX3APIFUNC GetInAnalogDataChar(int addr, char *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUChar(int addr, unsigned char *pAnalogData);
        WMX3APIFUNC GetInAnalogDataShort(int addr, short *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUShort(int addr, unsigned short *pAnalogData);
        WMX3APIFUNC GetInAnalogDataInt(int addr, int *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUInt(int addr, unsigned int *pAnalogData);

        WMX3APIFUNC GetOutBit(int addr, int bit, unsigned char *pData);
        WMX3APIFUNC GetOutByte(int addr, unsigned char *pData);
        WMX3APIFUNC GetOutBytes(int addr, int size, unsigned char *pData);
        WMX3APIFUNC GetOutAnalogDataChar(int addr, char *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUChar(int addr, unsigned char *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataShort(int addr, short *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUShort(int addr, unsigned short *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataInt(int addr, int *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUInt(int addr, unsigned int *pAnalogData);
        WMX3APIFUNC GetOutBitMaskMode(bool* pEnable);
        WMX3APIFUNC GetOutBitMaskBit(int addr, int bit, unsigned char* pData);
        WMX3APIFUNC GetOutBitMaskByte(int addr, unsigned char* pData);
        WMX3APIFUNC GetOutBitMaskBytes(int addr, int size, unsigned char* pData);

        WMX3APIFUNC SetOutBitEx(int addr, int bit, unsigned char data);
        WMX3APIFUNC SetOutByteEx(int addr, unsigned char data);
        WMX3APIFUNC SetOutBytesEx(int addr, int size, unsigned char *pData);
        WMX3APIFUNC SetOutBitsEx(int *pAddr, int *pBit, unsigned char *pData, int count);
        WMX3APIFUNC SetOutAnalogDataCharEx(int addr, char analogData);
        WMX3APIFUNC SetOutAnalogDataUCharEx(int addr, unsigned char analogData);
        WMX3APIFUNC SetOutAnalogDataShortEx(int addr, short analogData);
        WMX3APIFUNC SetOutAnalogDataUShortEx(int addr, unsigned short analogData);
        WMX3APIFUNC SetOutAnalogDataIntEx(int addr, int analogData);
        WMX3APIFUNC SetOutAnalogDataUIntEx(int addr, unsigned int analogData);

        WMX3APIFUNC GetInBitEx(int addr, int bit, unsigned char *pData);
                 WMX3APIFUNC GetInByteEx(int addr, unsigned char *pData);
        WMX3APIFUNC GetInBytesEx(int addr, int size,unsigned char *pData);
        WMX3APIFUNC GetInAnalogDataCharEx(int addr, char *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUCharEx(int addr, unsigned char *pAnalogData);
        WMX3APIFUNC GetInAnalogDataShortEx(int addr, short *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUShortEx(int addr, unsigned short *pAnalogData);
        WMX3APIFUNC GetInAnalogDataIntEx(int addr, int *pAnalogData);
        WMX3APIFUNC GetInAnalogDataUIntEx(int addr, unsigned int *pAnalogData);

        WMX3APIFUNC GetOutBitEx(int addr, int bit, unsigned char *pData);
        WMX3APIFUNC GetOutByteEx(int addr, unsigned char *pData);
        WMX3APIFUNC GetOutBytesEx(int addr, int size, unsigned char *pData);
        WMX3APIFUNC GetOutAnalogDataCharEx(int addr, char *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUCharEx(int addr, unsigned char *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataShortEx(int addr, short *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUShortEx(int addr, unsigned short *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataIntEx(int addr, int *pAnalogData);
        WMX3APIFUNC GetOutAnalogDataUIntEx(int addr, unsigned int *pAnalogData);

        WMX3APIFUNC SetInitialOutByte(int addr, unsigned char data, unsigned char enable);
        WMX3APIFUNC SetInitialOutBytes(int addr, int size, unsigned char *pData, unsigned char *pEnable);
        WMX3APIFUNC GetInitialOutByte(int addr, unsigned char *pData, unsigned char *pEnable);
        WMX3APIFUNC GetInitialOutBytes(int addr, int size, unsigned char *pData, unsigned char *pEnable);
        WMX3APIFUNC GetInitialOutByteInterruptId(int addr, unsigned char *pInterruptId);
        WMX3APIFUNC GetInitialOutBytesInterruptId(int addr, int size, unsigned char *pInterruptId);
    };
}

#endif