5 PTUFree::PTUFree():ptu_io_service(), timer_io_service(), ptu_port(ptu_io_service) {
13 printf(
"Setting baud rate\n");
14 boost::system::error_code set_option_error_code;
15 ptu_port.set_option(boost::asio::serial_port_base::baud_rate(baud), set_option_error_code);
16 if(set_option_error_code.value() != boost::system::errc::success) {
18 printf(
"Setting baud to %d failed with error message: %s\n", baud, error_reason.c_str());
29 printf(
"Setting new Connection\n");
31 printf(
"Closing current Serial Port Connection\n");
35 boost::system::error_code open_error_code;
36 ptu_port.open(port, open_error_code);
37 if(open_error_code.value() != boost::system::errc::success) {
39 printf(
"Opening port %s failed with error message: %s", port.c_str(), error_reason.c_str());
45 tcflush(
ptu_port.lowest_layer().native_handle(), TCIOFLUSH);
47 ptu_port.set_option(boost::asio::serial_port_base::baud_rate(9600));
48 ptu_port.set_option(boost::asio::serial_port_base::character_size(8));
49 ptu_port.set_option(boost::asio::serial_port_base::stop_bits(boost::asio::serial_port_base::stop_bits::one));
50 ptu_port.set_option(boost::asio::serial_port_base::parity(boost::asio::serial_port_base::parity::none));
51 ptu_port.set_option(boost::asio::serial_port_base::flow_control(boost::asio::serial_port_base::flow_control::none));
72 boost::asio::write(
ptu_port, boost::asio::buffer(request.c_str(), request.size()));
80 std::string recieved_message;
83 boost::asio::read(
ptu_port, boost::asio::buffer(¤t_letter,1));
84 if(current_letter ==
'\n') {
87 size_t start_pos = recieved_message.find(
'*');
88 if(start_pos != std::string::npos) {
89 recieved_message = recieved_message.substr(start_pos);
91 return recieved_message;
94 recieved_message.push_back(current_letter);
100 std::vector<std::string> result;
101 result.push_back(response.substr(0, 1));
102 if(response.at(0) ==
'*') {
103 result.push_back(response.substr(1, response.length() - 1));
104 int start_position = 10000;
105 int end_position = 0;
106 size_t first_found_position = 0;
107 size_t last_found_position = 0;
108 for (
int i = 0; i < 10; i++) {
109 first_found_position = response.find(boost::lexical_cast<std::string>(i));
110 if(first_found_position != std::string::npos) {
111 if((
int) first_found_position < start_position) {
112 start_position = first_found_position;
115 last_found_position = response.rfind(boost::lexical_cast<std::string>(i));
116 if( last_found_position != std::string::npos) {
117 if((
int) last_found_position > end_position) {
118 end_position = last_found_position;
122 if(start_position <= end_position) {
123 if(response.at(start_position - 1) ==
'-') {
126 result.push_back(response.substr(start_position, end_position - start_position + 1));
132 result.push_back(response.substr(1, response.length() - 1));
140 std::string
command =
"pp" + boost::lexical_cast<std::string>(position) +
" ";
143 if(response_parts[0].at(0) ==
'*') {
147 printf(
"Error while setting desired absolute pan position to %d: %s\n", position, response_parts[1].c_str());
153 std::string
command =
"po" + boost::lexical_cast<std::string>(position_offset) +
" ";
156 if(response_parts[0].at(0) ==
'*') {
160 printf(
"Error while adding desired pan position offset of %d: %s\n", position_offset, response_parts[1].c_str());
166 std::string
command =
"ps" + boost::lexical_cast<std::string>(speed) +
" ";
169 if(response_parts[0].at(0) ==
'*') {
173 printf(
"Error while setting desired absolute pan speed to %d: %s\n", speed, response_parts[1].c_str());
181 std::string
command =
"pd" + boost::lexical_cast<std::string>(speed_offset) +
" ";
184 if(response_parts[0].at(0) ==
'*') {
188 printf(
"Error while setting desired pan speed offset to %d: %s\n", speed_offset, response_parts[1].c_str());
194 std::string
command =
"pa" + boost::lexical_cast<std::string>(acceleration) +
" ";
197 if(response_parts[0].at(0) ==
'*') {
201 printf(
"Error while setting absolute pan acceleration to %d: %s\n", acceleration, response_parts[1].c_str());
209 std::string
command =
"pu" + boost::lexical_cast<std::string>(upper_speed_limit) +
" ";
212 if(response_parts[0].at(0) ==
'*') {
216 printf(
"Error while setting absolute pan base speed to %d: %s\n", upper_speed_limit, response_parts[1].c_str());
225 std::string
command =
"pl" + boost::lexical_cast<std::string>(lower_speed_limit) +
" ";
228 if(response_parts[0].at(0) ==
'*') {
232 printf(
"Error while setting absolute lower speed limit to %d: %s\n", lower_speed_limit, response_parts[1].c_str());
238 std::string
command =
"pb" + boost::lexical_cast<std::string>(base_speed) +
" ";
241 if(response_parts[0].at(0) ==
'*') {
245 printf(
"Error while setting pan base speed to %d: %s\n", base_speed, response_parts[1].c_str());
256 if(response_parts[0].at(0) ==
'*') {
257 return boost::lexical_cast<
long>(response_parts[2]);
260 printf(
"Error while getting current pan position: %s\n", response_parts[1].c_str());
269 if(response_parts[0].at(0) ==
'*') {
270 return boost::lexical_cast<
long>(response_parts[2]);
273 printf(
"Error while getting current pan speed: %s\n", response_parts[1].c_str());
285 if(response_parts[0].at(0) ==
'*') {
286 return boost::lexical_cast<
long>(response_parts[2]);
289 printf(
"Error while getting current pan upper speed limit: %s\n", response_parts[1].c_str());
298 if(response_parts[0].at(0) ==
'*') {
299 return boost::lexical_cast<
long>(response_parts[2]);
302 printf(
"Error while getting curent pan lower speed limit: %s\n", response_parts[1].c_str());
311 if(response_parts[0].at(0) ==
'*') {
312 return boost::lexical_cast<
double>(response_parts[2]);
315 printf(
"Error while getting pan resolution: %s\n", response_parts[1].c_str());
324 if(response_parts[0].at(0) ==
'*') {
325 return boost::lexical_cast<
long>(response_parts[2]);
328 printf(
"Error while getting desired pan position: %s\n", response_parts[1].c_str());
337 if(response_parts[0].at(0) ==
'*') {
338 return boost::lexical_cast<
long>(response_parts[2]);
341 printf(
"Error while getting desired pan speed: %s\n", response_parts[1].c_str());
350 if(response_parts[0].at(0) ==
'*') {
351 return boost::lexical_cast<
long>(response_parts[2]);
354 printf(
"Error while getting desired pan acceleration (desired == current in this case): %s\n", response_parts[1].c_str());
363 if(response_parts[0].at(0) ==
'*') {
364 return boost::lexical_cast<
long>(response_parts[2]);
367 printf(
"Error while getting desired pan base speed: %s\n", response_parts[1].c_str());
376 std::string
command =
"tp" + boost::lexical_cast<std::string>(position) +
" ";
379 if(response_parts[0].at(0) ==
'*') {
383 printf(
"Error while setting desired absolute tilt position to %d: %s\n", position, response_parts[1].c_str());
389 std::string
command =
"to" + boost::lexical_cast<std::string>(position_offset) +
" ";
392 if(response_parts[0].at(0) ==
'*') {
396 printf(
"Error while adding desired tilt position offset of %d: %s\n", position_offset, response_parts[1].c_str());
402 std::string
command =
"ts" + boost::lexical_cast<std::string>(speed) +
" ";
405 if(response_parts[0].at(0) ==
'*') {
409 printf(
"Error while setting desired absolute tilt speed to %d: %s\n", speed, response_parts[1].c_str());
417 std::string
command =
"td" + boost::lexical_cast<std::string>(speed_offset) +
" ";
420 if(response_parts[0].at(0) ==
'*') {
424 printf(
"Error while setting desired tilt speed offset to %d: %s\n", speed_offset, response_parts[1].c_str());
430 std::string
command =
"ta" + boost::lexical_cast<std::string>(acceleration) +
" ";
433 if(response_parts[0].at(0) ==
'*') {
437 printf(
"Error while setting absolute tilt acceleration to %d: %s\n", acceleration, response_parts[1].c_str());
445 std::string
command =
"tu" + boost::lexical_cast<std::string>(upper_speed_limit) +
" ";
448 if(response_parts[0].at(0) ==
'*') {
452 printf(
"Error while setting desired tilt base speed to %d: %s\n", upper_speed_limit, response_parts[1].c_str());
461 std::string
command =
"tl" + boost::lexical_cast<std::string>(lower_speed_limit) +
" ";
464 if(response_parts[0].at(0) ==
'*') {
468 printf(
"Error while setting desired tilt lower speed limit to %d: %s\n", lower_speed_limit, response_parts[1].c_str());
474 std::string
command =
"tb" + boost::lexical_cast<std::string>(base_speed) +
" ";
477 if(response_parts[0].at(0) ==
'*') {
481 printf(
"Error while setting tilt base speed to %d: %s\n", base_speed, response_parts[1].c_str());
492 if(response_parts[0].at(0) ==
'*') {
493 return boost::lexical_cast<
long>(response_parts[2]);
496 printf(
"Error while getting current tilt position: %s\n", response_parts[1].c_str());
505 if(response_parts[0].at(0) ==
'*') {
506 return boost::lexical_cast<
long>(response_parts[2]);
509 printf(
"Error while getting current tilt speed: %s\n", response_parts[1].c_str());
521 if(response_parts[0].at(0) ==
'*') {
522 return boost::lexical_cast<
long>(response_parts[2]);
525 printf(
"Error while getting current tilt upper speed limit: %s\n", response_parts[1].c_str());
534 if(response_parts[0].at(0) ==
'*') {
535 return boost::lexical_cast<
long>(response_parts[2]);
538 printf(
"Error while getting curent tilt lower speed limit: %s\n", response_parts[1].c_str());
547 if(response_parts[0].at(0) ==
'*') {
548 return boost::lexical_cast<
double>(response_parts[2]);
551 printf(
"Error while getting tilt resolution: %s\n", response_parts[1].c_str());
560 if(response_parts[0].at(0) ==
'*') {
561 return boost::lexical_cast<
long>(response_parts[2]);
564 printf(
"Error while getting desired tilt position: %s\n", response_parts[1].c_str());
573 if(response_parts[0].at(0) ==
'*') {
574 return boost::lexical_cast<
long>(response_parts[2]);
577 printf(
"Error while getting desired tilt speed: %s\n", response_parts[1].c_str());
586 if(response_parts[0].at(0) ==
'*') {
587 return boost::lexical_cast<
long>(response_parts[2]);
590 printf(
"Error while getting desired tilt acceleration (desired == current in this case): %s\n", response_parts[1].c_str());
599 if(response_parts[0].at(0) ==
'*') {
600 return boost::lexical_cast<
long>(response_parts[2]);
603 printf(
"Error while getting desired tilt base speed: %s\n", response_parts[1].c_str());
622 printf(
"Error while setting limit enforcement mode: Unknown mode\n");
627 if(response_parts[0].at(0) ==
'*') {
631 printf(
"Error while setting limit enforcement: %s\n", response_parts[1].c_str());
637 std::string
command =
"pn" + boost::lexical_cast<std::string>(position) +
" ";
640 if(response_parts[0].at(0) ==
'*') {
644 printf(
"Error while setting minimum user pan position limit to %d: %s\n", position, response_parts[1].c_str());
649 std::string
command =
"px" + boost::lexical_cast<std::string>(position) +
" ";
652 if(response_parts[0].at(0) ==
'*') {
656 printf(
"Error while setting maximum user pan position limit to %d: %s\n", position, response_parts[1].c_str());
661 std::string
command =
"tn" + boost::lexical_cast<std::string>(position) +
" ";
664 if(response_parts[0].at(0) ==
'*') {
668 printf(
"Error while setting minimum user tilt position limit to %d: %s\n", position, response_parts[1].c_str());
673 std::string
command =
"tx" + boost::lexical_cast<std::string>(position) +
" ";
676 if(response_parts[0].at(0) ==
'*') {
680 printf(
"Error while setting maximum user tilt position limit to %d: %s\n", position, response_parts[1].c_str());
690 if(response_parts[0].at(0) ==
'*') {
691 return boost::lexical_cast<
long>(response_parts[2]);
694 printf(
"Error while getting minimum user pan position limit: %s\n", response_parts[1].c_str());
704 if(response_parts[0].at(0) ==
'*') {
705 return boost::lexical_cast<
long>(response_parts[2]);
708 printf(
"Error while getting maximum user pan position limit: %s\n", response_parts[1].c_str());
718 if(response_parts[0].at(0) ==
'*') {
719 return boost::lexical_cast<
long>(response_parts[2]);
722 printf(
"Error while getting minimum user tilt position limit: %s\n", response_parts[1].c_str());
732 if(response_parts[0].at(0) ==
'*') {
733 return boost::lexical_cast<
long>(response_parts[2]);
736 printf(
"Error while getting maximum user tilt position limit: %s\n", response_parts[1].c_str());
757 if(response_parts[0].at(0) ==
'*') {
758 return boost::lexical_cast<
long>(response_parts[2]);
761 printf(
"Error while getting currently used minimum pan position limit: %s\n", response_parts[1].c_str());
769 if(response_parts[0].at(0) ==
'*') {
770 return boost::lexical_cast<
long>(response_parts[2]);
773 printf(
"Error while getting currently used maximum pan position limit: %s\n", response_parts[1].c_str());
781 if(response_parts[0].at(0) ==
'*') {
782 return boost::lexical_cast<
long>(response_parts[2]);
785 printf(
"Error while getting currently used minimum tilt position limit: %s\n", response_parts[1].c_str());
793 if(response_parts[0].at(0) ==
'*') {
794 return boost::lexical_cast<
long>(response_parts[2]);
797 printf(
"Error while getting currently used maximum tilt position limit: %s\n", response_parts[1].c_str());
808 if(response.at(0) ==
'*') {
809 if(response_parts[1].find(
"DISABLED") != std::string::npos) {
812 else if (response_parts[1].find(
"user") != std::string::npos) {
820 printf(
"Error while getting currently used limit enforcement mode, %s\n", response_parts[1].c_str());
837 printf(
"Error while setting position execution mode: Unknown mode\n");
842 if(response_parts[0].at(0) ==
'*') {
847 printf(
"Error while setting position execution mode: %s\n", response_parts[1].c_str());
863 if(response_parts[0].at(0) ==
'*') {
867 printf(
"Error while awaiting command completion: %s\n", response_parts[1].c_str());
884 printf(
"Error while halting axis: Unknown mode\n");
889 if(response_parts[0].at(0) ==
'*') {
893 printf(
"Error while halting axis: %s\n", response_parts[1].c_str());
953 if((0 > preset_index) || (preset_index > 32)) {
956 std::string
command =
"xs" + boost::lexical_cast<std::string>(preset_index) +
" ";
959 if(response_parts[0].at(0) ==
'*') {
963 printf(
"Error while setting position preset: %s\n", response_parts[1].c_str());
970 std::string
command =
"xg" + boost::lexical_cast<std::string>(preset_index) +
" ";
973 if(response_parts[0].at(0) ==
'*') {
977 printf(
"Error while going to position preset: %s\n", response_parts[1].c_str());
987 if(response_parts[0].at(0) ==
'*') {
991 printf(
"Error while clearing position presets: %s\n", response_parts[1].c_str());
1005 printf(
"Error while setting speed control mode: Unknown command\n");
1010 if(response_parts[0].at(0) ==
'*') {
1014 printf(
"Error while setting speed control mode: %s\n", response_parts[1].c_str());
1024 if(response_parts[0].at(0) ==
'*') {
1025 if(response_parts[1].find(
"independent") != std::string::npos) {
1033 printf(
"Error while getting speed control mode: %s\n", response_parts[1].c_str());
1041 printf(
"RESET MESSAGE: %s\n", response.c_str());
1043 if(response_parts[0].at(0) ==
'*') {
1047 printf(
"Error while resetting the ptu unit: %s\n", response_parts[1].c_str());
1067 printf(
"Error while setting reset mode: Unknown command\n");
1072 if(response_parts[0].at(0) ==
'*') {
1076 printf(
"Error while setting reset mode: %s\n", response_parts[1].c_str());
1085 if(response_parts[0].at(0) ==
'*') {
1089 printf(
"Error while saving current axis settings as default: %s\n", response_parts[1].c_str());
1098 if(response_parts[0].at(0) ==
'*') {
1102 printf(
"Error while restoring default axis settings: %s\n", response_parts[1].c_str());
1111 if(response_parts[0].at(0) ==
'*') {
1115 printf(
"Error while restoring factory default axis settings: %s\n", response_parts[1].c_str());
1132 printf(
"Error while setting pan stationary power mode: Unknown command\n");
1137 if(response_parts[0].at(0) ==
'*') {
1141 printf(
"Error while setting pan stationary power mode: %s\n", response_parts[1].c_str());
1158 printf(
"Error while setting pan stationary power mode: Unknown command\n");
1163 if(response_parts[0].at(0) ==
'*') {
1167 printf(
"Error while setting pan stationary power mode: %s\n", response_parts[1].c_str());
1176 if(response_parts[0].at(0) ==
'*') {
1177 if(response_parts[1].find(
"REGULAR") != std::string::npos) {
1180 if(response_parts[1].find(
"LOW") != std::string::npos) {
1188 printf(
"Error while getting pan stationary power mode: %s\n", response_parts[1].c_str());
1196 if(response_parts[0].at(0) ==
'*') {
1197 if(response_parts[1].find(
"REGULAR") != std::string::npos) {
1200 if(response_parts[1].find(
"LOW") != std::string::npos) {
1208 printf(
"Error while getting tilt stationary power mode: %s\n", response_parts[1].c_str());
1225 printf(
"Error while setting pan in-motion power mode: Unknown command\n");
1230 if(response_parts[0].at(0) ==
'*') {
1234 printf(
"Error while setting pan in-motion power mode: %s\n", response_parts[1].c_str());
1250 printf(
"Error while setting tilt in-motion power mode: Unknown command\n");
1255 if(response_parts[0].at(0) ==
'*') {
1259 printf(
"Error while setting tilt in-motion power mode: %s\n", response_parts[1].c_str());
1268 if(response_parts[0].at(0) ==
'*') {
1269 if(response_parts[1].find(
"REGULAR") != std::string::npos) {
1272 if(response_parts[1].find(
"LOW") != std::string::npos) {
1280 printf(
"Error while getting pan in-motion power mode: %s\n", response_parts[1].c_str());
1288 if(response_parts[0].at(0) ==
'*') {
1289 if(response_parts[1].find(
"REGULAR") != std::string::npos) {
1292 if(response_parts[1].find(
"LOW") != std::string::npos) {
1300 printf(
"Error while getting tilt in-motion power mode: %s\n", response_parts[1].c_str());
1306 switch (error.value()) {
1307 case boost::system::errc::success: {
1311 case boost::system::errc::address_family_not_supported: {
1312 return "address_family_not_supported | EAFNOSUPPORT";
1315 case boost::system::errc::address_in_use: {
1316 return "address_in_use | EADDRINUSE";
1319 case boost::system::errc::address_not_available: {
1320 return "address_not_available | EADDRNOTAVAIL";
1323 case boost::system::errc::already_connected: {
1324 return "already_connected | EISCONN";
1327 case boost::system::errc::argument_list_too_long: {
1328 return "argument_list_too_long | E2BIG";
1331 case boost::system::errc::argument_out_of_domain: {
1332 return "argument_out_of_domain | EDOM";
1335 case boost::system::errc::bad_address: {
1336 return "bad_address | EFAULT";
1339 case boost::system::errc::bad_file_descriptor: {
1340 return "bad_file_descriptor | EBADF";
1343 case boost::system::errc::bad_message: {
1344 return "bad_message | EBADMSG";
1347 case boost::system::errc::broken_pipe: {
1348 return "broken_pipe | EPIPE";
1351 case boost::system::errc::connection_aborted: {
1352 return "connection_aborted | ECONNABORTED";
1355 case boost::system::errc::connection_already_in_progress: {
1356 return "connection_already_in_progress | EALREADY";
1359 case boost::system::errc::connection_refused: {
1360 return "connection_refused | ECONNREFUSED";
1363 case boost::system::errc::connection_reset: {
1364 return "connection_reset | ECONNRESET";
1367 case boost::system::errc::cross_device_link: {
1368 return "cross_device_link | EXDEV";
1371 case boost::system::errc::destination_address_required: {
1372 return "destination_address_required | EDESTADDRREQ";
1375 case boost::system::errc::device_or_resource_busy: {
1376 return "device_or_resource_busy | EBUSY";
1379 case boost::system::errc::directory_not_empty: {
1380 return "directory_not_empty | ENOTEMPTY";
1383 case boost::system::errc::executable_format_error: {
1384 return "executable_format_error | ENOEXEC";
1387 case boost::system::errc::file_exists: {
1388 return "file_exists | EEXIST";
1391 case boost::system::errc::file_too_large: {
1392 return "file_too_large | EFBIG";
1395 case boost::system::errc::filename_too_long: {
1396 return "filename_too_long | ENAMETOOLONG";
1399 case boost::system::errc::function_not_supported: {
1400 return "function_not_supported | ENOSYS";
1403 case boost::system::errc::host_unreachable: {
1404 return "host_unreachable | EHOSTUNREACH";
1407 case boost::system::errc::identifier_removed: {
1408 return "identifier_removed | EIDRM";
1411 case boost::system::errc::illegal_byte_sequence: {
1412 return "illegal_byte_sequence | EILSEQ";
1415 case boost::system::errc::inappropriate_io_control_operation: {
1416 return "inappropriate_io_control_operation | ENOTTY";
1419 case boost::system::errc::interrupted: {
1420 return "interrupted | EINTR";
1423 case boost::system::errc::invalid_argument: {
1424 return "invalid_argument | EINVAL";
1427 case boost::system::errc::invalid_seek: {
1428 return "invalid_seek | ESPIPE";
1431 case boost::system::errc::io_error: {
1432 return "io_error | EIO";
1435 case boost::system::errc::is_a_directory: {
1436 return "is_a_directory | EISDIR";
1439 case boost::system::errc::message_size: {
1440 return "message_size | EMSGSIZE";
1443 case boost::system::errc::network_down: {
1444 return "network_down | ENETDOWN";
1447 case boost::system::errc::network_reset: {
1448 return "network_reset | ENETRESET";
1451 case boost::system::errc::network_unreachable: {
1452 return "network_unreachable | ENETUNREACH";
1455 case boost::system::errc::no_buffer_space: {
1456 return "no_buffer_space | ENOBUFS";
1459 case boost::system::errc::no_child_process: {
1460 return "no_child_process | ECHILD";
1463 case boost::system::errc::no_link: {
1464 return "no_link | ENOLINK";
1467 case boost::system::errc::no_lock_available: {
1468 return "no_lock_available | ENOLCK";
1471 case boost::system::errc::no_message_available: {
1472 return "no_message_available | ENODATA";
1475 case boost::system::errc::no_message: {
1476 return "no_message | ENOMSG";
1479 case boost::system::errc::no_protocol_option: {
1480 return "no_protocol_option | ENOPROTOOPT";
1483 case boost::system::errc::no_space_on_device: {
1484 return "no_space_on_device | ENOSPC";
1487 case boost::system::errc::no_stream_resources: {
1488 return "no_stream_resources | ENOSR";
1491 case boost::system::errc::no_such_device_or_address: {
1492 return "no_such_device_or_address | ENXIO";
1495 case boost::system::errc::no_such_device: {
1496 return "no_such_device | ENODEV";
1499 case boost::system::errc::no_such_file_or_directory: {
1500 return "no_such_file_or_directory | ENOENT";
1503 case boost::system::errc::no_such_process: {
1504 return "no_such_process | ESRCH";
1507 case boost::system::errc::not_a_directory: {
1508 return "not_a_directory | ENOTDIR";
1511 case boost::system::errc::not_a_socket: {
1512 return "not_a_socket | ENOTSOCK";
1515 case boost::system::errc::not_a_stream: {
1516 return "not_a_stream | ENOSTR";
1519 case boost::system::errc::not_connected: {
1520 return "not_connected | ENOTCONN";
1523 case boost::system::errc::not_enough_memory: {
1524 return "not_enough_memory | ENOMEM";
1527 case boost::system::errc::not_supported: {
1528 return "not_supported | ENOTSUP";
1531 case boost::system::errc::operation_canceled: {
1532 return "operation_canceled | ECANCELED";
1535 case boost::system::errc::operation_in_progress: {
1536 return "operation_in_progress | EINPROGRESS";
1539 case boost::system::errc::operation_not_permitted: {
1540 return "operation_not_permitted | EPERM";
1553 case boost::system::errc::owner_dead: {
1554 return "owner_dead | EOWNERDEAD";
1557 case boost::system::errc::permission_denied: {
1558 return "permission_denied | EACCES";
1561 case boost::system::errc::protocol_error: {
1562 return "protocol_error | EPROTO";
1565 case boost::system::errc::protocol_not_supported: {
1566 return "protocol_not_supported | EPROTONOSUPPORT";
1569 case boost::system::errc::read_only_file_system: {
1570 return "read_only_file_system | EROFS";
1573 case boost::system::errc::resource_deadlock_would_occur: {
1574 return "resource_deadlock_would_occur | EDEADLK";
1577 case boost::system::errc::resource_unavailable_try_again: {
1578 return "resource_unavailable_try_again | EAGAIN";
1581 case boost::system::errc::result_out_of_range: {
1582 return "result_out_of_range | ERANGE";
1585 case boost::system::errc::state_not_recoverable: {
1586 return "state_not_recoverable | ENOTRECOVERABLE";
1589 case boost::system::errc::stream_timeout: {
1590 return "stream_timeout | ETIME";
1593 case boost::system::errc::text_file_busy: {
1594 return "text_file_busy | ETXTBSY";
1597 case boost::system::errc::timed_out: {
1598 return "timed_out | ETIMEDOUT";
1601 case boost::system::errc::too_many_files_open_in_system: {
1602 return "too_many_files_open_in_system | ENFILE";
1605 case boost::system::errc::too_many_files_open: {
1606 return "too_many_files_open | EMFILE";
1609 case boost::system::errc::too_many_links: {
1610 return "too_many_links | EMLINK";
1618 case boost::system::errc::value_too_large: {
1619 return "value_too_large | EOVERFLOW";
1622 case boost::system::errc::wrong_protocol_type: {
1623 return "wrong_protocol_type | EPROTOTYPE";
1627 return "unknown error";
1637 printf(
"Error getting initial pan position. Expected 0, got %ld\n", pan_pos);
1642 printf(
"Error while setting pan position to 300");
1647 if(desired_pan_position != 300) {
1648 printf(
"Error while setting or getting (desired) pan position. Expected 300, desired %ld", desired_pan_position);
1653 if((pan_pos < 0) || (pan_pos >= 300)) {
1654 printf(
"Error getting pan position while ptu is moving position. Expected value between 0 and 300, got %ld\n", pan_pos);
1655 if(pan_pos == 300) {
1656 printf(
"Pan Position was 300 but it should not be at the moment. This can also happen due to to slow serial port or sceduling, testing will be continued therefore.");
1664 if((pan_pos < 0) || (pan_pos >= 300)) {
1665 printf(
"Error getting pan position while ptu is moving position. Expected value between 0 and 300, got %ld\n", pan_pos);
1666 if(pan_pos == 300) {
1667 printf(
"Pan Position was 300 but it should not be at the moment. This can also happen due to to slow serial port or sceduling, testing will be continued therefore.");
1675 printf(
"Execution of await command failed");
1680 if((pan_pos != 300)) {
1681 printf(
"Setting pan position, getting pan position or await command failed. Expected pan position 300, but got %ld\n", pan_pos);
1687 printf(
"Error getting initial tilt position. Expected 0, got %ld\n", tilt_pos);
1692 printf(
"Error while setting tilt position to -350");
1697 if(desired_tilt_position != -350) {
1698 printf(
"Error while setting or getting (desired) tilt position. Expected -350, desired %ld", desired_tilt_position);
1704 if((tilt_pos > 0) || (tilt_pos <= -350)) {
1705 printf(
"Error getting tilt position while ptu is moving position. Expected value between 0 and -350, got %ld\n", tilt_pos);
1706 if(pan_pos == -350) {
1707 printf(
"Tilt Position was -350 but it should not be at the moment. This can also happen due to to slow serial port or sceduling, testing will be continued therefore.");
1715 if((tilt_pos > 0) || (tilt_pos <= -350)) {
1716 printf(
"Error getting tilt position while ptu is moving position. Expected value between 0 and -350, got %ld\n", tilt_pos);
1717 if(tilt_pos == -350) {
1718 printf(
"Tilt Position was -350 but it should not be at the moment. This can also happen due to to slow serial port or sceduling, testing will be continued therefore.");
1726 printf(
"Execution of await command failed");
1731 if((tilt_pos != -350)) {
1732 printf(
"Setting tilt position, getting tilt position or await command failed. Expected tilt position -350, but got %ld\n", tilt_pos);
1737 printf(
"Setting pan position realtiv failed.");
1742 printf(
"Execution of await command failed");
1747 if(pan_pos != 400) {
1748 printf(
"After setting relative pan position, position == 400 was expected, but position was %ld\n", pan_pos);
1753 printf(
"Setting pan position realtiv failed.");
1758 printf(
"Execution of await command failed");
1763 if(tilt_pos != -250) {
1764 printf(
"After setting relative pan position, position == -250 was expected, but position was %ld\n", tilt_pos);
1769 printf(
"SUCCESS: Setting pan and tilt testing successfull\n");
1774 printf(
"Setting position limit enforcement to factory limits enabled failed\n");
1782 printf(
"setPositionLimitEnforcementMode or the corresponding get method failed. FACOTRY_LIMITS_ENABLED was expected, USER_DEFINED_LIMITS_ENABLE was retrieved\n");
1785 printf(
"setPositionLimitEnforcementMode or the corresponding get method failed. FACOTRY_LIMITS_ENABLED was expected, LIMITS_DISABLED was retrieved\n");
1787 else if(limit_enforcement_mode ==
ERROR) {
1788 printf(
"getPositionLimitEnforcementMode failed with ERROR\n");
1791 printf(
"get_posiion_limit_enforcement_mode returned unexpected value after setting FACTORY_LIMITS_ENABLED\n");
1803 if(pan_upper_limit ==
ERROR) {
1804 printf(
"Function getCurrentUsedMaximumPanPositionLimit returned ERROR when used in FACTORY_LIMITS_ENABLES position enforcement mode\n");
1807 if(pan_lower_limit ==
ERROR) {
1808 printf(
"Function getCurrentUsedMinimumPanPositionLimit returned ERROR when used in FACTORY_LIMITS_ENABLES position enforcement mode\n");
1811 if(tilt_upper_limit ==
ERROR) {
1812 printf(
"Function getCurrentUsedMaximumTiltPositionLimit returned ERROR when used in FACTORY_LIMITS_ENABLES position enforcement mode\n");
1815 if(tilt_lower_limit ==
ERROR) {
1816 printf(
"Function getCurrentUsedMinimumTiltPositionLimit returned ERROR when used in FACTORY_LIMITS_ENABLES position enforcement mode\n");
1821 printf(
"FACTORY_LIMITS_ENABLED mode or any of the get functions did not work properly. Trying to move pan unit over the upper limit did not result in error\n");
1825 printf(
"FACTORY_LIMITS_ENABLED mode or any of the get functions did not work properly. Trying to move pan unit over the lower limit did not result in error\n");
1829 printf(
"FACTORY_LIMITS_ENABLED mode or any of the get functions did not work properly. Trying to move tilt unit over the upper limit did not result in error\n");
1833 printf(
"FACTORY_LIMITS_ENABLED mode or any of the get functions did not work properly. Trying to move tilt unit over the lower limit did not result in error\n");
1915 printf(
"Setting position limit enforcement mode to LIMITS_DISABLED failed");
1922 printf(
"Getting position limit enforcement mode failed. Expected: LIMITS_DISABLED, Got: %ld\n", limit_enforcement_mode);
1927 printf(
"Setting position out of limits with LIMITS_DISABLED failed\n");
1937 printf(
"Testing Limit Enforcement succeeded\n");
1946 if(cur_pan_speed != 0) {
1947 printf(
"Error while getting current pan speed. 0 expected but got %ld\n", cur_pan_speed);
1950 if(cur_tilt_speed != 0) {
1951 printf(
"Error while getting current tilt speed. 0 expected but got %ld\n", cur_tilt_speed);
1957 if(des_pan_speed <= 0) {
1958 printf(
"Error while getting desired pan speed. Value >= 0 expected but got %ld\n", des_pan_speed);
1961 if(des_tilt_speed <= 0) {
1962 printf(
"Error while getting desired tilt speed. Value >= 0 expected but got %ld\n", des_tilt_speed);
1967 printf(
"Error while setting desired pan speed absolute\n");
1972 if(mod_desired_pan_speed != (des_pan_speed - 1)) {
1973 printf(
"Error while getting or setting desired pan speed (absolute set). Expected %ld - 1, but got %ld\n", des_pan_speed, mod_desired_pan_speed);
1978 printf(
"Error while setting desired tilt speed absolute\n");
1983 if(mod_desired_tilt_speed != (des_tilt_speed - 2)) {
1984 printf(
"Error while getting or setting desired tilt speed (absolute set). Expected %ld - 2, but got %ld\n", des_tilt_speed, mod_desired_tilt_speed);
1991 printf(
"Error while setting desired pan speed realtive\n");
1996 if(mod_desired_pan_speed != (des_pan_speed - 2)) {
1997 printf(
"Error while getting or setting desired pan speed (realtive set). Expected %ld - 2, but got %ld\n", des_pan_speed, mod_desired_pan_speed);
2002 printf(
"Error while setting desired tilt speed relative\n");
2007 if(mod_desired_tilt_speed != (des_tilt_speed - 4)) {
2008 printf(
"Error while getting or setting desired tilt speed (relative set). Expected %ld - 4, but got %ld\n", des_tilt_speed, mod_desired_tilt_speed);
2017 if(upper_limit_pan ==
ERROR) {
2018 printf(
"Error while getting upper speed limit pan.\n");
2021 if(lower_limit_pan ==
ERROR) {
2022 printf(
"Error while getting lower speed limit pan.\n");
2025 if(upper_limit_tilt ==
ERROR) {
2026 printf(
"Error while getting upper speed limit tilt.\n");
2029 if(lower_limit_tilt ==
ERROR) {
2030 printf(
"Error while getting lower speed limit tilt.\n");
2035 printf(
"Error while setting upper speed limit pan\n");
2039 printf(
"Error while setting lower speed limit pan\n");
2043 printf(
"Error while setting upper speed limit tilt\n");
2047 printf(
"Error while setting lower speed limit tilt\n");
2064 if(mod_lower_limit_pan != (57)) {
2065 printf(
"Error while getting or setting lower speed limit pan. Expected 57, but got %ld\n", mod_lower_limit_pan);
2074 if(mod_lower_limit_tilt != (58)) {
2075 printf(
"Error while getting or setting lower speed limit tilt. Expected 58, but got %ld\n", mod_lower_limit_tilt);
2081 if(pan_base_speed <= 0) {
2082 printf(
"Error while getting pan_base_speed\n");
2085 if(tilt_base_speed <= 0) {
2086 printf(
"Error while getting tilt_base_speed\n");
2090 printf(
"Error while setting pan_base_speed\n");
2094 printf(
"Error while setting tilt_base_speed\n");
2099 if((pan_base_speed - 1) != mod_pan_base_speed) {
2100 printf(
"Error while getting pan_base_speed. Expected %ld - 1, got %ld\n", pan_base_speed, mod_pan_base_speed);
2103 if((tilt_base_speed - 1) != mod_tilt_base_speed) {
2104 printf(
"Error while getting tilt_base_speed. Expected %ld - 1, got %ld\n", tilt_base_speed, mod_tilt_base_speed);
2110 if(pan_accel <= 0) {
2111 printf(
"Error while getting pan acceleration\n");
2114 if(tilt_accel <= 0) {
2115 printf(
"Error while getting tilt acceleration\n");
2119 printf(
"Setting desired pan acceleration absolute failed\n");
2123 printf(
"Setting desired pan acceleration absolute failed\n");
2128 if((pan_accel - 1) != mod_pan_accel) {
2129 printf(
"Error while getting pan acceleration. Expected %ld - 1, got %ld\n", pan_accel, mod_pan_accel);
2132 if((tilt_accel - 1) != mod_tilt_accel) {
2133 printf(
"Error while getting tilt acceleration. Expected %ld - 1, got %ld\n", tilt_accel, mod_tilt_accel);
2137 printf(
"Speed testing successfull\n");
2142 if(pan_res <= 0.0) {
2143 printf(
"Error while getting pan resolution");
2146 if(tilt_res <= 0.0) {
2147 printf(
"Error while getting tilt resolution");
2151 printf(
"Resolution testing successfull with Pan Resolution %f und Tilt Resolution %f\n", pan_res, tilt_res);
2155 printf(
"Error while setting position execution mode to SLAVED_POSITION_EXECUTION_MODE\n");
2160 printf(
"Error while getting or setting position execution mode. SLAVED_POSITION_EXECUTION_MODE expected, got %ld\n", pos_ex_mode);
2164 printf(
"Error while setting position execution mode to IMMEDIATE_POSITION_EXECUTION_MODE\n");
2169 printf(
"Error while getting or setting position execution mode. IMMEDIATE_POSITION_EXECUTION_MODE expected, got %ld\n", pos_ex_mode);
2176 printf(
"Error while executing halt command with HALT_BOTH\n");
2180 printf(
"Error while executing halt command with HALT_PAN_ONLY\n");
2184 printf(
"Error while executing halt command with HALT_TILT_ONLY\n");
2189 printf(
"Problem while setting preset with current location\n");
2195 if(cur_pan_pos != 300 || cur_tilt_pos != 300) {
2196 printf(
"Synchronous setting of pan and tilt axis in setDesiredPanTiltPositionAbsoluteSlaved did not work properly, false position was set\n");
2246 printf(
"Error while setting speed control mode to PURE_VELOCITY_CONTROL_MODE\n");
2251 printf(
"Error while getting or setting speed controle mode. Expected PURE_VELOCITY_CONTROL_MODE, got %ld\n", cur_speed_control_mode);
2256 printf(
"Error while setting speed control mode to INDEPENDENT_SPEED_MODE\n");
2261 printf(
"Error while getting or setting speed controle mode. Expected INDEPENDENT_SPEED_MODE, got %ld\n", cur_speed_control_mode);
2276 printf(
"Error while setting pan stationary power mode to REGULAR_HOLD_POWER_MODE\n");
2280 printf(
"Error while setting tilt stationary power mode to REGULAR_HOLD_POWER_MODE\n");
2286 printf(
"Error while getting or setting pan stationary power mode. Expected: REGULAR_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2290 printf(
"Error while getting or setting tilt stationary power mode. Expected: REGULAR_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2295 printf(
"Error while setting pan stationary power mode to LOW_HOLD_POWER_MODE\n");
2299 printf(
"Error while setting tilt stationary power mode to LOW_HOLD_POWER_MODE\n");
2305 printf(
"Error while getting or setting pan stationary power mode. Expected: LOW_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2309 printf(
"Error while getting or setting tilt stationary power mode. Expected: LOW_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2314 printf(
"Error while setting pan stationary power mode to OFF_HOLD_POWER_MODE\n");
2318 printf(
"Error while setting tilt stationary power mode to OFF_HOLD_POWER_MODE\n");
2324 printf(
"Error while getting or setting pan stationary power mode. Expected: OFF_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2328 printf(
"Error while getting or setting tilt stationary power mode. Expected: OFF_HOLD_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2338 printf(
"Error while setting pan in_motion power mode to REGULAR_MOVE_POWER_MODE\n");
2342 printf(
"Error while setting tilt in_motion power mode to REGULAR_MOVE_POWER_MODE\n");
2348 printf(
"Error while getting or setting pan in_motion power mode. Expected: REGULAR_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2352 printf(
"Error while getting or setting tilt in_motion power mode. Expected: REGULAR_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2357 printf(
"Error while setting pan in_motion power mode to LOW_MOVE_POWER_MODE\n");
2361 printf(
"Error while setting tilt in_motion power mode to LOW_MOVE_POWER_MODE\n");
2367 printf(
"Error while getting or setting pan in_motion power mode. Expected: LOW_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2371 printf(
"Error while getting or setting tilt in_motion power mode. Expected: LOW_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2376 printf(
"Error while setting pan in_motion power mode to HIGH_MOVE_POWER_MODE\n");
2380 printf(
"Error while setting tilt in_motion power mode to HIGH_MOVE_POWER_MODE\n");
2386 printf(
"Error while getting or setting pan in_motion power mode. Expected: HIGH_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2390 printf(
"Error while getting or setting tilt in_motion power mode. Expected: HIGH_MOVE_POWER_MODE, got %ld\n", cur_pan_stat_power_mode);
2398 printf(
"Testing successfull\n");
long getFactoryMaximumPanPositionLimit()
getFactoryMaximumPanPositionLimit Method to get the factory defined maximum pan position.
void test()
test Method to test the methods of this program, for DEBUG/DEVELOPMENT purpose, changes PTU settings ...
long getCurrentPanSpeed()
getCurrentPanSpeed Method that queries the current pan speed
bool setDesiredTiltUpperSpeedLimit(short int upper_speed_limit)
setDesiredTiltUpperSpeedLimit Method that sets the upper speed limit for tilt (position/second). WARNING: Takes extremly long or does not work on every ptu
bool setDesiredPanSpeedAbsolute(short int speed)
setDesiredPanSpeedAbsolute Method that sets absolute pan speed (position/second)
bool setDesiredTiltPositionRelative(short int position_offset)
setDesiredTiltPositionRelative Method that sets current tilt position by offset (current pos + offset...
long getUserMinimumTiltPositionLimit()
getUserMinimumTiltPositionLimit Method to get the user defined minimum tilt position. WARNING: Does not work on older PTUs and is not tested.
#define IMMEDIATE_POSITION_EXECUTION_MODE
long getCurrentUsedMaximumTiltPositionLimit()
getCurrentUsedMaximumTiltPositionLimit Method to get the currently used maximum tilt position...
long getSpeedControlMode()
getSpeedControlMode Method to get the currently used sped control mode of the ptu.
long getDesiredTiltSpeed()
getDesiredTiltSpeed Method that queries the desired tilt speed
bool setResetMode(long mode)
setResetMode Method to set the reset mode of the ptu. Saved to EEPROM, do not use too often...
double getTiltResolution()
getTiltResolution Method that queries the tilt resolution (seconds/arc per position). Divide by 3600 to get Degree.
bool setDesiredTiltPositionAbsolute(short int position)
setDesiredTiltPositionAbsolute Method that sets absolute tilt position
#define OFF_HOLD_POWER_MODE
bool setDesiredPanLowerSpeedLimit(short int lower_speed_limit)
setDesiredPanLowerSpeedLimit Method that sets the lower speed limit for pan (position/second). WARNING: Takes extremly long or does not work on every ptu
long getCurrentUsedMinimumPanPositionLimit()
getCurrentUsedMinimumPanPositionLimit Method to get the currently used minimum pan position...
std::string readPTUResponse()
readPTUResponse Method that reads from the PTU until delimitor (' ') appears. Then the read data is r...
long getFactoryMaximumTiltPositionLimit()
getFactoryMaximumTiltPositionLimit Method to get the factory defined maximum tilt position...
long getTiltAcceleartion()
getTiltAcceleartion Method that queries the tilt acceleration (no current or desired here) ...
long getPanInMotionPowerMode()
getPanInMotionPowerMode Method to get the move power mode for pan axis.
void closeSerialConnection()
closeSerialConnection Closes currently used serial port
#define SLAVED_POSITION_EXECUTION_MODE
#define HIGH_MOVE_POWER_MODE
bool isOpen()
isOpen Method to determine if used port is open or closed.
#define USER_DEFINED_LIMITS_ENABLED
long getCurrentTiltSpeed()
getCurrentTiltSpeed Method that queries the current tilt speed
bool setTiltBaseSpeed(short int base_speed)
setTiltBaseSpeed Method that sets the base speed for tilt (position/second)
long getTiltUpperSpeedLimit()
getTiltUpperSpeedLimit Method that queries the tilt upper speed limit WARNING: This Method consumes e...
long getUserMaximumTiltPositionLimit()
getUserMaximumTiltPositionLimit Method to get the user defined maximum tilt position. WARNING: Does not work on older PTUs and is not tested.
#define INDEPENDENT_SPEED_MODE
std::string getErrorString(boost::system::error_code error)
long getCurrentUsedMinimumTiltPositionLimit()
getCurrentUsedMinimumTiltPositionLimit Method to get the currently used minimum tilt position...
long getDesiredPanSpeed()
getDesiredPanSpeed Method that queries the desired pan speed
long getUserMaximumPanPositionLimit()
getUserMaximumPanPositionLimit Method to get the user defined maximum pan position. WARNING: Does not work on older PTUs and is not tested.
bool setDesiredPanUpperSpeedLimit(short int upper_speed_limit)
setDesiredPanUpperSpeedLimit Method that sets the upper speed limit for pan (position/second). WARNING: Takes extremly long or does not work on every ptu
#define FACTORY_LIMITS_ENABLED
bool setNewSerialConnection(std::string port, int baud)
setNewSerialConnection Establishes a new connection via serial port specified by 'port' to a target d...
bool setPanStationaryPowerMode(long mode)
setPanStationaryPowerMode Method to set the stationary power mode for pan axis.
PTUFree()
PTUFree Constructor for PTUFree object. Not connected to any port.
long getTiltStationaryPowerMode()
getTiltStationaryPowerMode Method to get the stationary power mode for tilt axis. ...
bool setDesiredPanAccelerationAbsolute(short int acceleration)
setDesiredPanAccelerationAbsolute Method that sets the absolute pan acceleration (position/second^2) ...
long getFactoryMinimumTiltPositionLimit()
getFactoryMinimumTiltPositionLimit Method to get the factory defined minimum tilt position...
long getPositionLimitEnforcementMode()
getPositionLimitEnforcementMode Method to get the currently used position limit enforcement mode...
bool setMaximumPanPositionLimit(short int position)
setMaximumPanPositionLimit Method that is used to set a user defined maximum pan position limit...
std::vector< std::string > evaluateResponse(std::string response)
evaluateResponse Method that preprocesses the answer of the PTU. Splits the PTU to a maximum of 3 par...
std::string communicate(std::string request)
communicate Method to send a command 'request' to the serial port (and the device) and recieve the an...
bool clearPreset()
clearPreset Method to delete all existing presets. WARNING: Does not work on older PTUs and is not te...
bool setDesiredTiltSpeedRelative(short int speed_offset)
setDesiredTiltSpeedRelative Method that sets the desired tilt speed relative to the CURRENT (not the ...
bool setDesiredTiltAccelerationAbsolute(short int acceleration)
setDesiredTiltAccelerationAbsolute Method that sets the absolute tilt acceleration (position/second^2...
bool setPreset(int preset_index, short int pan, short int tilt)
setPreset Method that allows to associate a pan and tilt position with a preset index. Moves to the pan and tilt position and saves the position as a preset. WARNING: Does not work on older PTUs and is not tested.
bool setDesiredPanPositionRelative(short int position_offset)
setDesiredPanPositionRelative Method that sets current pan position by offset (current pos + offset =...
bool setPanBaseSpeed(short int base_speed)
setPanBaseSpeed Method that sets the base speed for pan (position/second)
bool setPositionExecutionMode(long mode)
setPositionExecutionMode Method to set the position execution mode.
long getTiltInMotionPowerMode()
getTiltInMotionPowerMode Method to get the move power mode for tilt axis.
ROSLIB_DECL std::string command(const std::string &cmd)
long getPanLowerSpeedLimit()
getPanLowerSpeedLimit Method that queries the pan lower speed limit. WARNING: This Method consumes ei...
bool setSpeedControlMode(long mode)
setSpeedControlMode Method to set the sped control mode of the ptu.
long getPanAcceleartion()
getPanAcceleartion Method that queries the pan acceleration (no current or desired here) ...
bool setMinimumPanPositionLimit(short int position)
setMinimumPanPositionLimit Method that is used to set a user defined minimum pan position limit...
bool gotoPreset(int preset_index)
gotoPreset Method that moves the ptu to a existing preset of pan and tilt corrdiantes. WARNING: Does not work on older PTUs and is not tested.
long getPanUpperSpeedLimit()
getPanUpperSpeedLimit Method that queries the pan upper speed limit WARNING: This Method consumes eit...
long position_execution_mode
long getTiltBaseSpeed()
getTiltBaseSpeed Returns the current tilt base speed
long getDesiredPanPosition()
getDesiredPanPosition Method that queries the desired pan position
boost::asio::io_service timer_io_service
long getCurrentPanPosition()
getCurrentPanPosition Method that queries the current pan position
bool setDesiredPanSpeedRelative(short int speed_offset)
setDesiredPanSpeedRelative Method that sets the desired pan speed relative to the CURRENT (not the de...
bool halt(long axis)
halt Method that halts movement on specified axis.
bool restoreFactoryDefault()
restoreFactoryDefault Method to set default settings to factory defaults. Saved to EEPROM...
double getPanResolution()
getPanResolution Method that queries the pan resolution (seconds/arc per position). Divide by 3600 to get Degree.
long getPanBaseSpeed()
getPanBaseSpeed Returns the current pan base speed
bool awaitPositionCommandCompletion()
awaitPositionCommandCompletion Method to wait for the completion of the last issued pan and tilt posi...
#define PAN_ONLY_RESET_MODE
#define LOW_HOLD_POWER_MODE
bool restoreDefault()
restoreDefault Method to restore default settings. WARNING: Not tested.
long getPanStationaryPowerMode()
getPanStationaryPowerMode Method to get the stationary power mode for pan axis.
long getTiltLowerSpeedLimit()
getTiltLowerSpeedLimit Method that queries the tilt lower speed limit. WARNING: This Method consumes ...
#define REGULAR_HOLD_POWER_MODE
bool setDesiredPanTiltPositionAbsoluteSlaved(short int pan, short int tilt)
setDesiredPanTiltPositionAbsoluteSlaved Method that allows a movement of pan and tilt axis to specifi...
long getFactoryMinimumPanPositionLimit()
getFactoryMinimumPanPositionLimit Method to get the factory defined minimum pan position.
#define LOW_MOVE_POWER_MODE
bool setBaudRate(int baud)
setBaudRate Sets the baud rate for the serial port that is used. Only use of serial connection is est...
long getCurrentUsedMaximumPanPositionLimit()
getCurrentUsedMaximumPanPositionLimit Method to get the currently used maximum pan position...
bool setMinimumTiltPositionLimit(short int position)
setMinimumTiltPositionLimit Method that is used to set a user defined minimum tilt position limit...
bool setPositionLimitEnforcementMode(long enable)
setPositionLimitEnforcementMode Method to set the position limit enforcement mode. Warning: USER_DEFINED_LIMITS_ENABLED does not work on older PTUs and setting of this value is not tested.
bool setDesiredPanPositionAbsolute(short int position)
setDesiredPanPositionAbsolute Method that sets absolute pan position
bool saveDefault()
saveDefault Method to save the current axis settings as default at power up. Note: This class sets th...
#define REGULAR_MOVE_POWER_MODE
#define PURE_VELOCITY_CONTROL_MODE
bool setDesiredTiltLowerSpeedLimit(short int lower_speed_limit)
setDesiredTiltLowerSpeedLimit Method that sets the lower speed limit for tilt (position/second). WARNING: Takes extremly long or does not work on every ptu
boost::asio::serial_port ptu_port
bool setTiltStationaryPowerMode(long mode)
setTiltStationaryPowerMode Method to set the stationary power mode for tilt axis. ...
bool setMaximumTiltPositionLimit(short int position)
setMaximumTiltPositionLimit Method that is used to set a user defined maximum tilt position limit...
bool setTiltInMotionPowerMode(long mode)
setTiltInMotionPowerMode Method to set the move power mode for tilt axis.
#define TILT_ONLY_RESET_MODE
bool reset()
reset Method to reset the ptu (pan and/or tilt axis depending on reset mode)
long getCurrentTiltPosition()
getCurrentTiltPosition Method that queries the current tilt position
long getUserMinimumPanPositionLimit()
getUserMinimumPanPositionLimit Method to get the user defined minimum pan position. WARNING: Does not work on older PTUs and is not tested.
bool setDesiredTiltSpeedAbsolute(short int speed)
setDesiredTiltSpeedAbsolute Method that sets absolute tilt speed (position/second) ...
bool setPanInMotionPowerMode(long mode)
setPanInMotionPowerMode Method to set the move power mode for pan axis.
long getDesiredTiltPosition()
getDesiredTiltPosition Method that queries the desired tilt position
long getPositionExecutionMode()
getPositionExecutionMode Method to get the currently used position execution mode. Can return IMMEDIATE_POSITION_EXECUTION_MODE or SLAVED_POSITION_EXECUTION_MODE.