cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mtsNDISerial.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Anton Deguet, Ali Uneri
7  Created on: 2009-10-13
8 
9  (C) Copyright 2009-2012 Johns Hopkins University (JHU), All Rights Reserved.
10 
11 --- begin cisst license - do not edit ---
12 
13 This software is provided "as is" under an open source license, with
14 no warranty. The complete license can be found in license.txt and
15 http://www.cisst.org/cisst/license.txt.
16 
17 --- end cisst license ---
18 */
19 
45 #ifndef _mtsNDISerial_h
46 #define _mtsNDISerial_h
47 
54 #include <sawNDITracker/sawNDITrackerExport.h> // always include last
55 
56 
58 {
60 
61  protected:
62  class Tool
63  {
64  public:
65  Tool(void);
66  ~Tool(void) {};
67 
68  std::string Name;
69  unsigned int FrameNumber;
70  double ErrorRMS;
74 
75  char PortHandle[3];
76  // PHINF 0001
77  char MainType[3];
78  char ManufacturerID[13];
79  char ToolRevision[4];
80  char SerialNumber[9];
81  // PHINF 0004
82  char PartNumber[21];
83 
85  };
86 
87  public:
88  mtsNDISerial(const std::string & taskName, const double period) :
89  mtsTaskPeriodic(taskName, period, false, 5000) { Construct(); }
91  mtsTaskPeriodic(arg) { Construct(); }
92  ~mtsNDISerial(void) {};
93 
94  void Construct(void);
95  void Configure(const std::string & filename = "");
96  void Startup(void) {};
97  void Run(void);
98  void Cleanup(void);
99 
100  size_t GetNumberOfTools(void) const {
101  return Tools.size();
102  }
103  std::string GetToolName(const unsigned int index) const;
104 
105  void PortHandlesInitialize(void);
106  void PortHandlesQuery(void);
107  void PortHandlesEnable(void);
108 
109  protected:
110  enum { MAX_BUFFER_SIZE = 512 };
111  enum { CRC_SIZE = 4 };
112 
113  size_t GetSerialBufferSize(void) const {
114  return SerialBufferPointer - SerialBuffer;
115  }
116  size_t GetSerialBufferAvailableSize(void) const {
117  return MAX_BUFFER_SIZE - GetSerialBufferSize();
118  }
119  size_t GetSerialBufferStringSize(void) const {
120  if (*(SerialBufferPointer - 1) == '\0') {
121  return GetSerialBufferSize() - 1;
122  }
123  CMN_LOG_CLASS_RUN_ERROR << "GetSerialBufferStringSize: string is not null terminated" << std::endl;
124  return 0;
125  }
126 
127  void CommandInitialize(void);
128  void CommandAppend(const char command);
129  void CommandAppend(const char * command);
130  void CommandAppend(const int command);
131  bool CommandSend(void);
132  bool CommandSend(const char * command) {
133  CommandInitialize();
134  CommandAppend(command);
135  return CommandSend();
136  }
137  bool ResponseRead(void);
138  bool ResponseRead(const char * expectedMessage);
139  unsigned int ComputeCRC(const char * data);
140  bool ResponseCheckCRC(void);
141 
142  bool ResetSerialPort(void);
143  bool SetSerialPortSettings(osaSerialPort::BaudRateType baudRate,
144  osaSerialPort::CharacterSizeType characterSize,
145  osaSerialPort::ParityCheckingType parityChecking,
147  osaSerialPort::FlowControlType flowControl);
148  void Beep(const int & numberOfBeeps);
149 
150  void LoadToolDefinitionFile(const char * portHandle, const char * filePath);
151  Tool * CheckTool(const char * serialNumber);
152  Tool * AddTool(const std::string & name, const char * serialNumber);
153  Tool * AddTool(const std::string & name, const char * serialNumber, const char * toolDefinitionFile);
154 
155  void ToggleTracking(const bool & track);
156  void Track(void);
157  void CalibratePivot(const std::string & toolName);
158  void ReportStrayMarkers(void);
159 
161  char SerialBuffer[MAX_BUFFER_SIZE];
163 
167 
170 
171  double ReadTimeout;
173 };
174 
176 
177 #endif // _mtsNDISerial_h
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
~mtsNDISerial(void)
Definition: mtsNDISerial.h:92
size_t GetSerialBufferStringSize(void) const
Definition: mtsNDISerial.h:119
BaudRateType
Definition: osaSerialPort.h:62
ParityCheckingType
Definition: osaSerialPort.h:98
prmPositionCartesianGet TooltipPosition
Definition: mtsNDISerial.h:72
cmnNamedMap< Tool > PortToTool
Definition: mtsNDISerial.h:166
mtsNDISerial(const mtsTaskPeriodicConstructorArg &arg)
Definition: mtsNDISerial.h:90
mtsNDISerial(const std::string &taskName, const double period)
Definition: mtsNDISerial.h:88
double ErrorRMS
Definition: mtsNDISerial.h:70
Definition: mtsTaskPeriodic.h:38
char * SerialBufferPointer
Definition: mtsNDISerial.h:162
Typedef for fixed size vectors.
double ReadTimeout
Definition: mtsNDISerial.h:171
bool IsTracking
Definition: mtsNDISerial.h:168
const int CMN_DYNAMIC_CREATION_ONEARG
Definition: cmnClassRegisterMacros.h:333
Definition: mtsNDISerial.h:62
unsigned int FrameNumber
Definition: mtsNDISerial.h:69
osaSerialPort SerialPort
Definition: mtsNDISerial.h:160
size_t GetSerialBufferAvailableSize(void) const
Definition: mtsNDISerial.h:116
bool CommandSend(const char *command)
Definition: mtsNDISerial.h:132
size_t GetNumberOfTools(void) const
Definition: mtsNDISerial.h:100
ToolsType Tools
Definition: mtsNDISerial.h:165
FlowControlType
Definition: osaSerialPort.h:110
CharacterSizeType
Definition: osaSerialPort.h:83
mtsInterfaceProvided * Interface
Definition: mtsNDISerial.h:71
virtual void Configure(const std::string &CMN_UNUSED(filename)="")
Definition: mtsTask.h:218
Definition: mtsNDISerial.h:57
Definition: osaStopwatch.h:82
void Startup(void)
Definition: mtsNDISerial.h:96
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
vct3 TooltipOffset
Definition: mtsNDISerial.h:84
StopBitsType
Definition: osaSerialPort.h:116
Defines a periodic task.
size_t GetSerialBufferSize(void) const
Definition: mtsNDISerial.h:113
Definition: mtsInterfaceProvided.h:96
#define CMN_LOG_CLASS_RUN_ERROR
Definition: cmnLogger.h:117
virtual void Run(void)=0
osaStopwatch ResponseTimer
Definition: mtsNDISerial.h:172
mtsMatrix< double > StrayMarkers
Definition: mtsNDISerial.h:169
Definition: mtsTaskPeriodic.h:80
~Tool(void)
Definition: mtsNDISerial.h:66
Serial port.
Definition: osaSerialPort.h:50
virtual void Cleanup(void)
Definition: mtsComponent.h:267
prmPositionCartesianGet MarkerPosition
Definition: mtsNDISerial.h:73
CMN_DECLARE_SERVICES_INSTANTIATION(mtsNDISerial)
cmnNamedMap< Tool > ToolsType
Definition: mtsNDISerial.h:164
Declaration of osaSerialPort.
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76
Definition: prmPositionCartesianGet.h:37