87
84
ifs_->subscribe("FRONTSEAT_BHVOFF", &FrontSeatLegacyTranslator::handle_mail_frontseat_bhvoff, this);
88
85
ifs_->subscribe("FRONTSEAT_SILENT", &FrontSeatLegacyTranslator::handle_mail_frontseat_silent, this);
89
86
ifs_->subscribe("BACKSEAT_ABORT", &FrontSeatLegacyTranslator::handle_mail_backseat_abort, this);
90
ifs_->subscribe("PENDING_SURFACE", &FrontSeatLegacyTranslator::handle_mail_gps_request, this);
92
goby::acomms::connect(&ifs_->frontseat_->signal_command_response,
93
this, &FrontSeatLegacyTranslator::handle_gps_command_response);
144
137
if(status.global_fix().has_altitude())
145
138
ifs_->publish("NAV_ALTITUDE", status.global_fix().altitude());
140
// surface for GPS variable
141
if(status.global_fix().lat_source() == goby::moos::protobuf::GPS &&
142
status.global_fix().lon_source() == goby::moos::protobuf::GPS)
144
std::stringstream ss;
145
ss << "Timestamp=" << std::setprecision(15) << status.time();
146
ifs_->publish("GPS_UPDATE_RECEIVED", ss.str());
296
297
ifs_->publish("BACKSEAT_READY", 0);
299
void FrontSeatLegacyTranslator::handle_mail_gps_request(const CMOOSMsg& msg)
301
double pending_surface = msg.GetDouble();
303
// pending surface crossing from positive to negative triggers the GPS request
304
if(pending_surface < 0 && last_pending_surface_ >= 0 && !gps_in_progress_)
307
gpb::CommandRequest command;
308
command.set_response_requested(true);
309
gps_request_id_ = LEGACY_REQUEST_IDENTIFIER + request_id_++;
310
command.set_request_id(gps_request_id_);
311
gpb::BluefinExtraCommands* bluefin_command = command.MutableExtension(gpb::bluefin_command);
312
bluefin_command->set_command(gpb::BluefinExtraCommands::GPS_REQUEST);
313
publish_command(command);
315
gps_in_progress_ = true;
317
// if pending surface resets to positive, and we're still getting GPS, cancel it
318
else if(pending_surface >= 0 && gps_in_progress_)
320
glog.is(DEBUG1) && glog << warn << "Canceling GPS update ... no acknowledgement within max time at surface." << std::endl;
322
gpb::CommandRequest command;
323
command.set_cancel_request_id(gps_request_id_);
325
publish_command(command);
327
gps_in_progress_ = false;
329
last_pending_surface_ = pending_surface;
332
void FrontSeatLegacyTranslator::handle_gps_command_response(const goby::moos::protobuf::CommandResponse& response)
334
if(gps_in_progress_ && response.request_id() == gps_request_id_)
336
std::stringstream ss;
337
ss << "Timestamp=" << std::setprecision(15) << goby::common::goby_time<double>();
338
ifs_->publish("GPS_UPDATE_RECEIVED", ss.str());
339
gps_in_progress_ = false;
343
300
void FrontSeatLegacyTranslator::handle_mail_buoyancy_control(const CMOOSMsg& msg)