Exemplo n.º 1
0
void esc32_periodic(void) {
  if (esc32_priv.initialized == false) {
    uart_put_byte(esc32_priv.dev, 0, '\r');
    // enter binary mode
    uint8_t data[] = "binary\r";
    int i = 0;
    while (i < (int) sizeof(data)) {
      uart_put_byte(esc32_priv.dev, 0, data[i]);
      i++;
    }
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_RATE, 0.0, 0.0, 1);
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_VALUE, 0.0, BINARY_VALUE_AMPS, 2);
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_VALUE, 1.0, BINARY_VALUE_VOLTS_BAT, 2);
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_VALUE, 2.0, BINARY_VALUE_RPM, 2);
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_VALUE, 3.0, BINARY_VALUE_VOLTS_MOTOR, 2);
    esc32_send_command(&esc32_priv, BINARY_COMMAND_TELEM_RATE, ESC32_TELEMETRY_RATE, 0.0, 1);

    esc32_priv.initialized = true;
  }
  else {
#if ESC32_DEBUG
    if (!debug_start) {
      // motor spining for debug
      esc32_send_command(&esc32_priv, BINARY_COMMAND_ARM, 0.0, 0.0, 0);
      esc32_send_command(&esc32_priv, BINARY_COMMAND_STOP, 0.0, 0.0, 0);
      esc32_send_command(&esc32_priv, BINARY_COMMAND_START, 0.0, 0.0, 0);
      esc32_send_command(&esc32_priv, BINARY_COMMAND_DUTY, 8.0, 0.0, 1);
      debug_start = 1;
    }
#endif
  }

}
Exemplo n.º 2
0
void drop_ball(uint8_t number) {
  for(uint8_t i = 0; i < DROP_STRINGLEN; i++)
    uart_put_byte(&UART_DROP_PORT, 0, drop_string[i]);

  uint8_t last = '>';
  if(number == 1) {
    last = '1';
  } else if(number == 2) {
    last = '2';
  } else if(number == 3) {
    last = '3';
  } else if(number == 4) {
    last = '4';
  }
  uart_put_byte(&UART_DROP_PORT, 0, last);
}
Exemplo n.º 3
0
Arquivo: uart.c Projeto: Ashatta/tools
void
uart_put_str(U32 u, const U8 *str)
{
  while (*str) {
    while (!uart_put_byte(u, *str)) {
    }
    str++;
  }
}
Exemplo n.º 4
0
static void esc32_send(struct esc32_private *esc) {
  int i;
  for (i = 0; i < esc->out_idx; i++) {
    uart_put_byte(esc->dev, 0, esc->buf_out[i]);
  }
}
Exemplo n.º 5
0
/**
 * @brief sdlogger_spi_direct_periodic
 * Periodic function called at module frequency
 */
void sdlogger_spi_direct_periodic(void)
{
  sdcard_spi_periodic(&sdcard1);

#if SDLOGGER_ON_ARM
  if(autopilot_motors_on) {
    sdlogger_spi.do_log = 1;
  } else {
    sdlogger_spi.do_log = 0;
  }
#endif

  switch (sdlogger_spi.status) {
    case SDLogger_Initializing:
      if (sdcard1.status == SDCard_Idle) {
        sdcard_spi_read_block(&sdcard1, 0x00002000, &sdlogger_spi_direct_index_received);
        sdlogger_spi.status = SDLogger_RetreivingIndex;
      }
      break;

    case SDLogger_Ready:
      if ((sdlogger_spi.do_log == 1) &&
          sdcard1.status == SDCard_Idle) {
        LOGGER_LED_ON;
        sdcard_spi_multiwrite_start(&sdcard1, sdlogger_spi.next_available_address);
        sdlogger_spi.status = SDLogger_Logging;
      }
      break;

    case SDLogger_Logging:
      /* This line is NOT unit-tested because it is an inline function */
      #if PERIODIC_TELEMETRY
      periodic_telemetry_send_Logger(DefaultPeriodic,
                                     &pprzlog_tp.trans_tx,
                                     &sdlogger_spi.device);
      #endif
      /* Check if SD Card buffer is full and SD Card is ready for new data */
      if (sdlogger_spi.sdcard_buf_idx > 512 &&
          sdcard1.status == SDCard_MultiWriteIdle) {
        sdcard_spi_multiwrite_next(&sdcard1, &sdlogger_spi_direct_multiwrite_written);
      }
      /* Check if switch is flipped to stop logging */
      if (sdlogger_spi.do_log == 0) {
        sdlogger_spi.status = SDLogger_LoggingFinalBlock;
      }
      break;

    case SDLogger_LoggingFinalBlock:
      if (sdcard1.status == SDCard_MultiWriteIdle) {
        if (sdlogger_spi.sdcard_buf_idx > 512) {
          sdcard_spi_multiwrite_next(&sdcard1, &sdlogger_spi_direct_multiwrite_written);
        }
        else if (sdlogger_spi.sdcard_buf_idx > 1) {
          /* Fill with trailing zero's */
          for (uint16_t i = sdlogger_spi.sdcard_buf_idx; i < (SD_BLOCK_SIZE+1); i++) {
            sdcard1.output_buf[i] = 0x00;
          }
          sdcard_spi_multiwrite_next(&sdcard1, &sdlogger_spi_direct_multiwrite_written);
        }
        else if (sdlogger_spi.sdcard_buf_idx == 1) {
          sdcard_spi_multiwrite_stop(&sdcard1);
          sdlogger_spi.status = SDLogger_StoppedLogging;
        }
      }
      break;

    case SDLogger_StoppedLogging:
      if (sdcard1.status == SDCard_Idle) {
        sdcard_spi_read_block(&sdcard1, 0x00002000, &sdlogger_spi_direct_index_received);
        sdlogger_spi.status = SDLogger_GettingIndexForUpdate;
      }
      break;

    case SDLogger_UpdatingIndex:
      if (sdcard1.status == SDCard_Idle) {
        LOGGER_LED_OFF;
        sdlogger_spi.status = SDLogger_Ready;
      }
      break;

    case SDLogger_Downloading:
      if (sdcard1.status == SDCard_Idle) {
        /* Put bytes to the buffer until all is written or buffer is full */
        for (uint16_t i = sdlogger_spi.sdcard_buf_idx; i < SD_BLOCK_SIZE; i++) {
          long fd = 0;
          if (uart_check_free_space(&(DOWNLINK_DEVICE), &fd, 1)) {
            uart_put_byte(&(DOWNLINK_DEVICE), fd, sdcard1.input_buf[i]);
          }
          else {
            /* No free space left, abort for-loop */
            break;
          }
          sdlogger_spi.sdcard_buf_idx++;
        }
        /* Request next block if entire buffer was written to uart */
        if (sdlogger_spi.sdcard_buf_idx >= SD_BLOCK_SIZE) {
          if (sdlogger_spi.download_length > 0) {
            sdcard_spi_read_block(&sdcard1, sdlogger_spi.download_address, NULL);
            sdlogger_spi.download_address++;
            sdlogger_spi.download_length--;
          }
          else {
            LOGGER_LED_OFF;
            sdlogger_spi.status = SDLogger_Ready;
          }
          sdlogger_spi.sdcard_buf_idx = 0;
        }
      }
      break;

    default:
      break;
  }
}
Exemplo n.º 6
0
inline void UM6_send_packet(uint8_t *packet_buffer, uint8_t packet_length)
{
  for (int i = 0; i < packet_length; i++) {
    uart_put_byte(&(UM6_LINK), 0, packet_buffer[i]);
  }
}