528 lines
15 KiB
C++
528 lines
15 KiB
C++
/***************************************************************************
|
|
menu_hardware_te3_card_advanced_options - description
|
|
-------------------
|
|
begin : Thu Apr 1 2004
|
|
copyright : (C) 2004 by David Rokhvarg
|
|
email : davidr@sangoma.com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "text_box.h"
|
|
#include "text_box_yes_no.h"
|
|
#include "input_box.h"
|
|
|
|
#include "menu_hardware_te3_card_advanced_options.h"
|
|
#include "menu_te3_select_media.h"
|
|
#include "menu_te_select_line_decoding.h"
|
|
#include "menu_te_select_framing.h"
|
|
#include "menu_t1_lbo.h"
|
|
#include "input_box_active_channels.h"
|
|
#include "menu_te1_clock_mode.h"
|
|
|
|
enum TE3_ADVANCED_OPTIONS{
|
|
TE3_MEDIA=1,
|
|
TE3_LCODE,
|
|
TE3_FRAME,
|
|
TE3_IS_FRACTIONAL,
|
|
TE3_RDEV_TYPE,
|
|
TE3_FCS,
|
|
LIU_RX_EQUAL,
|
|
LIU_TAOS,
|
|
LIU_LB_MODE,
|
|
LIU_TX_LBO,
|
|
AFT_FE_TXTRISTATE
|
|
};
|
|
|
|
#define DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS 1
|
|
|
|
menu_hardware_te3_card_advanced_options::
|
|
menu_hardware_te3_card_advanced_options( IN char * lxdialog_path,
|
|
IN conf_file_reader* ptr_cfr)
|
|
{
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS,
|
|
("menu_hardware_te3_card_advanced_options::menu_hardware_te3_card_advanced_options()\n"));
|
|
|
|
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
|
|
this->cfr = ptr_cfr;
|
|
}
|
|
|
|
menu_hardware_te3_card_advanced_options::~menu_hardware_te3_card_advanced_options()
|
|
{
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS,
|
|
("menu_hardware_te3_card_advanced_options::~menu_hardware_te3_card_advanced_options()\n"));
|
|
}
|
|
|
|
int menu_hardware_te3_card_advanced_options::run(OUT int * selection_index)
|
|
{
|
|
string menu_str;
|
|
string question;
|
|
int rc;
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
unsigned int option_selected;
|
|
char exit_dialog;
|
|
int number_of_items;
|
|
sdla_te3_cfg_t* te3_cfg;
|
|
sdla_te3_liu_cfg_t* liu_cfg;
|
|
char backtitle[MAX_PATH_LENGTH];
|
|
char explanation_text[MAX_PATH_LENGTH];
|
|
char initial_text[MAX_PATH_LENGTH];
|
|
input_box inb;
|
|
|
|
//help text box
|
|
text_box tb;
|
|
|
|
link_def_t * link_def;
|
|
wandev_conf_t *linkconf;
|
|
|
|
input_box_active_channels act_channels_ip;
|
|
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS, ("menu_net_interface_setup::run()\n"));
|
|
|
|
again:
|
|
rc = YES;
|
|
option_selected = 0;
|
|
exit_dialog = NO;
|
|
|
|
link_def = cfr->link_defs;
|
|
linkconf = cfr->link_defs->linkconf;
|
|
|
|
te3_cfg = &linkconf->fe_cfg.cfg.te3_cfg;
|
|
liu_cfg = &te3_cfg->liu_cfg;
|
|
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS,
|
|
("cfr->link_defs->name: %s\n", link_def->name));
|
|
|
|
number_of_items = 9;
|
|
menu_str = "";
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_MEDIA);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Physical Medium--> %s\" ",
|
|
MEDIA_DECODE(&linkconf->fe_cfg));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_LCODE);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Line decoding----> %s\" ",
|
|
LCODE_DECODE(&linkconf->fe_cfg));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_FRAME);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Framing----------> %s\" ",
|
|
FRAME_DECODE(&linkconf->fe_cfg));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_IS_FRACTIONAL);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"is fractional mode----> %s\" ",
|
|
(te3_cfg->fractional == WANOPT_YES ? "Yes" : "No"));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
if(te3_cfg->fractional == WANOPT_YES){
|
|
|
|
number_of_items = 10;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_RDEV_TYPE);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"rdevice----> %s\" ",
|
|
RDEVICE_DECODE(te3_cfg->rdevice_type));
|
|
menu_str += tmp_buff;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE3_FCS);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"FCS---------> %d\" ", te3_cfg->fcs);
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", LIU_RX_EQUAL);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"rx equal----> %s\" ",
|
|
(liu_cfg->rx_equal == WANOPT_YES ? "Yes" : "No"));
|
|
menu_str += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", LIU_TAOS);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"taos--------> %s\" ",
|
|
(liu_cfg->taos == WANOPT_YES ? "Yes" : "No"));
|
|
menu_str += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", LIU_LB_MODE);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"lb mode-----> %s\" ",
|
|
(liu_cfg->lb_mode == WANOPT_YES ? "Yes" : "No"));
|
|
menu_str += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", LIU_TX_LBO);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"tx lbo------> %s\" ",
|
|
(liu_cfg->tx_lbo == WANOPT_YES ? "Yes" : "No"));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_FE_TXTRISTATE);
|
|
menu_str += tmp_buff;
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Disable Transmitter---> %s\" ",
|
|
(linkconf->fe_cfg.tx_tristate_mode == WANOPT_YES ? "YES" : "NO"));
|
|
menu_str += tmp_buff;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//create the explanation text for the menu
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n------------------------------------------\
|
|
\nAdvanced Hardware settings for: %s.", link_def->name);
|
|
|
|
if(set_configuration( YES,//indicates to call V2 of the function
|
|
MENU_BOX_BACK,//MENU_BOX_SELECT,
|
|
lxdialog_path,
|
|
"T3/E3 ADVANCED CONFIGURATION OPTIONS",
|
|
WANCFG_PROGRAM_NAME,
|
|
tmp_buff,
|
|
MENU_HEIGTH, MENU_WIDTH,
|
|
number_of_items,
|
|
(char*)menu_str.c_str()
|
|
) == NO){
|
|
rc = NO;
|
|
goto cleanup;
|
|
}
|
|
|
|
if(show(selection_index) == NO){
|
|
rc = NO;
|
|
goto cleanup;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
exit_dialog = NO;
|
|
switch(*selection_index)
|
|
{
|
|
case MENU_BOX_BUTTON_SELECT:
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS,
|
|
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
|
|
|
|
switch(atoi(get_lxdialog_output_string()))
|
|
{
|
|
case TE3_MEDIA:
|
|
{
|
|
menu_te3_select_media te3_select_media(lxdialog_path, cfr);
|
|
if(te3_select_media.run(selection_index) == NO){
|
|
rc = NO;
|
|
exit_dialog = YES;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case TE3_LCODE:
|
|
{
|
|
menu_te_select_line_decoding te3_select_line_decoding(lxdialog_path, cfr);
|
|
if(te3_select_line_decoding.run(selection_index) == NO){
|
|
rc = NO;
|
|
exit_dialog = YES;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case TE3_FRAME:
|
|
{
|
|
menu_te_select_framing te3_select_framing(lxdialog_path, cfr);
|
|
if(te3_select_framing.run(selection_index) == NO){
|
|
rc = NO;
|
|
exit_dialog = YES;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case TE3_IS_FRACTIONAL:
|
|
if(te3_cfg->fractional == WANOPT_YES){
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
"Do you want to disable Fractional Mode?") == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
te3_cfg->fractional = WANOPT_NO;
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
|
|
}else{
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
"Do you want to enable Fractional Mode?") == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
te3_cfg->fractional = WANOPT_YES;
|
|
te3_cfg->rdevice_type = WAN_TE3_RDEVICE_KENTROX;
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case TE3_RDEV_TYPE:
|
|
|
|
break;
|
|
|
|
case TE3_FCS:
|
|
//number between 0 and 7, including.
|
|
int fcs_no;
|
|
snprintf(explanation_text, MAX_PATH_LENGTH, "Enter FCS Number");
|
|
snprintf(initial_text, MAX_PATH_LENGTH, "%d", te3_cfg->fcs);
|
|
|
|
show_fcs_input_box:
|
|
inb.set_configuration( lxdialog_path,
|
|
backtitle,
|
|
explanation_text,
|
|
INPUT_BOX_HIGTH,
|
|
INPUT_BOX_WIDTH,
|
|
initial_text);
|
|
|
|
inb.show(selection_index);
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case INPUT_BOX_BUTTON_OK:
|
|
Debug(DBG_MENU_HARDWARE_TE3_CARD_ADVANCED_OPTIONS,
|
|
("fcs_no on return: %s\n", inb.get_lxdialog_output_string()));
|
|
|
|
fcs_no = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
|
|
te3_cfg->fcs = fcs_no;
|
|
/*
|
|
//FIXME: check if input is valid
|
|
if(fcs_no < 0 || fcs_no > 7){
|
|
|
|
tb.show_error_message(lxdialog_path, NO_PROTOCOL_NEEDED,
|
|
"Invalid FCS Number. Min: %d, Max: %d.",
|
|
0, 7);
|
|
goto show_fcs_input_box;
|
|
}else{
|
|
te3_cfg->fcs = fcs_no;
|
|
}
|
|
*/
|
|
break;
|
|
|
|
case INPUT_BOX_BUTTON_HELP:
|
|
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
|
|
goto show_fcs_input_box;
|
|
}//switch(*selection_index)
|
|
break;
|
|
|
|
case LIU_RX_EQUAL:
|
|
|
|
question = (liu_cfg->rx_equal == WANOPT_YES ?
|
|
"Do you want to disable Rx Equal Mode?" :
|
|
"Do you want to enable Rx Equal Mode?");
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
question.c_str()) == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
if(liu_cfg->rx_equal == WANOPT_YES){
|
|
liu_cfg->rx_equal = WANOPT_NO;
|
|
}else{
|
|
liu_cfg->rx_equal = WANOPT_YES;
|
|
}
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case LIU_TAOS:
|
|
|
|
question = (liu_cfg->taos == WANOPT_YES ?
|
|
"Do you want to disable Taos Mode?" :
|
|
"Do you want to enable Taos Mode?");
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
question.c_str()) == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
if(liu_cfg->taos == WANOPT_YES){
|
|
liu_cfg->taos = WANOPT_NO;
|
|
}else{
|
|
liu_cfg->taos = WANOPT_YES;
|
|
}
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case LIU_LB_MODE:
|
|
question = (liu_cfg->lb_mode == WANOPT_YES ?
|
|
"Do you want to disable LB Mode?" :
|
|
"Do you want to enable LB Mode?");
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
question.c_str()) == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
if(liu_cfg->lb_mode == WANOPT_YES){
|
|
liu_cfg->lb_mode = WANOPT_NO;
|
|
}else{
|
|
liu_cfg->lb_mode = WANOPT_YES;
|
|
}
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case LIU_TX_LBO:
|
|
question = (liu_cfg->tx_lbo == WANOPT_YES ?
|
|
"Do you want to disable TX LBO Mode?" :
|
|
"Do you want to enable TX LBO Mode?");
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
question.c_str()) == NO){
|
|
//error running dialog
|
|
return NO;
|
|
}
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
if(liu_cfg->tx_lbo == WANOPT_YES){
|
|
liu_cfg->tx_lbo = WANOPT_NO;
|
|
}else{
|
|
liu_cfg->tx_lbo = WANOPT_YES;
|
|
}
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//do nothing
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case AFT_FE_TXTRISTATE:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s transmitter?",
|
|
(linkconf->fe_cfg.tx_tristate_mode == WANOPT_NO ? "Disable" : "Enable"));
|
|
|
|
if(yes_no_question( selection_index,
|
|
lxdialog_path,
|
|
NO_PROTOCOL_NEEDED,
|
|
tmp_buff) == NO){
|
|
//error displaying dialog
|
|
rc = NO;
|
|
goto cleanup;
|
|
}
|
|
|
|
switch(*selection_index)
|
|
{
|
|
case YES_NO_TEXT_BOX_BUTTON_YES:
|
|
if(linkconf->fe_cfg.tx_tristate_mode == WANOPT_NO){
|
|
//transmitter enabled, user wants to disable
|
|
linkconf->fe_cfg.tx_tristate_mode = WANOPT_YES;
|
|
}else{
|
|
linkconf->fe_cfg.tx_tristate_mode = WANOPT_NO;
|
|
}
|
|
break;
|
|
|
|
case YES_NO_TEXT_BOX_BUTTON_NO:
|
|
//don't do anything
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
|
|
}
|
|
break;
|
|
|
|
case MENU_BOX_BUTTON_HELP:
|
|
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
|
|
break;
|
|
|
|
case MENU_BOX_BUTTON_EXIT:
|
|
exit_dialog = YES;
|
|
break;
|
|
}//switch(*selection_index)
|
|
|
|
if(exit_dialog == NO){
|
|
goto again;
|
|
}
|
|
|
|
cleanup:
|
|
return rc;
|
|
}
|