[Positioning] Fix InputMedium::…_to_calibration_request()

Fix InputMedium::current_request_to_calibration_request(), that was
resulting in a blank request.
This commit is contained in:
Matteo Cypriani 2011-04-26 16:42:35 +02:00
parent c9d26033e9
commit ea8da6d8ec
4 changed files with 25 additions and 18 deletions

View File

@ -132,14 +132,11 @@ const Request& InputCSV::get_next_request()
if (type == OWL_REQUEST_CALIBRATION ||
type == OWL_REQUEST_AUTOCALIBRATION)
{
current_request_to_calibration_request(type) ;
CalibrationRequest *request =
static_cast<CalibrationRequest*>(current_request) ;
request->set_direction(direction) ;
ReferencePoint position(pos) ;
const ReferencePoint &reference_point =
Stock::find_create_reference_point(position) ;
request->set_reference_point(&reference_point) ;
current_request_to_calibration_request(&reference_point,
direction, type) ;
}
return *current_request ;

View File

@ -24,18 +24,27 @@ InputMedium::~InputMedium()
void InputMedium::
current_request_to_calibration_request(uint_fast8_t request_type)
current_request_to_calibration_request(
const ReferencePoint *const reference_point,
const Direction &direction,
const uint_fast8_t request_type)
{
if (dynamic_cast<CalibrationRequest*>(current_request) != NULL)
CalibrationRequest *calibration_request =
dynamic_cast<CalibrationRequest*>(current_request) ;
if (calibration_request != NULL)
{
current_request->set_type(request_type) ;
calibration_request->set_reference_point(reference_point) ;
calibration_request->set_direction(direction) ;
calibration_request->set_type(request_type) ;
return ;
}
Request *tmp = current_request ;
current_request = NULL ;
current_request = new CalibrationRequest(*tmp) ;
current_request->set_type(request_type) ;
current_request =
new CalibrationRequest(*tmp,
const_cast<ReferencePoint*>(reference_point),
direction, request_type) ;
delete tmp ;
}

View File

@ -1,6 +1,9 @@
#ifndef _OWLPS_POSITIONING_INPUTMEDIUM_HH_
#define _OWLPS_POSITIONING_INPUTMEDIUM_HH_
class ReferencePoint ;
class Direction ;
#include "request.hh"
/// Super class of all input media
@ -51,7 +54,9 @@ public:
/// Converts #current_request into a CalibrationRequest
void current_request_to_calibration_request(
uint_fast8_t request_type = OWL_REQUEST_CALIBRATION) ;
const ReferencePoint *const reference_point,
const Direction &direction,
uint_fast8_t request_type) ;
/// Clears (reallocates to Request if needed) #current_request
void clear_current_request(void) ;

View File

@ -144,18 +144,14 @@ const Request& InputUDPSocket::get_next_request()
if (request.type == OWL_REQUEST_CALIBRATION ||
request.type == OWL_REQUEST_AUTOCALIBRATION)
{
current_request_to_calibration_request(request.type) ;
CalibrationRequest *calib_request =
static_cast<CalibrationRequest*>(current_request) ;
calib_request->set_direction(Direction(request.direction)) ;
ReferencePoint position(owl_ntohf(request.x_position),
owl_ntohf(request.y_position),
owl_ntohf(request.z_position)) ;
const ReferencePoint &reference_point =
Stock::find_create_reference_point(position) ;
calib_request->set_reference_point(&reference_point) ;
current_request_to_calibration_request(&reference_point,
Direction(request.direction),
request.type) ;
}
return *current_request ;