Exemple #1
0
void PAGE_TrainConfigInit(int page)
{
    (void)page;
    int mode = PPMin_Mode();
    show_titlerow(mode == PPM_IN_TRAIN1
                  ? _tr("Trainer Cfg (Channel)")
                  : mode == PPM_IN_TRAIN2
                    ? _tr("Trainer Cfg (Stick)")
                    : _tr("PPMIn Cfg (Extend)"));
    GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT,
                         LINE_SPACE, PPMin_Mode() == PPM_IN_SOURCE ? 3 : 3 + MAX_PPM_IN_CHANNELS,
                         row3_cb, NULL, NULL, NULL);
    GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0));
}
// Initialize UART for extended-audio
void AUDIO_Init() {
    if (Transmitter.audio_player == AUDIO_DISABLED) {
        // Reload hardware.ini if audio_player had been temporarily disabled
        CONFIG_LoadHardware();
    }
    printf("Voice: Initializing UART for extended-audio\n");

#if HAS_AUDIO_UART5
    if (Transmitter.audio_uart5) {
        printf("Voice: UART5 already initialized\n");
        return;
    }
#endif

#ifndef _DEVO12_TARGET_H_
    if ( PPMin_Mode() || Model.protocol == PROTOCOL_PPM ) {
        printf("Voice: Cannot initialize UART for extended-audio, PPM in use\n");
        UART_SetDataRate(0);
    }
    else {
#endif // _DEVO12_TARGET_H_
        printf("Voice: Setting up UART for extended-audio\n");
        UART_SetDataRate(9600);
#ifndef _DEVO12_TARGET_H_
    }
#endif // _DEVO12_TARGET_H_
    AUDIO_SetVolume();
}
static int get_channel_idx(int chan)
{
    int i;
    if (cp->type == MONITOR_MIXEROUTPUT) {
        for (i = 0; i < NUM_CHANNELS; i++) {
            if (Model.templates[i] != MIXERTEMPLATE_NONE) {
                if (--chan < 0)
                    break;
            }
        }
        return i + NUM_INPUTS;
    } else {
        if (cp->type == MONITOR_RAWINPUT) {
            int ppms = (PPMin_Mode() == PPM_IN_SOURCE) ? Model.num_ppmin_channels: 0;
            if (chan < ppms)
                return NUM_INPUTS + NUM_OUT_CHANNELS + NUM_VIRT_CHANNELS + chan;
            chan -= ppms;
        }
        for (i = 0; i < NUM_INPUTS; i++) {
            if (!(Transmitter.ignore_src & (1 << (i+1)))) {
                if (--chan < 0)
                    break;
            }
        }
        return i;
    }
}
Exemple #4
0
void PAGE_TrainConfigInit(int page)
{
    (void)page;
    int mode = PPMin_Mode();
    PAGE_ShowHeader(mode == PPM_IN_TRAIN1
                  ? _tr_noop("Trainer Cfg (Channel)")
                  : mode == PPM_IN_TRAIN2
                    ? _tr_noop("Trainer Cfg (Stick)")
                    : _tr_noop("PPMIn Cfg (Extend)"));
    int row = ROW1;
    if (PPMin_Mode() != PPM_IN_SOURCE) {
        GUI_CreateLabelBox(&gui->trainswlbl, COL1, row, LABEL_WIDTH, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Trainer Sw"));
        GUI_CreateTextSource(&gui->trainsw, COL2, row, TEXTSELECT_96, sourceselect_cb, set_source_cb, set_input_source_cb, &Model.train_sw);
    } else {
        GUI_CreateLabelBox(&gui->numchlbl, COL1, row, LABEL_WIDTH, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Num Channels"));
        GUI_CreateTextSelect(&gui->numch, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)0L);
    }
    row += 20;
    GUI_CreateLabelBox(&gui->centerpwlbl, COL1, row, LABEL_WIDTH, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Center PW"));
    GUI_CreateTextSelect(&gui->centerpw, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)1L);
    row += 20;
    GUI_CreateLabelBox(&gui->deltapwlbl, COL1, row, LABEL_WIDTH, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Delta PW"));
    GUI_CreateTextSelect(&gui->deltapw, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)2L);
    row += 20;
 
    if (PPMin_Mode() == PPM_IN_SOURCE)
        return;

    int num_rows= (MAX_PPM_IN_CHANNELS + 1) / 2;
    for (int i = 0; i < num_rows; i++) {
        long idx = i;
        row += 20;
        if (row > 300) // RBE: should be LCD_HEIGHT - 16(height box) ==> always < 300
            break;
        GUI_CreateLabelBox(&gui->ppmmaplbl[idx], COL1, row, COL3 - COL1, 16, &LABEL_FONT, input_chname_cb, NULL, (void *)idx);
        GUI_CreateTextSelect(&gui->ppmmap[idx], COL3, row, TEXTSELECT_96, NULL, set_chmap_cb, (void *)idx);
        idx += num_rows;
        if (idx >= MAX_PPM_IN_CHANNELS)
            break;
        GUI_CreateLabelBox(&gui->ppmmaplbl[idx], COL4, row, COL5 - COL4, 16, &LABEL_FONT, input_chname_cb, NULL, (void *)idx);
        GUI_CreateTextSelect(&gui->ppmmap[idx], COL5, row, TEXTSELECT_96, NULL, set_chmap_cb, (void *)idx);
    }
}
Exemple #5
0
void MODELTRAIN_Config()
{
    PAGE_SetModal(1);
    int mode = PPMin_Mode();
    show_titlerow(mode == PPM_IN_TRAIN1
                  ? _tr("Trainer Cfg (Channel)")
                  : mode == PPM_IN_TRAIN2
                    ? _tr("Trainer Cfg (Stick)")
                    : _tr("PPMIn Cfg (Extend)"));
    int row = ROW1;
    if (PPMin_Mode() != PPM_IN_SOURCE) {
        GUI_CreateLabel(&gui->trainswlbl, COL1, row, NULL, DEFAULT_FONT, _tr("Trainer Sw"));
        GUI_CreateTextSource(&gui->trainsw, COL2, row, TEXTSELECT_96, sourceselect_cb, set_source_cb, set_input_source_cb, &Model.train_sw);
    } else {
        GUI_CreateLabel(&gui->numchlbl, COL1, row, NULL, DEFAULT_FONT, _tr("Num Channels"));
        GUI_CreateTextSelect(&gui->numch, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)0L);
    }
    row += 20;
    GUI_CreateLabel(&gui->centerpwlbl, COL1, row, NULL, DEFAULT_FONT, _tr("Center PW"));
    GUI_CreateTextSelect(&gui->centerpw, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)1L);
    row += 20;
    GUI_CreateLabel(&gui->deltapwlbl, COL1, row, NULL, DEFAULT_FONT, _tr("Delta PW"));
    GUI_CreateTextSelect(&gui->deltapw, COL2, row, TEXTSELECT_96, NULL, set_train_cb, (void *)2L);
    row += 20;
 
    if (PPMin_Mode() == PPM_IN_SOURCE)
        return;

    int num_rows= (MAX_PPM_IN_CHANNELS + 1) / 2;
    for (int i = 0; i < num_rows; i++) {
        long idx = i;
        row += 20;
        if (row > 300) // RBE: should be LCD_HEIGHT - 16(height box) ==> always < 300
            break;
        GUI_CreateLabelBox(&gui->ppmmaplbl[idx], COL1, row, 0, 16, &DEFAULT_FONT, input_chname_cb, NULL, (void *)idx);
        GUI_CreateTextSelect(&gui->ppmmap[idx], COL3, row, TEXTSELECT_96, NULL, set_chmap_cb, (void *)idx);
        idx += num_rows;
        if (idx >= MAX_PPM_IN_CHANNELS)
            break;
        GUI_CreateLabelBox(&gui->ppmmaplbl[idx], COL4, row, 0, 16, &DEFAULT_FONT, input_chname_cb, NULL, (void *)idx);
        GUI_CreateTextSelect(&gui->ppmmap[idx], COL5, row, TEXTSELECT_96, NULL, set_chmap_cb, (void *)idx);
    }
}
Exemple #6
0
static const char *ppmin_select_cb(guiObject_t *obj, int dir, void *data)
{
    (void)data;
    (void)obj;
    u8 changed;
    u8 new_ppm = PPMin_Mode();
    new_ppm = GUI_TextSelectHelper(new_ppm, 0, 3, dir, 1, 1, &changed);

    if (obj) {
        if (changed) {
            if (! PPMin_Mode() && new_ppm) {
                //Start PPM-In
                PPMin_Start();
            } else if(! new_ppm) {
                //Stop PPM-In
                PPMin_Stop();
            }
            switch (new_ppm) {
                case PPM_IN_TRAIN1:
                    memset(Model.ppm_map, -1, sizeof(Model.ppm_map));
                    for(int i = 0; i < Model.num_channels; i++)
                        Model.ppm_map[i] = i;
                    break;
                case PPM_IN_TRAIN2:
                    memset(Model.ppm_map, -1, sizeof(Model.ppm_map));
                    for(int i = 0; i < 4; i++)
                        Model.ppm_map[i] = i+1;
                    break;
            }
        }
        GUI_TextSelectEnablePress((guiTextSelect_t *)obj, new_ppm);
        Model.num_ppmin = (Model.num_ppmin & 0x3f) | (new_ppm << 6);
    }
    if (new_ppm == 0) {
        return _tr("None");
    } else if (new_ppm == 1) {
        return _tr("Channel");
    } else if (new_ppm == 2) {
        return _tr("Stick");
    } else {
        return _tr("Extend");
    }
}
Exemple #7
0
s32 MIXER_GetChannel(unsigned channel, enum LimitMask flags)
{
    if (PPMin_Mode() == PPM_IN_TRAIN1 && Model.train_sw && raw[Model.train_sw] > 0) {
        int ppm_channel_map = map_ppm_channels(channel);
        if (ppm_channel_map >= 0) {
            if (ppmSync) {
                return ppmChannels[ppm_channel_map];
            }
            return Channels[channel];   // last value obtained from synchronized ppm set by CalcChannels
        }
    }
    return MIXER_ApplyLimits(channel, &Model.limits[channel], raw, Channels, flags);
}
Exemple #8
0
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];
        }
    }
}
Exemple #9
0
static void initialize()
{
    CLOCK_StopTimer();
    if (PPMin_Mode())
        return;

    PWM_Initialize();
    num_channels = Model.num_channels;
    if (Model.proto_opts[CENTER_PW] == 0) {
        Model.proto_opts[CENTER_PW] = 1100;
        Model.proto_opts[DELTA_PW] = 400;
        Model.proto_opts[NOTCH_PW] = 400;
        Model.proto_opts[PERIOD_PW] = 22500;
    }
    
    CLOCK_StartTimer(1000, ppmout_cb);
}
Exemple #10
0
static int row3_cb(int absrow, int relrow, int y, void *data)
{
    (void)data;
    void *ts;
    void *input_ts = NULL;
    void *ts_press = NULL;
    void *ts_data = NULL;
    char *label = NULL;
    void *label_cmd = NULL;

    switch (absrow) {
    case 0:
        label = _tr_noop("Center PW");
        ts = set_train_cb; ts_data = (void *)1L;
        break;
    case 1:
        label = _tr_noop("Delta PW");
        ts = set_train_cb; ts_data = (void *)2L;
        break;
    case 2:
        if (PPMin_Mode() != PPM_IN_SOURCE) {
            label = _tr_noop("Trainer Sw");
            ts = set_source_cb; ts_press = sourceselect_cb; ts_data = (void *)&Model.train_sw; input_ts = set_input_source_cb;
        } else {
            label = _tr_noop("Num Channels");
            ts = set_train_cb; ts_data = (void *)0L;
        }
        break;
    default:
        label_cmd = input_chname_cb; label = (void *)((long)absrow - 3);
        ts = set_chmap_cb; ts_data = label;
        break;
    }
    GUI_CreateLabelBox(&gui->label[relrow], LABEL_X, y,
            LABEL_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, label_cmd, NULL, label_cmd ? label : _tr(label));
    GUI_CreateTextSourcePlate(&gui->value[relrow], SELECT_X, y,
            SELECT_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, ts_press, ts, input_ts, ts_data);
    return 1;
}
static int num_disp_bars() {
    int j = 0;
    if (cp->type == MONITOR_MIXEROUTPUT) {
        //printf("MONITOR_MIXEROUTPUT ");
        for (int i = 0; i < NUM_CHANNELS; i++) {
            if (Model.templates[i] != MIXERTEMPLATE_NONE) {
                j++;
            }
        }
    } else {
        //printf(cp->type == MONITOR_RAWINPUT ? "MONITOR_RAWINPUT " : "MONITOR_BUTTONTEST ");
        for (int i = 0; i < NUM_INPUTS; i++) {
            if (!(Transmitter.ignore_src & (1 << (i+1)))) {
                j++;
            }
        }
        if (cp->type == MONITOR_RAWINPUT && PPMin_Mode() == PPM_IN_SOURCE) {
            j += Model.num_ppmin_channels;
        }
    }
    //printf("%d\n", j);
    return j;
}