void TIMER_Power(){ static u32 timer = 0; u32 alert = Transmitter.power_alarm * 60 * 1000; static u16 throttle; u16 new_throttle; u16 elevator; unsigned mode = MODE_2 == Transmitter.mode || MODE_4 == Transmitter.mode ? 2 : 1; if( 0 == timer) timer = CLOCK_getms() + alert; elevator = 2 == mode ? abs(CHAN_ReadInput(INP_THROTTLE)) : abs(CHAN_ReadInput(INP_ELEVATOR)); new_throttle = 2 == mode ? abs(CHAN_ReadInput(INP_ELEVATOR)) : abs(CHAN_ReadInput(INP_THROTTLE)); new_throttle = abs(new_throttle - throttle); if( elevator < 1000 && abs(CHAN_ReadInput(INP_AILERON)) < 1000 && new_throttle < 1000 && abs(CHAN_ReadInput(INP_RUDDER)) < 1000 && !ScanButtons() && (!HAS_TOUCH || !SPITouch_IRQ()) ) { if ( CLOCK_getms() > timer ) { timer = CLOCK_getms() + 2000; MUSIC_Play(MUSIC_SHUTDOWN); } } else timer = CLOCK_getms() + alert; throttle = 2 == mode ? abs(CHAN_ReadInput(INP_ELEVATOR)) : abs(CHAN_ReadInput(INP_THROTTLE)); }
int PROTOCOL_SticksMoved(int init) { const s32 STICK_MOVEMENT = 15; // defines when the bind dialog should be interrupted (stick movement STICK_MOVEMENT %) static s32 ele_start, ail_start; s32 ele = CHAN_ReadInput(MIXER_MapChannel(INP_ELEVATOR)); s32 ail = CHAN_ReadInput(MIXER_MapChannel(INP_AILERON)); if(init) { ele_start = ele; ail_start = ail; return 0; } s32 ele_diff = abs(ele_start - ele); s32 ail_diff = abs(ail_start - ail); return ((ele_diff + ail_diff > 2 * STICK_MOVEMENT * CHAN_MAX_VALUE / 100)); }
static void MIXER_UpdateRawInputs() { int i; //1st step: read input data (sticks, switches, etc) and calibrate for (i = 1; i <= NUM_TX_INPUTS; i++) { unsigned mapped_channel = MIXER_MapChannel(i); if (PPMin_Mode() == PPM_IN_TRAIN2 && Model.train_sw && raw[Model.train_sw] > 0) { int ppm_channel_map = map_ppm_channels(i); if (ppm_channel_map >= 0) { if (ppmSync) { raw[i] = ppmChannels[ppm_channel_map]; } continue; } } raw[i] = CHAN_ReadInput(mapped_channel); } if (PPMin_Mode() == PPM_IN_SOURCE && ppmSync) { for (i = 0; i < (Model.num_ppmin & 0x3f); i++) { raw[1 + NUM_INPUTS + NUM_OUT_CHANNELS + NUM_VIRT_CHANNELS + i] = ppmChannels[i]; } } }
s32 CHAN_ReadRawInput(int channel) { return CHAN_ReadInput(channel); }