vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
NestOfBirds.h
Go to the documentation of this file.
1 /***************************************************************************
2  NestOfBirds.h - description
3  -------------------
4  begin : October 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 L 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 NEST_OF_BIRDS_H
19 #define NEST_OF_BIRDS_H
20 
21 #ifdef WIN32
22 #include <string>
23 #include <windows.h>
24 #else
25 
26 
27 #include <errno.h>
28 #include <fcntl.h>
29 #include <math.h>
30 #include <netdb.h>
31 #include <pthread.h>
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <unistd.h>
35 #include <netinet/in.h>
36 #include <sys/ioctl.h>
37 #include <sys/mman.h>
38 #include <sys/socket.h>
39 #include <sys/stat.h>
40 #include <sys/types.h>
41 #include <sys/time.h>
42 #include <arpa/inet.h>
43 #include <sys/wait.h>
44 #include <strings.h>
45 
46 #endif
47 
48 #include <vrecko/IOPins.h>
49 #include <vrecko/Device.h>
50 #include <vrecko/EventDispatcher.h>
51 
52 #include <osg/Vec3>
53 #include <osg/Vec4>
54 #include <osg/Matrix>
55 #include <osg/Quat>
56 
57 
58 #define BUFSIZE 1000
59 
60 
61 namespace vreckoDP_base {
62 
63 
64 
65 class DP_EXPORT NestOfBirds : public vrecko::Device {
66  public:
67  NestOfBirds();
68  NestOfBirds(const char* _port_number);
69  ~NestOfBirds();
70 
71  virtual int openDevice(void);
72  int closeDevice(void);
73 
74  void update(void);
75 
76  bool loadXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *pParametersNode);
77  XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *saveXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *);
78 
79  int getRotate(float *p_rotate);
80  osg::Vec3 &getRotate(void);
81  osg::Vec3 &getRotateA(void);
82  osg::Matrix &getRotateM(void);
83  osg::Quat &getRotateQ(void);
84  int getTranslate(float *p_trans);
85  osg::Vec3 &getTranslate(void);
86 
87  void setInitialPosition(osg::Vec4 &_pos);
88  void setInitialRotation(osg::Vec4 &_rot);
89  void setInitialPosition(osg::Vec4 &_pos1, osg::Vec4 &_pos2);
90  void setInitialRotation(osg::Vec4 &_rot1, osg::Vec4 &_rot2);
91 
92  void setOriginPosition(float _nx, float _ny, float _nz) {_origin_pos.set(_nx, _ny, _nz);}
93  osg::Vec3 getOriginPosition(void) {return _origin_pos;}
94  void setTranslateMapping(float _nx, float _ny, float _nz) {_trans_mapp.set(_nx, _ny, _nz);}
95  osg::Vec3 getTranslateMapping(void) {return _trans_mapp;}
96 
97  protected:
98  std::string _hostname;
99  int scanDevice(void); // Vrati -1 pokud nastala chyba nebo momentalne zadna zprava neprisla
100  int _port; // �slo portu
101  char _buf[BUFSIZE]; // Pij�ac�buffer
102 #ifdef WIN32
103  WORD _wVersionRequested; // = MAKEWORD(1,1); // �slo verze
104  WSADATA _data; // Struktura s info. o knihovn� std::string _text; // Odes�an a pij�an text
105  hostent *_host; // Vzd�en po�ta�
106  sockaddr_in _serverSock; // Vzd�en "konec potrub�
107  sockaddr_in _other; // Odes�atel dat
108  SOCKET _mySocket; // Soket
109  int _addrlen; // D�ka adresy serveru
110  bool openSocket(void); //char *pcCommPort, HANDLE *temp_hCom);
111 
112 #else
113  int sockfd;
114  struct sockaddr_in sockname;
115  bool openSocket(void); //char *_port_name, int *temp_port_fd);
116 #endif
117  int length;
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 
127 
128  DECLARE_OUTPUT(Position_sensor_0, vrecko::MessageVec3);
129  DECLARE_OUTPUT(Orientation_sensor_0, vrecko::MessageQuat);
130  DECLARE_OUTPUT(Position_sensor_1, vrecko::MessageVec3);
131  DECLARE_OUTPUT(Orientation_sensor_1, vrecko::MessageQuat);
132  DECLARE_OUTPUT(Position_sensor_2, vrecko::MessageVec3);
133  DECLARE_OUTPUT(Orientation_sensor_2, vrecko::MessageQuat);
134  DECLARE_OUTPUT(Position_sensor_3, vrecko::MessageVec3);
135  DECLARE_OUTPUT(Orientation_sensor_3, vrecko::MessageQuat);
136 };
137 
138 }
139 
140 #endif