Browse Source

HAL_ChibiOS: implement DigitalSource()

master
Andrew Tridgell 7 years ago
parent
commit
9a29c6d3b5
  1. 32
      libraries/AP_HAL_ChibiOS/GPIO.cpp
  2. 4
      libraries/AP_HAL_ChibiOS/GPIO.h

32
libraries/AP_HAL_ChibiOS/GPIO.cpp

@ -113,8 +113,13 @@ void GPIO::toggle(uint8_t pin)
} }
/* Alternative interface: */ /* Alternative interface: */
AP_HAL::DigitalSource* GPIO::channel(uint16_t n) { AP_HAL::DigitalSource* GPIO::channel(uint16_t pin)
return new DigitalSource(0); {
struct gpio_entry *g = gpio_by_pin_num(pin);
if (!g) {
return nullptr;
}
return new DigitalSource(g->pal_line);
} }
extern const AP_HAL::HAL& hal; extern const AP_HAL::HAL& hal;
@ -175,23 +180,28 @@ bool GPIO::usb_connected(void)
return _usb_connected; return _usb_connected;
} }
DigitalSource::DigitalSource(uint8_t v) : DigitalSource::DigitalSource(ioline_t _line) :
_v(v) line(_line)
{} {}
void DigitalSource::mode(uint8_t output) void DigitalSource::mode(uint8_t output)
{} {
palSetLineMode(line, output);
}
uint8_t DigitalSource::read() { uint8_t DigitalSource::read()
return _v; {
return palReadLine(line);
} }
void DigitalSource::write(uint8_t value) { void DigitalSource::write(uint8_t value)
_v = value; {
palWriteLine(line, value);
} }
void DigitalSource::toggle() { void DigitalSource::toggle()
_v = !_v; {
palToggleLine(line);
} }
void ext_interrupt_cb(EXTDriver *extp, expchannel_t channel) void ext_interrupt_cb(EXTDriver *extp, expchannel_t channel)

4
libraries/AP_HAL_ChibiOS/GPIO.h

@ -61,11 +61,11 @@ private:
class ChibiOS::DigitalSource : public AP_HAL::DigitalSource { class ChibiOS::DigitalSource : public AP_HAL::DigitalSource {
public: public:
DigitalSource(uint8_t v); DigitalSource(ioline_t line);
void mode(uint8_t output); void mode(uint8_t output);
uint8_t read(); uint8_t read();
void write(uint8_t value); void write(uint8_t value);
void toggle(); void toggle();
private: private:
uint8_t _v; ioline_t line;
}; };

Loading…
Cancel
Save