AP_HAL: added hal.gpio->usb_connected() function

this replaces the USB_MUX_PIN on APM2, and works on PX4 and FMUv2
This commit is contained in:
Andrew Tridgell 2013-09-19 16:23:40 +10:00
parent 59943bad26
commit a5b29f44d5
9 changed files with 49 additions and 1 deletions

View File

@ -37,6 +37,9 @@ public:
/* Interrupt interface: */
virtual bool attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p,
uint8_t mode) = 0;
/* return true if USB cable is connected */
virtual bool usb_connected(void) = 0;
};
#endif // __AP_HAL_GPIO_H__

View File

@ -202,5 +202,18 @@ void AVRDigitalSource::toggle() {
SREG = oldSREG;
}
/*
return true when USB is connected
*/
bool AVRGPIO::usb_connected(void)
{
#if HAL_GPIO_USB_MUX_PIN != -1
pinMode(HAL_GPIO_USB_MUX_PIN, GPIO_INPUT);
return !read(HAL_GPIO_USB_MUX_PIN);
#else
return false;
#endif
}
#endif

View File

@ -11,12 +11,14 @@
# define HAL_GPIO_C_LED_PIN 35
# define HAL_GPIO_LED_ON HIGH
# define HAL_GPIO_LED_OFF LOW
# define HAL_GPIO_USB_MUX_PIN -1
#elif CONFIG_HAL_BOARD == HAL_BOARD_APM2
# define HAL_GPIO_A_LED_PIN 27
# define HAL_GPIO_B_LED_PIN 26
# define HAL_GPIO_C_LED_PIN 25
# define HAL_GPIO_LED_ON LOW
# define HAL_GPIO_LED_OFF HIGH
# define HAL_GPIO_USB_MUX_PIN 23
#endif
class AP_HAL_AVR::AVRDigitalSource : public AP_HAL::DigitalSource {
@ -44,6 +46,10 @@ public:
AP_HAL::DigitalSource* channel(uint16_t);
bool attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc proc,
uint8_t mode);
/* return true if USB cable is connected */
bool usb_connected(void);
/* private-ish: only to be used from the appropriate interrupt */
static AP_HAL::Proc _interrupt_6;
};

View File

@ -39,6 +39,10 @@ bool EmptyGPIO::attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p,
return true;
}
bool EmptyGPIO::usb_connected(void)
{
return false;
}
EmptyDigitalSource::EmptyDigitalSource(uint8_t v) :
_v(v)

View File

@ -21,6 +21,8 @@ public:
bool attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p,
uint8_t mode);
/* return true if USB cable is connected */
bool usb_connected(void);
};
class Empty::EmptyDigitalSource : public AP_HAL::DigitalSource {

View File

@ -16,6 +16,8 @@
#include <drivers/drv_tone_alarm.h>
#include <drivers/drv_gpio.h>
#include <modules/px4iofirmware/protocol.h>
#include <arch/board/board.h>
#include <board_config.h>
#define LOW 0
#define HIGH 1
@ -203,6 +205,14 @@ bool PX4GPIO::attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p, uint8_t mo
return true;
}
/*
return true when USB connected
*/
bool PX4GPIO::usb_connected(void)
{
return stm32_gpioread(GPIO_OTGFS_VBUS);
}
PX4DigitalSource::PX4DigitalSource(uint8_t v) :
_v(v)

View File

@ -37,6 +37,9 @@ public:
/* Interrupt interface: */
bool attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p, uint8_t mode);
/* return true if USB cable is connected */
bool usb_connected(void);
private:
int _led_fd;
int _tone_alarm_fd;

View File

@ -33,6 +33,11 @@ void SMACCMGPIO::toggle(uint8_t pin)
{
}
bool SMACCMGPIO::usb_connected(void)
{
return false;
}
/* Alternative interface: */
AP_HAL::DigitalSource* SMACCMGPIO::channel(uint16_t n)
{
@ -68,4 +73,4 @@ void SMACCMDigitalSource::write(uint8_t value)
void SMACCMDigitalSource::toggle()
{
_v = !_v;
}
}

View File

@ -30,6 +30,8 @@ public:
bool attach_interrupt(uint8_t interrupt_num, AP_HAL::Proc p,
uint8_t mode);
/* return true if USB cable is connected */
bool usb_connected(void);
};
class SMACCM::SMACCMDigitalSource : public AP_HAL::DigitalSource {