-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathpsn_client.cpp
119 lines (95 loc) · 5.32 KB
/
psn_client.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
/**
* The MIT License (MIT)
*
* Copyright (c) 2014 VYV Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
**/
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#include <psn_lib.hpp>
#include <utils/udp_socket.h>
#include <iostream>
void main( void )
{
wsa_session session ;
//====================================================
// Init client
udp_socket socket_client ;
socket_client.bind( ::psn::DEFAULT_UDP_PORT ) ;
socket_client.join_multicast_group( ::psn::DEFAULT_UDP_MULTICAST_ADDR ) ;
::psn::psn_decoder psn_decoder ;
uint8_t last_frame_id = 0 ;
int skip_cout = 0 ;
//====================================================
// Main loop
while ( 1 )
{
Sleep( 1 ) ;
// Update Client
::std::string msg ;
if ( socket_client.receive_message( msg , ::psn::MAX_UDP_PACKET_SIZE ) )
{
psn_decoder.decode( msg.data() , msg.size() ) ;
if ( psn_decoder.get_data().header.frame_id != last_frame_id )
{
last_frame_id = psn_decoder.get_data().header.frame_id ;
const ::psn::tracker_map & recv_trackers = psn_decoder.get_data().trackers ;
if ( skip_cout++ % 20 == 0 )
{
::std::cout << "--------------------PSN CLIENT-----------------" << ::std::endl ;
::std::cout << "System Name: " << psn_decoder.get_info().system_name << ::std::endl ;
::std::cout << "Frame Id: " << (int)last_frame_id << ::std::endl ;
::std::cout << "Frame Timestamp: " << psn_decoder.get_data().header.timestamp_usec << ::std::endl ;
::std::cout << "Tracker count: " << recv_trackers.size() << ::std::endl ;
for ( auto it = recv_trackers.begin() ; it != recv_trackers.end() ; ++it )
{
const ::psn::tracker & tracker = it->second ;
::std::cout << "Tracker - id: " << tracker.get_id() << " | name: " << tracker.get_name() << ::std::endl ;
if ( tracker.is_pos_set() )
::std::cout << " pos: " << tracker.get_pos().x << ", " <<
tracker.get_pos().y << ", " <<
tracker.get_pos().z << std::endl ;
if ( tracker.is_speed_set() )
::std::cout << " speed: " << tracker.get_speed().x << ", " <<
tracker.get_speed().y << ", " <<
tracker.get_speed().z << std::endl ;
if ( tracker.is_ori_set() )
::std::cout << " ori: " << tracker.get_ori().x << ", " <<
tracker.get_ori().y << ", " <<
tracker.get_ori().z << std::endl ;
if ( tracker.is_status_set() )
::std::cout << " status: " << tracker.get_status() << std::endl ;
if ( tracker.is_accel_set() )
::std::cout << " accel: " << tracker.get_accel().x << ", " <<
tracker.get_accel().y << ", " <<
tracker.get_accel().z << std::endl ;
if ( tracker.is_target_pos_set() )
::std::cout << " target pos: " << tracker.get_target_pos().x << ", " <<
tracker.get_target_pos().y << ", " <<
tracker.get_target_pos().z << std::endl ;
if ( tracker.is_timestamp_set() )
::std::cout << " timestamp: " << tracker.get_timestamp() << std::endl ;
}
::std::cout << "-----------------------------------------------" << ::std::endl ;
}
}
}
}
}