Esempio n. 1
0
      void
      ping(const std::string& sys)
      {
        if (!hasTransducer())
          return;

        {
          MicroModemMap::iterator itr = m_ummap.find(sys);

          if (itr != m_ummap.end())
          {
            pingMicroModem(sys);
            return;
          }
        }

        {
          NarrowBandMap::iterator itr = m_nbmap.find(sys);

          if (itr != m_nbmap.end())
          {
            pingNarrowBand(sys);
            return;
          }
        }

        m_acop_out.op = IMC::AcousticOperation::AOP_UNSUPPORTED;
        m_acop_out.system = sys;
        dispatch(m_acop_out);
      }
Esempio n. 2
0
      void
      abort(const std::string& sys)
      {
        if (!hasTransducer())
          return;

        NarrowBandMap::iterator nitr = m_nbmap.find(sys);
        if (nitr != m_nbmap.end())
        {
          if (nitr->second.abort_freq == 0)
          {
            m_acop_out.op = IMC::AcousticOperation::AOP_UNSUPPORTED;
            dispatch(m_acop_out);
            return;
          }

          abortNarrowBand(sys, nitr->second.abort_freq);
        }

        MicroModemMap::iterator itr = m_ummap.find(sys);
        if (itr == m_ummap.end())
        {
          m_acop_out.op = IMC::AcousticOperation::AOP_UNSUPPORTED;
          dispatch(m_acop_out);
          return;
        }

        std::string cmd = String::str("$CCMUC,%u,%u,%04x\r\n", m_address, itr->second, c_code_abort);
        sendCommand(cmd);
        m_op = OP_ABORT;
        m_op_deadline = Clock::get() + m_args.tout_abort;
      }
Esempio n. 3
0
      void
      transmitMessage(const std::string& sys, const InlineMessage<IMC::Message>& imsg)
      {
        if (!hasTransducer())
          return;

        MicroModemMap::iterator itr = m_ummap.find(sys);
        if (itr == m_ummap.end())
          return;

        const IMC::Message* msg = NULL;
        std::string command;

        try
        {
          msg = imsg.get();
        }
        catch (...)
        {
          return;
        }

        if (msg->getId() == DUNE_IMC_PLANCONTROL)
        {
          const IMC::PlanControl* pc = static_cast<const IMC::PlanControl*>(msg);
          Memory::replace(m_pc, new IMC::PlanControl(*pc));

          if (pc->op == IMC::PlanControl::PC_START)
          {
            std::vector<char> pmsg(c_binary_size, 0);

            if (pc->plan_id.size() > c_binary_size - 1)
            {
              err(DTR("unable to send plan %s"), pc->plan_id.c_str());
              return;
            }

            // Make packet.
            pmsg[0] = (char)c_code_plan;
            std::memcpy(&pmsg[1], &pc->plan_id[0], std::min(c_binary_size - 1, (int)pc->plan_id.size()));

            std::string hex = String::toHex(pmsg);
            std::string cmd = String::str("$CCTXD,%u,%u,0,%s\r\n",
                                          m_address, itr->second, hex.c_str());
            sendCommand(cmd);

            std::string cyc = String::str("$CCCYC,0,%u,%u,0,0,1\r\n", m_address, itr->second);
            sendCommand(cyc);

          }
        }

        if (command.empty())
          return;

        sendCommand(command);
      }
Esempio n. 4
0
      void
      transmitMessage(const std::string& sys, const InlineMessage<IMC::Message>& imsg)
      {
        if (!hasTransducer())
          return;

        MicroModemMap::iterator itr = m_ummap.find(sys);
        if (itr == m_ummap.end())
          return;

        const IMC::Message* msg = NULL;
        std::string command;

        try
        {
          msg = imsg.get();
        }
        catch (...)
        {
          return;
        }

        if (msg->getId() == DUNE_IMC_PLANCONTROL)
        {
          const IMC::PlanControl* pc = static_cast<const IMC::PlanControl*>(msg);
          Memory::replace(m_pc, new IMC::PlanControl(*pc));

          if (pc->op == IMC::PlanControl::PC_START)
          {
            if (pc->plan_id.size() == 1)
              command = String::str("$CCMUC,%u,%u,%04x\r\n", c_plan_addr, itr->second, pc->plan_id[0] & 0xff);
          }
        }

        if (command.empty())
          return;

        sendCommand(command);
      }