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