Пример #1
0
// -----[ _ipip_proto_dump_msg ]-------------------------------------
static void _ipip_proto_dump_msg(gds_stream_t * stream, net_msg_t * msg)
{
  net_msg_t * encap_msg= (net_msg_t *) msg->payload;
  stream_printf(stream, "msg:[");
  message_dump(stream, encap_msg);
  stream_printf(stream, "]");
}
Пример #2
0
 void file_system_no_more_free_event(u32 len)
 {
     assert(len == 0);
     #if ENABLE_GPS_ERROR_LOGGING
         u32 msg_len = debug::log_to_string(error_buffer, debug::error, "Filesystem had no more free blocks");
         message_dump(error_buffer, msg_len, log_protocol, raw_log_file.get_stream());
     #endif
 }
Пример #3
0
 void file_system_write_queue_full_event(u32 len)
 {
     assert(len == 0);
     #if ENABLE_GPS_ERROR_LOGGING
         u32 msg_len = debug::log_to_string(error_buffer, debug::error, "Filesystem write queue was full");
         message_dump(error_buffer, msg_len, log_protocol, raw_log_file.get_stream());
     #endif
 }
Пример #4
0
static int _debug_for_each(gds_stream_t * stream, void * context,
			   char format)
{
  va_list * ap= (va_list*) context;
  net_node_t * node;
  net_addr_t addr;
  net_msg_t * msg;
  net_iface_t * iface;
  int error;

  switch (format) {
  case 'a':
    addr= va_arg(*ap, net_addr_t);
    ip_address_dump(stream, addr);
    break;
  case 'e':
    error= va_arg(*ap, int);
    network_perror(stream, error);
    break;
  case 'i':
    iface= va_arg(*ap, net_iface_t *);
    net_iface_dump_id(stream, iface);
    break;
  case 'm':
    msg= va_arg(*ap, net_msg_t *);
    stream_printf(stream, "[");
    message_dump(stream, msg);
    stream_printf(stream, "]");
    break;
  case 'n':
    node= va_arg(*ap, net_node_t *);
    node_dump_id(stream, node);
    break;
  }
  return 0;
}
Пример #5
0
    void run()
    {
        CTL_EVENT_SET_t event_received;

        // request the battery level periodically
        msg::payload::enqueue_time_event batt_request;
        batt_request.message = msg::id::battery_level_request;
        batt_request.dest = msg::src::aux;
        batt_request.type = msg::payload::time_event_types::repeating;
        batt_request.next_time_ms = 0;
        batt_request.period = 10000;
        get_central().send_message(msg::src::time_queue, msg::id::enqueue_time_event, sizeof(batt_request), reinterpret_cast<u8*>(&batt_request));

        // request the board serial number ( == RF MAC address)
        get_central().send_message(msg::src::aux, msg::id::serial_number_request);

        // ensure the files are created before we get into the loop as those operations can take some time
      #if ENABLE_RAW_LOGGING
        raw_log_file.get_stream();
      #endif
      #if ENABLEEPHEMERIS_LOGGING
        eph_mgr.touch_files();
      #endif
      #if ENABLE_ROVER_PROCESSOR
        rover_pda_link.open();
      #endif

      #if ENABLE_GPS_UART_LOGGING
        gps_uart_logger.start_logging();
        s32 gnss_status = gnss_com_ctrl.init(&gps_uart_logger, &eph_mgr, uart_baud_rates::gps, gnss_dynamic_mode);
      #else
        s32 gnss_status = gnss_com_ctrl.init(&get_gps_uart_io(), &eph_mgr, uart_baud_rates::gps, gnss_dynamic_mode);
      #endif
        assert(0 == gnss_status);

      #if ENABLE_ROVER_PROCESSOR
        msg_handler::proxdet* prox_handlers[2];
        prox_handlers[0] = gps_ctrl.get_prox_handler();
        prox_handlers[1] = &prox_handler;
      #endif

        CTL_EVENT_SET_t listened_events = gps_receive_mask | gps_error_mask | messages_mask
      #if ENABLE_ROVER_PROCESSOR
                                        | rf_receive_mask  | rf_error_mask  | pda_mask_0 | pda_mask_1
      #endif
        ;

        bool done = false;
        while (!done)
        {
            if (get_central().system_shutdown_requested())
            {
                // this task can get really busy and has a high priority, which may hamper normal shutdown. detect shutdown and disable the event in order to let lower priority tasks run.
                listened_events = messages_mask;
            }

            // wait for input from the gnss uart (this is setup in the master init_modules function)
            event_received = ctl_events_wait(CTL_EVENT_WAIT_ANY_EVENTS_WITH_AUTO_CLEAR, &gnss_receive_event, listened_events, CTL_TIMEOUT_INFINITE, 0);

            done = observe_all_messages(event_received);

          #if ENABLE_ROVER_PROCESSOR
            if (event_received & (rf_receive_mask | gps_receive_mask))
            {
                s32 status = rf_ctrl.rx_rover(gps_ctrl.get_next_base_data(), prox_handlers, 2);
                while (status > 0)
                {
                    if (1 == status)
                    {
                        gps_ctrl.process_base_data();
        
                        #if ENABLE_RF_DATA_LOGGING
                            raw_base_dump(*gps_ctrl.get_current_base_data(), log_protocol, raw_log_file.get_stream());
                        #endif
                    }

                    status = rf_ctrl.rx_rover(gps_ctrl.get_next_base_data(), prox_handlers, 2);
                }
            }

            if (event_received & rf_error_mask)
            {
                #if ENABLE_GPS_ERROR_LOGGING
                    u8 err_code = get_rf_uart_io().get_last_error();
                    u32 len = debug::log_to_string(error_buffer, debug::error, "RF uart error 0x%X", err_code);
                    message_dump(error_buffer, len, log_protocol, raw_log_file.get_stream());
                #endif
            }
          #endif
            
            if (event_received & gps_receive_mask)
            {
                while (gnss_com_ctrl.gnssrx_getnav(gps_ctrl.get_next_gnss_navdata(), gps_ctrl.get_next_gnss_rawdata()))
                {
                    #if ENABLE_GPS_DATA_LOGGING
                        gnss_rawdata_dump(*gps_ctrl.get_next_gnss_rawdata(), log_protocol, raw_log_file.get_stream());
                        if (gps_ctrl.get_next_gnss_navdata()->datavalid)
                            gnss_navdata_dump(*gps_ctrl.get_next_gnss_navdata(), log_protocol, raw_log_file.get_stream());
                    #endif
                    #if ENABLE_GPS_ERROR_LOGGING
                        s32 gnss_error_code = gnss_com_ctrl.gnssrx_geterror();
                        if (gnss_error_code)
                        {
                            u32 len = debug::log_to_string(error_buffer, debug::error, "GNSS COM error 0x%X", gnss_error_code);
                            message_dump(error_buffer, len, log_protocol, raw_log_file.get_stream());
                        }
                    #endif

                    bool new_nav_data;
                  #if ENABLE_BASE_PROCESSOR
                    s32 status = gps_ctrl.process_gnss_data(&bd, &new_nav_data);
                  #endif
                  #if ENABLE_ROVER_PROCESSOR
                    s32 status = gps_ctrl.process_gnss_data(&new_nav_data);
                    rover_pda_link.set_rover_status(status);
                  #endif

                    if (new_nav_data)
                    {
                        get_rt_clock().set_real_time(gps_ctrl.get_current_gnss_navdata().utc,
                                                     gps_ctrl.get_current_gnss_navdata().tow);
                      #if ENABLE_BASE_PROCESSOR
                        rf_ctrl.tx_base(&bd, fresh_batt_level, status);
                      #endif
                    }

                  #if ENABLE_BASE_PROCESSOR && ENABLE_RF_DATA_LOGGING
                    raw_base_dump(bd, log_protocol, raw_log_file.get_stream());
                  #endif

                  #if ENABLE_ROVER_PROCESSOR
                    u32 flags = rover::pda_link::raw_data;
                    if (new_nav_data)
                        flags |= rover::pda_link::nav_data;
                    rover_pda_link.update(flags);
                  #endif
                
                  #if ENABLE_CONSOLE
                    update_debug_status();
                  #endif

                    if (get_central().system_shutdown_requested())
                    {
                        // this task can get really busy and has a high priority, which may hamper normal shutdown. detect shutdown and disable the event in order to let lower priority tasks run.
                        listened_events = messages_mask;
                        break;
                    }
                }
            }

            if (event_received & gps_error_mask)
            {
              #if ENABLE_GPS_ERROR_LOGGING
                u8 err_code = get_gps_uart_io().get_last_error();
                u32 len = debug::log_to_string(error_buffer, debug::error, "GPS uart error 0x%X", err_code);
                message_dump(error_buffer, len, log_protocol, raw_log_file.get_stream());
              #endif
            }

          #if ENABLE_ROVER_PROCESSOR
            if (event_received & (pda_mask_0 | pda_mask_1))
            {
                rover_pda_link.process_pda_requests();
                rover_pda_link.output_console();
            }
          #endif
        }

      #if ENABLE_EPHEMERIS_LOGGING
        eph_mgr.close_files(); // writes to a log file the new ephemeris data we have received
      #endif
      #if ENABLE_RAW_LOGGING
        raw_log_file.close();
      #endif
      #if ENABLE_ROVER_PROCESSOR
        rover_pda_link.close();
      #endif

        get_int_ctrl().disable_interrupt(lpc3230::interrupt::id::gps_time_pulse);
    }