cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mtsMedtronicStealthlink2.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  $Id: mtsMedtronicStealthlink.h 3754 2012-07-27 15:06:53Z dmirota1 $
6 
7  Author(s): Peter Kazanzides, Anton Deguet, Daniel Mirota
8  Created on: 2006
9 
10  (C) Copyright 2006-2011 Johns Hopkins University (JHU), All Rights Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 */
20 
21 #ifndef _mtsMedtronicStealthlink_h
22 #define _mtsMedtronicStealthlink_h
23 
28 
29 // Always include last
31 
32 // forward declarations of Stealthlink types
33 namespace MNavStealthLink {
34  class StealthServer;
35  class Exam;
36  class SurgicalPlan;
37  class Instrument;
38  class Frame;
39  class Registration;
40  class InstrumentPosition;
41  class DataItem;
42  template <typename T> class Subscription;
43 }
44 
46  protected:
47  std::string myName;
49  myGenericObject(const std::string & name):myName(name), myStateTable(256,myName + "Table"){
51  }
52  public:
53  void AssignAndAdvance(const MNavStealthLink::DataItem & item_in){
54  this->Assign(item_in);
56  }
57  virtual void Assign(const MNavStealthLink::DataItem & item_in) = 0;
58 
59  virtual void ConfigureInterfaceProvided(mtsInterfaceProvided * provided_in) = 0;
60 };
61 
62 
63 
65 {
67 
68 
69  MNavStealthLink::StealthServer * StealthServerProxy;
70 
71  osaThread StealthServerProxyThread;
72 
73  void * StealthlinkRun(void *);
74 
75  bool StealthlinkPresent;
76 
77  // Class used to store tool information using cisstParameterTypes
78  class Tool: public myGenericObject
79  {
80  std::string StealthName;
81  std::string InterfaceName;
82  public:
83  Tool(const std::string &stealthName, const std::string &interfaceName): myGenericObject(interfaceName),
84  StealthName(stealthName), InterfaceName(interfaceName) {this->myStateTable.AddData(this->TooltipPosition,this->myName + "Position");
85  this->myStateTable.AddData(this->MarkerPosition,this->myName + "Marker");}
86  ~Tool(void) {}
87  const std::string & GetStealthName(void) const { return StealthName; }
88  const std::string & GetInterfaceName(void) const { return InterfaceName; }
89 
90  void Assign(const MNavStealthLink::DataItem & item_in);
91  void ConfigureInterfaceProvided(mtsInterfaceProvided * provided_in);
92 
93  prmPositionCartesianGet TooltipPosition;
94  prmPositionCartesianGet MarkerPosition;
95 
96  };
97 
98  typedef std::vector<Tool *> ToolsContainer;
99  ToolsContainer Tools;
100 
101  //Class used to store surgical plan data
102  class SurgicalPlan:public myGenericObject {
103  public:
104  SurgicalPlan():myGenericObject("SurgicalPlan") {this->entry.SetSize(3);
105  this->target.SetSize(3);
106  this->myStateTable.AddData(this->entry,this->myName + "entry");
107  this->myStateTable.AddData(this->target,this->myName + "target");}
108  void Assign(const MNavStealthLink::DataItem & item_in);
109  void ConfigureInterfaceProvided(mtsInterfaceProvided * provided_in);
110  mtsDoubleVec entry;
111  mtsDoubleVec target;
112  };
113 
114  // Class used to store registration data
115  class Registration: public myGenericObject
116  {
117  public:
118  Registration():myGenericObject("Registration") {this->myStateTable.AddData(this->Transformation,this->myName + "Transformation");
119  this->myStateTable.AddData(this->Valid,this->myName + "Valid");
120  this->myStateTable.AddData(this->PredictedAccuracy,this->myName + "PredictedAccuracy");}
121 
122  void Assign(const MNavStealthLink::DataItem & item_in);
123  void ConfigureInterfaceProvided(mtsInterfaceProvided * provided_in);
124 
126  mtsBool Valid;
127  mtsDouble PredictedAccuracy;
128 
129 
130  };
131  Registration RegistrationMember;
132  void GetRegistrationValid(bool & valid_out) const;
133 
134  // Class used to store exam info
135  class ExamInformation: public myGenericObject
136  {
137  public:
138  ExamInformation():myGenericObject("ExamInformation"){this->myStateTable.AddData(this->VoxelScale,this->myName + "ExamInformationVoxelScale");
139  this->myStateTable.AddData(this->Size,this->myName + "ExamInformationSize");
140  this->myStateTable.AddData(this->Valid,this->myName + "ExamInformationValid");}
141  void Assign(const MNavStealthLink::DataItem & item_in);
142  void ConfigureInterfaceProvided(mtsInterfaceProvided * provided_in);
143 
144  mtsDouble3 VoxelScale;
145  mtsInt3 Size;
146  bool Valid;
147  };
148 
149  void RequestExamInformation(void);
150 
152  void ResetAllTools(void);
153 
155  Tool * FindTool(const std::string & stealthName) const;
156 
158  Tool * AddTool(const std::string & stealthName, const std::string & interfaceName);
159 
160  void Init(void);
161 
162  // Stealthlink 2.0 callback
163 
164  class myCallback{
165  private:
166  mtsMedtronicStealthlink * my_parent;
167  protected:
168  template <typename T> friend class MNavStealthLink::Subscription;
169  friend class mtsMedtronicStealthlink;
170  void operator()(const MNavStealthLink::DataItem& item_in) const;
171  public:
172  myCallback(mtsMedtronicStealthlink * parent_in):my_parent(parent_in) {}
173  };
174 
175  myCallback myCallbackMember;
176  void LogWarning(const std::string & string_in){
177  CMN_LOG_CLASS_RUN_WARNING << string_in << std::endl;
178  }
179 
180  //Stealthlink 2.0 Subscriptions
181 
186 
187  struct less_DataItem : std::binary_function<const MNavStealthLink::DataItem *, const MNavStealthLink::DataItem *, bool>
188  {
189  bool operator() (const MNavStealthLink::DataItem * a, const MNavStealthLink::DataItem * b) const ;
190  };
191 
192  typedef std::map<const MNavStealthLink::DataItem * ,myGenericObject *,less_DataItem> DataMapContainer;
193  typedef std::pair<const MNavStealthLink::DataItem * ,myGenericObject *> DataMapContainerItem;
194  typedef std::pair<DataMapContainer::iterator,bool> DataMapContainerInsertReturnValue;
195  DataMapContainer myDataMap;
196 
197  public:
198  mtsMedtronicStealthlink(const std::string & taskName);
200 
201  void Startup(void);
202 
210  void Configure(const std::string & filename = "");
211 
212  void Run(void);
213 
214  void Cleanup(void);
215 };
216 
218 
219 
220 
221 #endif // _mtsMedtronicStealthlink_h
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
Typedef for different transformations.
Defines a task with a Run method trigger by signals (any queued command or event).
std::string myName
Definition: mtsMedtronicStealthlink2.h:47
mtsStateTable myStateTable
Definition: mtsMedtronicStealthlink2.h:48
void AssignAndAdvance(const MNavStealthLink::DataItem &item_in)
Definition: mtsMedtronicStealthlink2.h:53
Define a thread object.
Definition: osaThread.h:164
const int CMN_DYNAMIC_CREATION_ONEARG
Definition: cmnClassRegisterMacros.h:333
virtual void Startup(void)
Definition: mtsComponent.h:262
CMN_DECLARE_SERVICES_INSTANTIATION(mtsMedtronicStealthlink)
Definition: mtsTaskFromSignal.h:40
virtual void Configure(const std::string &CMN_UNUSED(filename)="")
Definition: mtsTask.h:218
Definition: mtsStateTable.h:67
virtual void ConfigureInterfaceProvided(mtsInterfaceProvided *provided_in)=0
void Assign(const OtherT &other)
Definition: cisstVectorEigenAddons.h:3
#define CMN_LOG_CLASS_RUN_WARNING
Definition: cmnLogger.h:118
virtual void Assign(const MNavStealthLink::DataItem &item_in)=0
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
void SetAutomaticAdvance(bool automaticAdvance)
Definition: mtsStateTable.h:353
mtsDoubleMatFrm3 mtsFrm3
Definition: mtsTransformationTypes.h:68
void Advance(void)
Definition: mtsInterfaceProvided.h:96
virtual void Run(void)=0
virtual void Cleanup(void)
Definition: mtsComponent.h:267
Definition: mtsMedtronicStealthlink2.h:45
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76
myGenericObject(const std::string &name)
Definition: mtsMedtronicStealthlink2.h:49
Definition: prmPositionCartesianGet.h:37