mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 14:38:30 -04:00
HAL_Linux: add prototype RCInput code for Navio
This commit is contained in:
parent
ef420a2544
commit
6f993fe64a
@ -15,16 +15,62 @@ extern const AP_HAL::HAL& hal;
|
||||
|
||||
using namespace Linux;
|
||||
|
||||
|
||||
// This is a prototype code for RC input decoding on Raspberry Pi.
|
||||
// It uses pigpio daemon to sample GPIOs over DMA with 1 microsecond resolution.
|
||||
// This code should be rewritten to configure DMA GPIO sampling without pigpio.
|
||||
|
||||
void LinuxRCInput_Navio::init(void*)
|
||||
{
|
||||
// To be added
|
||||
curtick = 0;
|
||||
prevtick = 0;
|
||||
width_s0 = 0;
|
||||
width_s1 = 0;
|
||||
|
||||
// Kills pigpio daemon in case it was run with wrong parameters
|
||||
|
||||
system("killall pigpiod -q");
|
||||
hal.scheduler->delay(1000);
|
||||
|
||||
// Starts pigpio daemon with 1 microsecond sampling resolution
|
||||
|
||||
system("pigpiod -s 1");
|
||||
hal.scheduler->delay(1000);
|
||||
|
||||
// Configures pigpiod to send GPIO change notifications to /dev/pigpio0
|
||||
|
||||
system("pigs NO NB 0 0x10");
|
||||
hal.scheduler->delay(1000);
|
||||
|
||||
// Configures /dev/pigpio0 for non-blocking read
|
||||
|
||||
pigpio = open("/dev/pigpio0", O_RDONLY);
|
||||
|
||||
if (pigpio == -1)
|
||||
hal.scheduler->panic("No pigpio interface for RCInput");
|
||||
}
|
||||
|
||||
void LinuxRCInput_Navio::_timer_tick()
|
||||
{
|
||||
// To be added
|
||||
while (true) {
|
||||
int bytesAvailable;
|
||||
ioctl(pigpio, FIONREAD, &bytesAvailable);
|
||||
|
||||
if (bytesAvailable >= 12)
|
||||
::read(pigpio, reinterpret_cast<uint8_t*>(&gpioReport), 12);
|
||||
else
|
||||
break;
|
||||
|
||||
prevtick = curtick;
|
||||
curtick = gpioReport.tick;
|
||||
|
||||
if (((gpioReport.level >> 4) & 0x01) == 0) {
|
||||
width_s0 = curtick - prevtick;
|
||||
}
|
||||
else {
|
||||
width_s1 = curtick - prevtick;
|
||||
_process_rc_pulse(width_s0, width_s1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // CONFIG_HAL_BOARD_SUBTYPE
|
||||
|
@ -12,7 +12,20 @@ public:
|
||||
void _timer_tick(void);
|
||||
|
||||
private:
|
||||
int pigpio;
|
||||
|
||||
struct gpioReport_t
|
||||
{
|
||||
uint16_t seqno;
|
||||
uint16_t flags;
|
||||
uint32_t tick;
|
||||
uint32_t level;
|
||||
} gpioReport;
|
||||
|
||||
int curtick;
|
||||
int prevtick;
|
||||
uint16_t width_s0;
|
||||
uint16_t width_s1;
|
||||
};
|
||||
|
||||
#endif // __AP_HAL_LINUX_RCINPUT_NAVIO_H__
|
||||
|
Loading…
Reference in New Issue
Block a user