vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Ultratrak.h
Go to the documentation of this file.
1 /***************************************************************************
2  ultratrak.h - description
3  -------------------
4  begin : February 2003
5  copyright : (C) 2003 by Jan Flasar
6  email : flasar@fi.muni.cz
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef ULTRATRAK_H
19 #define ULTRATRAK_H
20 
21 #ifdef WIN32
22 #include <string>
23 #include <windows.h>
24 #else
25 #define POLHEMUS_PORT 5555
26 #define POLHEMUS_PORT2 5555
27 #define POLHEMUS_HEADER "Frame %3d FrameSize %3d HeaderSize %3d RecordSize %3d \r\n"
28 
29 
30 #include <errno.h>
31 #include <fcntl.h>
32 #include <math.h>
33 #include <netdb.h>
34 #include <pthread.h>
35 #include <stdio.h>
36 #include <stdlib.h>
37 #include <unistd.h>
38 #include <netinet/in.h>
39 #include <sys/ioctl.h>
40 #include <sys/mman.h>
41 #include <sys/socket.h>
42 #include <sys/stat.h>
43 #include <sys/types.h>
44 #include <sys/time.h>
45 #include <arpa/inet.h>
46 #include <sys/wait.h>
47 #include <strings.h>
48 
49 #endif
50 
51 #include <vrecko/IOPins.h>
52 #include <vrecko/Device.h>
53 #include <osg/Vec3>
54 #include <osg/Vec4>
55 #include <osg/Matrix>
56 #include <osg/Quat>
57 
58 
59 #define BUFSIZE 1000
60 
61 
62 namespace vreckoDP_base {
63 
64 
65 
66 class DP_EXPORT Ultratrak : public vrecko::Device {
67  public:
68  Ultratrak() : Device("Ultratrak") {};
69  Ultratrak(const char* _port_number);
70  ~Ultratrak();
71 
72  virtual int openDevice(void);
73  int closeDevice(void);
74 
75  void update(void);
76 
77  int getRotate(float *p_rotate);
78  osg::Vec3 &getRotate(void);
79  osg::Vec3 &getRotateA(void);
80  osg::Matrix &getRotateM(void);
81  osg::Quat &getRotateQ(void);
82  int getTranslate(float *p_trans);
83  osg::Vec3 &getTranslate(void);
84 
85  void setInitialPosition(osg::Vec4 &_pos);
86  void setInitialRotation(osg::Vec4 &_rot);
87  void setInitialPosition(osg::Vec4 &_pos1, osg::Vec4 &_pos2);
88  void setInitialRotation(osg::Vec4 &_rot1, osg::Vec4 &_rot2);
89 
90  void setOriginPosition(float _nx, float _ny, float _nz) {_origin_pos.set(_nx, _ny, _nz);}
91  void setTranslateMapping(float _nx, float _ny, float _nz) {_trans_mapp.set(_nx, _ny, _nz);}
92 
93  protected:
94  std::string _hostname;
95  int scanDevice(void);
96  int _port; // Číslo portu
97  char _buf[BUFSIZE]; // Přijímací buffer
98 #ifdef WIN32
99  WORD _wVersionRequested; // = MAKEWORD(1,1); // Číslo verze
100  WSADATA _data; // Struktura s info. o knihovně
101  std::string _text; // Odesílaný a přijímaný text
102  hostent *_host; // Vzdálený počítač
103  sockaddr_in _serverSock; // Vzdálený "konec potrubí"
104  sockaddr_in _other; // Odesílatel dat
105  SOCKET _mySocket; // Soket
106  // int _port; // Číslo portu
107  //char _buf[BUFSIZE]; // Přijímací buffer
108  int _size; // Počet přijatých a odeslaných bytů
109  int _addrlen; // Délka adresy serveru
110  bool openSocket(void); //char *pcCommPort, HANDLE *temp_hCom);
111 
112 #else
113  int sockfd;
114  struct sockaddr_in sockname;
115  int length;
116  bool openSocket(void); //char *_port_name, int *temp_port_fd);
117 #endif
118  bool scanDeviceX(void);
119 
120 
121  osg::Vec3 _translate[4], _ret_translate[4];
122  osg::Quat _rotate[4], _ret_rotate[4];
123 
124  osg::Vec3 _origin_pos, _trans_mapp;
125 
126  DECLARE_OUTPUT(Position_sensor_0, vrecko::MessageVec3);
127  DECLARE_OUTPUT(Orientation_sensor_0, vrecko::MessageQuat);
128  DECLARE_OUTPUT(Position_sensor_1, vrecko::MessageVec3);
129  DECLARE_OUTPUT(Orientation_sensor_1, vrecko::MessageQuat);
130  DECLARE_OUTPUT(Position_sensor_2, vrecko::MessageVec3);
131  DECLARE_OUTPUT(Orientation_sensor_2, vrecko::MessageQuat);
132  DECLARE_OUTPUT(Position_sensor_3, vrecko::MessageVec3);
133  DECLARE_OUTPUT(Orientation_sensor_3, vrecko::MessageQuat);
134 };
135 
136 }
137 
138 #endif