Program Listing for File LogApi.h
↰ Return to documentation for file (common\include\LogApi.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_LOG_API_H
#define WMX3_LOG_API_H
#include <stdio.h>
#include <windows.h>
#include "WMX3Api.h"
namespace wmx3Api{
namespace constants {
static const unsigned int maxLogBufferSize = ((unsigned int)2048 * 1024);
static const int maxLogBufferSampleSize = 80;
static const int maxLogChannel = 16;
static const int maxLogHeaderBytes = 4096;
static const int maxLogHeaderLines = 2048;
static const int maxLogDirSize = 260;
static const int maxLogFileNameSize = 260;
static const int maxLogDataSize = (32 * 1024);
static const int maxLogDelimiterSize = 8;
static const int maxLogPrecision = 20;
static const int maxMemLogBufferSize = 1024;
static const int maxMemLogChannel = 16;
static const int maxMemLogAxesSize = 8;
static const int maxMemLogDataSize = 100;
static const int maxMemLogIoInputByteSize = 128;
static const int maxMemLogIoOutputByteSize = 128;
static const int maxMemLogMDataByteSize = 128;
static const int maxMemLogTriggerEventSize = 32;
}
class LogErrorCode : public ErrorCode{
public:
enum {
LogTimeIsZero = 0x00011000,
LogBufferIsNotOpened,
LogBufferAlreadyOpened,
LogBufferAlreadyClosed,
LogBufferOpenFailed,
LogBufferIsNull,
LockLogBufferFailed,
SetLogIsNotFinished,
LogBufferDataNotFound,
CurrentlyCollectingLogData,
CurrentlyNotCollectingLogData,
LengthOutOfRange,
FilePathStringTooLarge,
FileNameNotSpecified,
FileDirectoryNotSpecified,
PrecisionOutOfRange,
InvalidFilePath,
TriggerEventCountOutOfRange,
TriggerEventIDOutOfRange,
SamplingPeriodOutOfRange,
MaxLogFileCountSetButNotMaxLogFileSize,
IOFormatCountOutOfRange,
UserMemoryFormatCountOutOfRange,
DataSourceModuleNotLoaded,
NoMoreLogData
};
};
class LogState {
public:
enum T {
Idle,
Running,
WriteFail,
BufferOverflow,
Finished
};
};
class LogStatus{
public:
LogStatus();
bool bufferOpened;
LogState::T logState;
unsigned int samplesToCollect;
unsigned int samplesCollected;
unsigned int samplesWritten;
double millisecondsToCollect;
double millisecondsCollected;
double millisecondsWritten;
};
class LogOptions{
public:
LogOptions();
unsigned char commandPos;
unsigned char feedbackPos;
unsigned char compCommandPos;
unsigned char compFeedbackPos;
unsigned char encoderCommandPos;
unsigned char encoderFeedbackPos;
unsigned char commandVelocity;
unsigned char feedbackVelocity;
unsigned char encoderCommandVelocity;
unsigned char encoderFeedbackVelocity;
unsigned char commandTrq;
unsigned char feedbackTrq;
unsigned char encoderCommandTrq;
unsigned char encoderFeedbackTrq;
unsigned char followingError;
unsigned char homeOffset;
unsigned char inPosFlag;
unsigned char inPosFlag2;
unsigned char inPosFlag3;
unsigned char inPosFlag4;
unsigned char inPosFlag5;
unsigned char commandDistributionEndFlag;
unsigned char posSetFlag;
unsigned char delayedPosSetFlag;
unsigned char opState;
unsigned char detailOpState;
unsigned char userOffsetCommandPos;
unsigned char userOffsetFeedbackPos;
unsigned char axisCommandMode;
unsigned char axisCommandModeFeedback;
unsigned char followingErrorAlarm;
unsigned char ampAlarm;
unsigned char ampAlarmCode;
unsigned char servoOn;
unsigned char servoOffline;
unsigned char positiveLS;
unsigned char negativeLS;
unsigned char nearPositiveLS;
unsigned char nearNegativeLS;
unsigned char externalPositiveLS;
unsigned char externalNegativeLS;
unsigned char positiveSoftLimit;
unsigned char negativeSoftLimit;
unsigned char homeState;
unsigned char homeSwitch;
unsigned char homeDone;
unsigned char triggerOnCommandChange;
unsigned char triggerOnEvent;
unsigned int triggerEventID;
};
class IOLogFormat{
public:
IOLogFormat();
int byte;
int bit;
FormatType::T ioFormatType;
};
class MLogFormat {
public:
MLogFormat();
int byte;
int bit;
FormatType::T mFormatType;
};
class MemoryLogStatus{
public:
MemoryLogStatus();
bool bufferOpened;
LogState::T logState;
unsigned int samplesToCollect;
unsigned int samplesCollected;
double usageRate;
unsigned char overflowFlag;
double interruptPeriod;
};
class MemoryLogAxisData{
public:
MemoryLogAxisData();
double commandPos;
double feedbackPos;
double compCommandPos;
double compFeedbackPos;
int encoderCommandPos;
int encoderFeedbackPos;
double commandVelocity;
double feedbackVelocity;
int encoderCommandVelocity;
int encoderFeedbackVelocity;
double commandTrq;
double feedbackTrq;
int encoderCommandTrq;
int encoderFeedbackTrq;
double followingError;
double homeOffset;
unsigned char inPosFlag;
unsigned char inPosFlag2;
unsigned char inPosFlag3;
unsigned char inPosFlag4;
unsigned char inPosFlag5;
unsigned char commandDistributionEndFlag;
unsigned char posSetFlag;
unsigned char delayedPosSetFlag;
int opState;
int detailOpState;
double userOffsetCommandPos;
double userOffsetFeedbackPos;
int axisCommandMode;
int axisCommandModeFeedback;
};
class MemoryLogIOData{
public:
MemoryLogIOData();
char input[constants::maxMemLogIoInputByteSize];
char output[constants::maxMemLogIoOutputByteSize];
};
class MemoryLogMData {
public:
MemoryLogMData();
char data[constants::maxMemLogMDataByteSize];
};
class MemoryLogOptions{
public:
MemoryLogOptions();
unsigned char triggerEventCount;
unsigned int triggerEventID[constants::maxMemLogTriggerEventSize];
};
class MemoryLogDatas{
public:
MemoryLogDatas();
long long cycleCounter;
MemoryLogAxisData logAxisData[constants::maxMemLogAxesSize];
MemoryLogIOData logIOData;
MemoryLogMData logMData;
};
class MemoryLogData{
public:
MemoryLogData();
unsigned int count;
unsigned char overflowFlag;
MemoryLogDatas logData[constants::maxMemLogDataSize];
};
class LogChannelOptions {
public:
LogChannelOptions();
unsigned int maxLogFileSize;
unsigned int maxLogFileCount;
unsigned int samplingTimeMilliseconds;
bool isRotateFile;
bool stopLoggingOnBufferOverflow;
unsigned int samplingPeriodInCycles;
unsigned int precision;
bool isDelimInLastCol;
char delimiter[constants::maxLogDelimiterSize];
unsigned char triggerOnCondition;
unsigned char triggerOnEvent;
unsigned int triggerEventID;
};
class LogFilePathA {
public:
LogFilePathA();
char dirPath[constants::maxLogDirSize];
char fileName[constants::maxLogFileNameSize];
};
class LogFilePathW {
public:
LogFilePathW();
wchar_t dirPath[constants::maxLogDirSize];
wchar_t fileName[constants::maxLogFileNameSize];
};
class DetailLogState {
public:
enum T {
Idle,
WaitingForTrigger,
Running,
Pause,
Stop,
WriteFail,
BufferOverflow,
Finished
};
};
class DetailLogBufferStatus {
public:
DetailLogBufferStatus();
unsigned char opened;
unsigned int samplesToCollect;
unsigned int samplesCollected;
double millisecondsToCollect;
double millisecondsCollected;
};
class DetailLogStatus {
public:
DetailLogStatus();
DetailLogState::T state;
DetailLogBufferStatus buffer;
double interruptPeriod;
unsigned int logFileCount;
unsigned int samplesWrittenSize;
unsigned int samplesWritten;
double millisecondsWritten;
};
class DetailLogMemoryStatus {
public:
DetailLogMemoryStatus();
DetailLogState::T state;
DetailLogBufferStatus buffer;
double usageRate;
unsigned char overflowFlag;
};
class LogApiLogInput : public LogInput {
public:
enum LogInputType {
CycleCounter,
Time,
};
LogApiLogInput();
LogApiLogInput(LogInputType type);
LogInputType type;
unsigned int GetModuleId();
WMX3APIFUNC GetInputData(unsigned char* buff, int buffSize, unsigned int* dataSize);
WMX3APIFUNC SetInputData(int moduleId, unsigned char* data, unsigned int dataSize);
};
class LogApiLogOutput : public LogOutput {
public:
LogApiLogOutput();
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);
};
class LogType {
public:
enum T {
Log,
MemoryLog
};
};
class ApiLogType {
public:
enum T {
Command,
Response
};
};
class ApiLogInfo{
public:
ApiLogInfo();
int majorVer;
int minorVer;
int revision;
int devId;
int moduleId;
int mode;
ApiLogType::T type;
unsigned int dataLen;
unsigned short logId;
long long timestamp;
};
class ApiLogOptions{
public:
ApiLogOptions();
unsigned int sizePerFile;
bool deviceExcluded[constants::maxDevices];
bool moduleExcluded[constants::moduleLen];
bool moduleResp[constants::moduleLen];
};
class ApiLogState {
public:
enum T {
Stopped,
Stopping,
Running,
Error,
Unknown
};
};
class ApiLogStatus{
public:
ApiLogStatus();
ApiLogState::T state;
unsigned int queueSize;
unsigned int dataSize;
int errorCode;
};
class Log {
private:
HANDLE buff;
WMX3Api *wmx3Api;
bool isSelfDev;
void init(WMX3Api *f);
void close();
public:
Log(WMX3Api *f);
Log(const Log& src);
Log& operator=(const Log& src);
Log();
~Log();
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 TimestampToString(long long timestamp, char *pString, unsigned int size);
static WMX3APIFUNC TimestampToString(long long timestamp, 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 StartLog(unsigned int channel);
WMX3APIFUNC StopLog(unsigned int channel);
WMX3APIFUNC ResetLog(unsigned int channel);
WMX3APIFUNC SetLogHeader(unsigned int channel, char **ppLine, unsigned int numLines);
WMX3APIFUNC SetLog(unsigned int channel, LogInput* input);
WMX3APIFUNC SetLogOption(unsigned int channel, LogChannelOptions *pOption);
WMX3APIFUNC GetLogOption(unsigned int channel, LogChannelOptions *pOption);
WMX3APIFUNC SetLogFilePath(unsigned int channel, LogFilePathA *pPath);
WMX3APIFUNC GetLogFilePath(unsigned int channel, LogFilePathA *pPath);
WMX3APIFUNC SetLogFilePath(unsigned int channel, LogFilePathW *pPath);
WMX3APIFUNC GetLogFilePath(unsigned int channel, LogFilePathW *pPath);
WMX3APIFUNC GetLogStatus(unsigned int channel, LogStatus *pStatus);
WMX3APIFUNC GetDetailLogStatus(unsigned int channel, DetailLogStatus *pStatus);
WMX3APIFUNC SetCustomLog(unsigned int channel, unsigned int moduleId, void *data, unsigned int dataSize, LogType::T type);
WMX3APIFUNC SetLog(unsigned int channel, char *pPath, unsigned int milliseconds,
unsigned int samplePeriodInCycles, AxisSelection *pAxisSelection, LogOptions *pOptions,
unsigned int mode, unsigned int burstWriteLines = 4, unsigned int scale = 9);
WMX3APIFUNC SetLog(unsigned int channel, wchar_t *pPath, unsigned int milliseconds,
unsigned int samplePeriodInCycles, AxisSelection *pAxisSelection, LogOptions *pOptions,
unsigned int mode, unsigned int burstWriteLines = 4, unsigned int scale = 9);
WMX3APIFUNC SetIOLog(unsigned int channel, IOAddress *pInputIOAddress, unsigned int inputSize,
IOAddress *pOutputIOAddress, unsigned int outputSize);
WMX3APIFUNC SetIOLogFormat(unsigned int channel, IOLogFormat *pInputIOLogFormat, unsigned int inputIOFormatCount,
IOLogFormat *pOutputIOLogFormat, unsigned int outputIOFormatCount);
WMX3APIFUNC SetMLog(unsigned int channel, MAddress *pMAddress, unsigned int size);
WMX3APIFUNC SetMLogFormat(unsigned int channel, MLogFormat *pMLogFormat, unsigned int mFormatCount);
WMX3APIFUNC OpenMemoryLogBuffer(unsigned int channel);
WMX3APIFUNC CloseMemoryLogBuffer(unsigned int channel);
WMX3APIFUNC SetMemoryLog(unsigned int channel, LogInput* input);
WMX3APIFUNC SetMemoryLogOption(unsigned int channel, MemoryLogOptions *pOption);
WMX3APIFUNC GetMemoryLogOption(unsigned int channel, MemoryLogOptions *pOption);
WMX3APIFUNC StartMemoryLog(unsigned int channel);
WMX3APIFUNC StopMemoryLog(unsigned int channel);
WMX3APIFUNC ResetMemoryLog(unsigned int channel);
WMX3APIFUNC GetMemoryLogStatus(unsigned int channel, MemoryLogStatus *pStatus);
WMX3APIFUNC GetMemoryLogData(unsigned int channel, LogOutput *pOutput);
WMX3APIFUNC GetMemoryLogData(unsigned int channel, LogOutput **ppOutput, unsigned int size);
WMX3APIFUNC SetMemoryLog(unsigned int channel, AxisSelection *pAxisSelection, MemoryLogOptions *pOption);
WMX3APIFUNC SetMemoryIOLog(unsigned int channel, IOAddress *pInputIOAddress, unsigned int inputSize, IOAddress *pOutputIOAddress, unsigned int outputSize);
WMX3APIFUNC SetMemoryMLog(unsigned int channel, MAddress *pMAddress, unsigned int size);
WMX3APIFUNC GetMemoryLogData(unsigned int channel, MemoryLogData *pData);
WMX3APIFUNC SetApiLog(char *pPath, ApiLogOptions* pOptions = NULL, unsigned int buffSize = 16777216);
WMX3APIFUNC SetApiLog(wchar_t *pPath, ApiLogOptions* pOptions = NULL, unsigned int buffSize = 16777216);
WMX3APIFUNC StartApiLog();
WMX3APIFUNC StopApiLog();
WMX3APIFUNC GetApiLogStatus(ApiLogStatus* pStatus);
WMX3APIFUNC OpenApiLogFile(char *pPath, FILE** ppFile);
WMX3APIFUNC OpenApiLogFile(wchar_t *pPath, FILE** ppFile);
WMX3APIFUNC GetApiLogData(FILE* pFile, unsigned char* pDataBuff, unsigned int buffSize, ApiLogInfo* pApiLogInfo = NULL);
WMX3APIFUNC CloseApiLogFile(FILE* pFile);
};
}
#endif