Program Listing for File CyclicBufferApi.h

Return to documentation for file (common\include\CyclicBufferApi.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_CYCLICBUFFER_API_H
#define WMX3_CYCLICBUFFER_API_H
#include <windows.h>
#include "WMX3Api.h"

namespace wmx3Api{

    class CyclicBufferErrorCode : public ErrorCode{
    public:
        enum {
            CreateBufferFailed = 0x00013000,
            BufferIsNull,
            OpenBufferError,
            BufferIsNotOpened,
            BufferSizeIsNotEnough,
            LockBufferFailed,
            BufferAlreadyOpened
        };
    };

    class CyclicBufferCommandType {
    public:
        enum T {
            AbsolutePos,
            RelativePos
        };
    };

    class CyclicBufferState {
    public:
        enum T {
            Stopped,
            ExecutingCommand,
            WaitingForCommand,
            MaxAccError
        };
    };

    class CyclicBufferSingleAxisCommand{
    public:
        CyclicBufferSingleAxisCommand();

        CyclicBufferCommandType::T type;
        double command;
        unsigned int intervalCycles;
    };


    class CyclicBufferMultiAxisCommands {
    public:
        CyclicBufferMultiAxisCommands();

        CyclicBufferSingleAxisCommand cmd[constants::maxAxes];
    };

    class CyclicBufferSingleAxisOption {
    public:
        CyclicBufferSingleAxisOption();

        double maxAcc;
    };

    class CyclicBufferMultiAxisOption {
    public:
        CyclicBufferMultiAxisOption();

        CyclicBufferSingleAxisOption option[constants::maxAxes];
    };

    class CyclicBufferSingleAxisStatus {
    public:
        CyclicBufferSingleAxisStatus();

        CyclicBufferState::T state;
        unsigned int remainCount;
        unsigned int availableCount;
    };

    class CyclicBufferMultiAxisStatus {
    public:
        CyclicBufferMultiAxisStatus();

        CyclicBufferSingleAxisStatus status[constants::maxAxes];
    };

    class CyclicBuffer{
    private:
        HANDLE buff;
        WMX3Api *wmx3Api;
        bool isSelfDev;
        void init(WMX3Api *f);
        void close();
    public:
        CyclicBuffer(WMX3Api *f);
        CyclicBuffer(const CyclicBuffer& src);
        CyclicBuffer& operator=(const CyclicBuffer& src);
        CyclicBuffer();
        ~CyclicBuffer();

        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 OpenCyclicBuffer(int axis, unsigned int numOfCycles);
        WMX3APIFUNC OpenCyclicBuffer(AxisSelection *pAxisSelection, unsigned int numOfCycles);
        WMX3APIFUNC CloseCyclicBuffer(int axis);
        WMX3APIFUNC CloseCyclicBuffer(AxisSelection *pAxisSelection);

        WMX3APIFUNC AddCommand(int axis, CyclicBufferSingleAxisCommand *pCmd);
        WMX3APIFUNC AddCommand(int axis, CyclicBufferSingleAxisCommand *pCmd, int count);

        WMX3APIFUNC AddCommand(AxisSelection *pAxisSelection, CyclicBufferMultiAxisCommands *pCmds);

        WMX3APIFUNC AddCommand(AxisSelection *pAxisSelection, CyclicBufferMultiAxisCommands *pCmds, int count);

        WMX3APIFUNC Execute(int axis, CyclicBufferSingleAxisOption *pOption = NULL);
        WMX3APIFUNC Execute(AxisSelection *pAxisSelection, CyclicBufferMultiAxisOption *pOption = NULL);
        WMX3APIFUNC Abort(int axis);
        WMX3APIFUNC Abort (AxisSelection *pAxisSelection);
        WMX3APIFUNC ExecQuickStop(int axis);
        WMX3APIFUNC ExecQuickStop (AxisSelection *pAxisSelection);
        WMX3APIFUNC GetStatus(int axis, CyclicBufferSingleAxisStatus *pStatus);
        WMX3APIFUNC GetStatus(AxisSelection *pAxisSelection, CyclicBufferMultiAxisStatus *pStatus);
    };


}

#endif