MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/communication/hiperface/HipPosition.cpp
2024-06-07 11:12:56 +03:00

65 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* HipPosition.cpp
*
* Created on: 20 февр. 2020 г.
* Author: user
*/
#include "HipPosition.hh"
//float communication::hiperface::HipPositionClient::get() const {
//
// if( not request) position_request.message_control.ans_ready_flag = false, request = hip_driver.send( &position_request.message_control );
// else {
// if( position_request.message_control.ans_ready_flag ) {
// request = position_request.message_control.ans_ready_flag = false;
//
// reinterpret_cast<unsigned char*>( &position_code )[0] = (position_request.rec_data[2] << 8) | position_request.rec_data[3];
// reinterpret_cast<unsigned char*>( &position_code )[1] = (position_request.rec_data[0] << 8) | position_request.rec_data[1];
//
// return position_code * _1_to_rad;
// }
// }
//
// return NAN;
//
//}
communication::hiperface::HipPositionClient::HipPositionClient(
driver::HiperfaceNetworkDriver & hip_driver, unsigned short address )
: hip_driver(hip_driver) {
position_request.message_control.address = address;
set_position_request.message_control.address = address;
}
void communication::hiperface::HipPositionClient::set( unsigned long position ) {
set_position_request.send_data[0] = reinterpret_cast<unsigned char*>( &position )[1] >> 8;
set_position_request.send_data[1] = reinterpret_cast<unsigned char*>( &position )[1];
set_position_request.send_data[2] = reinterpret_cast<unsigned char*>( &position )[0] >> 8;
set_position_request.send_data[3] = reinterpret_cast<unsigned char*>( &position )[0];
if( not set_request) set_position_request.message_control.ans_ready_flag = false, set_request = hip_driver.send( &set_position_request.message_control );
else {
if( set_position_request.message_control.ans_ready_flag ) {
set_request = position_request.message_control.ans_ready_flag = false;
//новая позиция установлена успешно!
} else /*произошла ошибка*/;
}
}
unsigned long communication::hiperface::HipPositionClient::getPositionCode() const {
unsigned long position_code;
reinterpret_cast<unsigned char*>( &position_code )[0] = (position_request.rec_data[2] << 8) | position_request.rec_data[3];
reinterpret_cast<unsigned char*>( &position_code )[1] = (position_request.rec_data[0] << 8) | position_request.rec_data[1];
return position_code;
}