Better AR interface initialization

This commit is contained in:
Lorenz Meier
2012-09-06 20:46:53 +02:00
parent db6ec2d7d2
commit 925f143433
2 changed files with 15 additions and 16 deletions
+13 -13
View File
@@ -205,18 +205,6 @@ int ardrone_interface_thread_main(int argc, char *argv[])
printf("[ardrone_interface] Motor test mode enabled, setting 10 %% thrust.\n"); printf("[ardrone_interface] Motor test mode enabled, setting 10 %% thrust.\n");
} }
/* enable UART, writes potentially an empty buffer, but multiplexing is disabled */
ardrone_write = ardrone_open_uart(&uart_config_original);
/* initialize multiplexing, deactivate all outputs - must happen after UART open to claim GPIOs on PX4FMU */
gpios = ar_multiplexing_init();
if (ardrone_write < 0) {
fprintf(stderr, "[ardrone_interface] Failed opening AR.Drone UART, exiting.\n");
thread_running = false;
exit(ERROR);
}
/* Led animation */ /* Led animation */
int counter = 0; int counter = 0;
int led_counter = 0; int led_counter = 0;
@@ -237,6 +225,18 @@ int ardrone_interface_thread_main(int argc, char *argv[])
printf("[ardrone_interface] Motors initialized - ready.\n"); printf("[ardrone_interface] Motors initialized - ready.\n");
fflush(stdout); fflush(stdout);
/* enable UART, writes potentially an empty buffer, but multiplexing is disabled */
ardrone_write = ardrone_open_uart(&uart_config_original);
/* initialize multiplexing, deactivate all outputs - must happen after UART open to claim GPIOs on PX4FMU */
gpios = ar_multiplexing_init();
if (ardrone_write < 0) {
fprintf(stderr, "[ardrone_interface] Failed opening AR.Drone UART, exiting.\n");
thread_running = false;
exit(ERROR);
}
/* initialize motors */ /* initialize motors */
if (OK != ar_init_motors(ardrone_write, gpios)) { if (OK != ar_init_motors(ardrone_write, gpios)) {
close(ardrone_write); close(ardrone_write);
@@ -253,7 +253,7 @@ int ardrone_interface_thread_main(int argc, char *argv[])
/* close uarts */ /* close uarts */
close(ardrone_write); close(ardrone_write);
ar_multiplexing_deinit(gpios); //ar_multiplexing_deinit(gpios);
/* enable UART, writes potentially an empty buffer, but multiplexing is disabled */ /* enable UART, writes potentially an empty buffer, but multiplexing is disabled */
ardrone_write = ardrone_open_uart(&uart_config_original); ardrone_write = ardrone_open_uart(&uart_config_original);
@@ -226,9 +226,7 @@ int ar_init_motors(int ardrone_uart, int gpios)
for (i = 1; i < 5; ++i) { for (i = 1; i < 5; ++i) {
/* Initialize motors 1-4 */ /* Initialize motors 1-4 */
errcounter += ar_select_motor(gpios, i); errcounter += ar_select_motor(gpios, i);
usleep(200);
write(ardrone_uart, &(initbuf[3]), 1);
fsync(ardrone_uart);
/* /*
* write 0xE0 - request status * write 0xE0 - request status
@@ -278,6 +276,7 @@ int ar_init_motors(int ardrone_uart, int gpios)
/* start the multicast part */ /* start the multicast part */
errcounter += ar_select_motor(gpios, 0); errcounter += ar_select_motor(gpios, 0);
usleep(200);
/* /*
* first round * first round