00001
00002
00003
#ifndef classMipDevice
00004
#define classMipDevice
00005
00006
class MipDevice;
00007
00008
#include <string>
00009
#include "MipBus.h"
00010
#include "MipCommand.h"
00011
#include "MipManager.h"
00012
00014
00023 class MipDevice {
00024
00025
protected:
00026
#include "MipErrors.inc.h"
00027 #include "MipWarnings.inc.h"
00028
#include "MipAxisStatus.inc.h"
00029
#include "MipTrajectoryFlags.inc.h"
00030
00031
private:
00033
MipBus *mMipBus;
00035
int mDeviceID;
00037
bool mIsOpen;
00038
00040
static const int mMipCommandMax=16;
00042
MipCommand *mMipCommand[mMipCommandMax];
00044
int mMipCommandExecuteIndex;
00046
int mMipCommandAddIndex;
00047
00048
public:
00050
MipDevice(
MipBus *mipbus=0,
int deviceid=0);
00052
MipDevice(
MipManager *mm,
const std::string &device,
int baudrate,
int deviceid);
00053
00055
MipBus *
GetMipBus()
const {
return mMipBus;}
00057
int GetDeviceID()
const {
return mDeviceID;}
00058
00060
bool Open();
00062
bool Close();
00064
bool IsOpen() {
return mIsOpen;}
00065
00067
void OnAckReceived(
MipCommand *cmd);
00069
void OnPacketReceived(
MipCommand *cmd);
00071
void OnErronousPacketReceived(
MipCommand *cmd);
00072
00074
bool AddCommand(
MipCommand *cmd);
00076
bool AddPriorityCommand(
MipCommand *cmd);
00078
void FlushCommandQueue();
00080
MipCommand *
GetNextCommand();
00082
int GetMipCommandMax() {
return mMipCommandMax;}
00084
MipCommand *
GetMipCommand(
int i) {
return mMipCommand[i];}
00085
00087
void SetMipBus(
MipBus *
MipBus);
00089
void SetDeviceID(
int deviceid);
00091
void SetDevice(
MipManager *mm,
const std::string &device,
int baudrate,
int deviceid);
00093
void SetDevice(
MipBus *mipbus,
int deviceid);
00094
00095
bool SendCommand(
int cmdid, MipMessage::eType type);
00096
bool SendCommand_SignedInteger32(
int cmdid, MipMessage::eType type,
int param1);
00097
bool SendCommand_Float(
int cmdid, MipMessage::eType type,
float param1);
00098
bool SendCommand_Byte(
int cmdid, MipMessage::eType type,
unsigned char param1);
00099
bool SendCommand_ByteFloatFloat(
int cmdid, MipMessage::eType type,
unsigned char param1,
float param2,
float param3);
00100
00101
bool SendReadAxisStatus(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadAxisStatus);}
00102
bool SendReadError(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadError);}
00103
bool SendClearError(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sClearError);}
00104
bool SendReadWarning(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadWarning);}
00105
bool SendClearWarning(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sClearWarning);}
00106
bool SendReadVersion(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadVersion);}
00107
00108
bool SendSetRegMode(
int cmdid,
unsigned char mode) {
return SendCommand_Byte(cmdid, MipMessage::sSetRegMode, mode);}
00109
bool SendSetPosVelocity(
int cmdid,
float velocity) {
return SendCommand_Float(cmdid, MipMessage::sSetPosVelocity, velocity);}
00110
bool SendSetWaitMode(
int cmdid,
unsigned char mode) {
return SendCommand_Byte(cmdid, MipMessage::sSetWaitMode, mode);}
00111 bool SendMoveAbsolute(
int cmdid,
int position) {
return SendCommand_SignedInteger32(cmdid, MipMessage::sMoveAbsolute, position);}
00112
bool SendMoveRelative(
int cmdid,
int relposition) {
return SendCommand_SignedInteger32(cmdid, MipMessage::sMoveRelative, relposition);}
00113
bool SendStopMotion(
int cmdid=0,
unsigned char stopmode=0) {
return SendCommand_Byte(cmdid, MipMessage::sStopMotion, stopmode);}
00114
bool SendFindHomeSys(
int cmdid=0,
int timeoutms=0) {
return SendCommand_SignedInteger32(cmdid, MipMessage::sFindHomeSys, timeoutms);}
00115
00116
bool SendReadPosition(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadPosition);}
00117
bool SendReadVelocity(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadVelocity);}
00118
bool SendReadVelocityMean(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadVelocityMean);}
00119
bool SendReadCurrent(
int cmdid=0) {
return SendCommand(cmdid, MipMessage::sReadCurrent);}
00120
00121
bool SendCheckCRC(
int cmdid,
unsigned char selection) {
return SendCommand_Byte(cmdid, MipMessage::sCheckCRC, selection);}
00122
00123
virtual void OnReceivedReadAxisStatus(
int cmdid, eAxisStatusFlags status) = 0;
00124
virtual void OnReceivedReadError(
int cmdid, eError error) = 0;
00125
virtual void OnReceivedClearError(
int cmdid) = 0;
00126
virtual void OnReceivedReadWarning(
int cmdid, eWarning warning) = 0;
00127
virtual void OnReceivedClearWarning(
int cmdid) = 0;
00128
virtual void OnReceivedReadVersion(
int cmdid,
int command_interpreter_version,
int runtime_library_version,
int hardware_revision,
int bootrom_version,
int application_number,
int application_version) = 0;
00129
virtual void OnReceivedSetPosVelocity(
int cmdid) = 0;
00130
virtual void OnReceivedSetWaitMode(
int cmdid) = 0;
00131
virtual void OnReceivedMoveAbsolute(
int cmdid) = 0;
00132
virtual void OnReceivedMoveRelative(
int cmdid) = 0;
00133
virtual void OnReceivedStopMotion(
int cmdid) = 0;
00134
virtual void OnReceivedFindHomeSys(
int cmdid) = 0;
00135
virtual void OnReceivedReadPosition(
int cmdid,
int value) = 0;
00136
virtual void OnReceivedReadVelocity(
int cmdid,
int value) = 0;
00137
virtual void OnReceivedReadVelocityMean(
int cmdid,
int value) = 0;
00138
virtual void OnReceivedReadCurrent(
int cmdid,
int value) = 0;
00139
virtual void OnReceivedCheckCRC(
int cmdid,
bool ok,
int crc) = 0;
00140
00142
void Report(
const std::string &name, std::ostream &out,
int ccindent=0)
const;
00143 };
00144
00145 #endif