/* * Authors (alphabetical order) * - Andre Bernet * - Andreas Weitl * - Bertrand Songis * - Bryan J. Rentoul (Gruvin) * - Cameron Weeks * - Erez Raviv * - Gabriel Birkus * - Jean-Pierre Parisy * - Karl Szmutny * - Michael Blandford * - Michal Hlavinka * - Pat Mackenzie * - Philip Moss * - Rob Thomson * - Romolo Manfredini * - Thomas Husterer * * opentx is based on code named * gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/, * er9x by Erez Raviv: http://code.google.com/p/er9x/, * and the original (and ongoing) project by * Thomas Husterer, th9x: http://code.google.com/p/th9x/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "opentx.h" Fifo<28> sbusFifo; uint8_t SbusFrame[28] ; uint16_t SbusTimer ; uint8_t SbusIndex = 0 ; void processSbusFrame(uint8_t *sbus, int16_t *pulses) { uint32_t inputbitsavailable = 0; uint32_t inputbits = 0; if (*sbus++ != 0x0F) { return; // not a valid SBUS frame } for (uint32_t i=0; i>= 11; } } #define SBUS_DELAY 1000 // 500uS void processSbusInput() { uint8_t rxchar; uint32_t active = 0; while (sbusFifo.pop(rxchar)) { active = 1; SbusFrame[SbusIndex++] = rxchar; if (SbusIndex > 27) { SbusIndex = 27; } } if (active) { SbusTimer = getTmr2MHz(); return; } else { if (SbusIndex) { if ((uint16_t) (getTmr2MHz() - SbusTimer) > SBUS_DELAY) { processSbusFrame(SbusFrame, g_ppmIns); SbusIndex = 0; } } } }