#include #include #include #include #include #include #include #include #include // ArduPilot GPS library #include // ArduPilot Mega Analog to Digital Converter Library #include #include #include // ArduPilot Mega Magnetometer Library #include // ArduPilot Mega Vector/Matrix math Library #include // Curve used to linearlise throttle pwm to thrust #include // ArduPilot Mega Inertial Sensor (accel & gyro) Library // (only included for makefile libpath to work) #include #include // PI library #include // PID library #include // RC Channel Library #include // AP Motors library #include #include // Range finder library #include // Optical Flow library #include // Filter library #include // APM FIFO Buffer #include // GPS Lead filter #include // APM relay #include // Photo or video camera #include // Camera/Antenna mount #include // needed for AHRS build #include // ArduPilot Mega inertial navigation library #include #include #if CONFIG_HAL_BOARD == HAL_BOARD_APM2 const AP_HAL::HAL& hal = AP_HAL_AVR_APM2; #elif CONFIG_HAL_BOARD == HAL_BOARD_APM1 const AP_HAL::HAL& hal = AP_HAL_AVR_APM1; #endif void stream_loopback(AP_HAL::Stream* s, uint32_t time) { uint32_t end = hal.scheduler->millis() + time; for(;;) { if (hal.scheduler->millis() >= end && time != 0) { return; } if (s->available() > 0) { int c; c = s->read(); if (-1 != c) { s->write((uint8_t)c); } } } } void stream_console_loopback(AP_HAL::Stream* s, AP_HAL::ConsoleDriver* c, uint32_t time) { uint32_t end = hal.scheduler->millis() + time; for(;;) { if (hal.scheduler->millis() >= end && time != 0) { return; } /* Read the uart, write to the console backend. */ if (s->available() > 0) { int b; b = s->read(); if (-1 != b) { uint8_t tmp[1]; tmp[0] = (uint8_t) b; c->backend_write(tmp, 1); } } /* Loop back the console upon itself. */ { int b; b = c->read(); if (-1 != b) { c->write((uint8_t)b); } } /* Read the console backend, print to the uart. */ { uint8_t tmp[1]; int readback = c->backend_read(tmp, 1); if (readback > 0) { s->write(tmp[0]); } } } } void setup(void) { // // Test printing things // hal.console->print("test"); hal.console->println(" begin"); hal.console->println(1000); hal.console->println(1000, 8); hal.console->println(1000, 10); hal.console->println(1000, 16); hal.console->println_P(PSTR("progmem")); hal.console->printf("printf %d %u %#x %p %f %S\n", -1000, 1000, 1000, 1000, 1.2345, PSTR("progmem")); hal.console->printf_P(PSTR("printf_P %d %u %#x %p %f %S\n"), -1000, 1000, 1000, 1000, 1.2345, PSTR("progmem")); hal.console->println("loopback for 10sec:"); stream_loopback(hal.console, 10000); hal.console->println("loopback done"); hal.console->println("opening backend:"); hal.console->backend_open(); const char hello[] = "hello world\r\n"; hal.console->backend_write((const uint8_t*)hello, strlen(hello)); hal.console->println("loopback for 10sec:"); stream_console_loopback(hal.console, hal.console, 10000); hal.console->println("loopback done"); hal.console->backend_close(); hal.console->println("closed backend."); hal.console->println("done."); for(;;); } void loop(void){} AP_HAL_MAIN();