wanpipe/util/wancfg/menu_hardware_te1_card_adva...

1163 lines
32 KiB
C++

/***************************************************************************
menu_hardware_te1_card_advanced_options.cpp - 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 "menu_hardware_te1_card_advanced_options.h"
#include "text_box.h"
#include "text_box_yes_no.h"
#include "menu_te1_select_media.h"
#include "menu_te_select_line_decoding.h"
#include "menu_te_select_framing.h"
#include "menu_t1_lbo.h"
#include "menu_e1_lbo.h"
#include "input_box_active_channels.h"
#include "menu_te1_clock_mode.h"
char* active_te1_channels_help_str =
"\n"
"BOUND T1/E1 ACTIVE CHANNELS\n"
"\n"
"Please specify T1/E1 channles to be used.\n"
"\n"
"You can use the follow format:\n"
"o ALL - for full T1/E1 links\n"
"o x.a-b.w - where the letters are numbers; to specify\n"
" the channels x and w and the range of\n"
" channels a-b, inclusive for fractional\n"
" links.\n"
" Example:\n"
"o ALL - All channels will be selcted\n"
"o 1 - A first channel will be selected\n"
"o 1.3-8.12 - Channels 1,3,4,5,6,7,8,12 will be selected.\n"
"\n";
char* te1_options_help_str =
"T1/E1 LINE DECODING\n"
"\n"
"for T1:\n"
" AMI or B8ZS\n"
"for E1:\n"
" AMI or HDB3\n"
"\n"
"T1/E1 FRAMIING MODE\n"
"\n"
"for T1:\n"
" D4 or ESF or UNFRAMED\n"
"for E1:\n"
" non-CRC4 or CRC4 or UNFRAMED\n"
"\n"
"T1/E1 CLOCK MODE\n"
"\n"
" Normal - normal clock mode (default)\n"
" Master - master clock mode\n"
"\n"
"T1 LINE BUILD OUT\n"
"\n"
"for Long Haul\n"
" 1. CSU: 0dB\n"
" 2. CSU: 7.5dB\n"
" 3. CSU: 15dB\n"
" 4. CSU: 22.5dB\n"
"for Short Haul\n"
" 5. DSX: 0-110ft\n"
" 6. DSX: 110-220ft\n"
" 7. DSX: 220-330ft\n"
" 8. DSX: 330-440ft\n"
" 9. DSX: 440-550ft\n"
" 10. DSX: 550-660ft\n"
"\n\n"
"Reference Clock Port:\n"
"or \"A104/2 TE1 Clock Synchronization\"\n"
"\n"
"A104 Supported from Release: beta7-2.3.3 or greater\n"
"Firmware Version: V.12\n"
"A102 Supported from Release: beta7-2.3.2 or greater.\n"
"Firmware Version: V.24\n"
"\n"
"TE1 Clock synchronization is used to propagate\n"
"a single clock source throughout the\n"
"TE1 network.\n"
"\n"
"wanpipe1->Port A-> Normal Mode:\n"
" Receives T1 Clock from Telco\n"
"wanpipe2->Port B-> Master Mode:\n"
" Transmits the SAME T1\n"
"Clock as a master source.\n"
"\n"
"In order to enable this option on wanpipe2:\n"
"Set the Reference Clock Port to a non zero\n"
"value which is the port number\n"
"that is supplying to clock.\n"
"Range: 0 - dislable\n"
" 1-4 - supported ports\n"
" For A102: 1=PortA\n"
" 2=PortB\n"
"\n"
"\n"
"Note: That TE_CLOCK must be set as MASTER\n"
" The Clock source is the Port 1 LINE.\n"
"\n"
"IMPORTANT: When start and stopping devices\n"
"START: Master(wanpipe1) then Slave(wanpipe2)\n"
"STOP: Slave(wanpipe2) then Master(wanpipe1)\n"
"\n"
"This is done automatically by the wanrouter\n"
"startup script.\n"
"i.e: wanrouter stop: will stop devices in\n"
"inverse order.\n"
"\n"
"IMPORTANT:\n"
" If the wanpipe1 device is stopped, the\n"
" wanpipe2 device, that is using the clock\n"
" from wanpipe1, will loose its clock thus\n"
" resulting in unpredictable operation.\n";
char* bri_options_help_str =
"BRI Master Clock Port:\n"
"YES - this port is MASTER clock for all OTHER\n"
" ports on this A500 card\n"
"NO - this port is in NORMAL clock mode\n"
"\n"
"IMPORTANT:\n"
" If MASTER port is in disconnected state or\n"
" stopped, all ports on the A500 card will\n"
" run on internal card's clock.\n";
enum TE1_ADVANCED_OPTIONS{
TE1_MEDIA=1,
TE1_LCODE,
TE1_FRAME,
T1_LBO,
E1_LBO,
TE1_CLOCK,
TE1_ACTIVE_CH,
AFT_FE_TXTRISTATE,
TE_REF_CLOCK,
E1_SIG_MODE,
TE_HIGHIMPEDANCE,
BRI_CLOCK_MASTER,
TE_RX_SLEVEL,
RM_NETWORK_SYNC
};
////////////////////////////////////////////////////////////////////////////////////
/*
TE_RX_SLEVEL: Receiver Sensitivity (Max Cable Loss Allowed) (dB)
The user will have the following option to choose:
1. Hi-Imedance mode:
30 dB
22.5 dB
17.5 dB
12 dB
Depending on selection, write the following values into configuration files:
300
225
175
120
2. Normal mode:
12 dB
18 dB
30 dB
36 dB (for T1)
43 dB (for E1)
Depending on selection, write the following values into configuration files:
120
180
300
360
430
*/
typedef struct _te_rx_slevel
{
const char* name;
unsigned int value;
}te_rx_slevel_t;
const te_rx_slevel_t high_impedance_rx_slevel[] = {
{"30 dB", 300},
{"22.5 dB", 225},
{"17.5 dB", 175},
{"12 dB", 120},
{NULL, 0}
};
const te_rx_slevel_t t1_normal_mode_rx_slevel[] = {
{"12 dB", 120},
{"18 dB", 180},
{"30 dB", 300},
{"36 dB", 360},
{NULL, 0}
};
const te_rx_slevel_t e1_normal_mode_rx_slevel[] = {
{"12 dB", 120},
{"18 dB", 180},
{"30 dB", 300},
{"43 dB", 430},
{NULL, 0}
};
////////////////////////////////////////////////////////////////////////////////////
#define DBG_MENU_HARDWARE_TE1_CARD_ADVANCED_OPTIONS 1
menu_hardware_te1_card_advanced_options::
menu_hardware_te1_card_advanced_options( IN char * lxdialog_path,
IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_HARDWARE_TE1_CARD_ADVANCED_OPTIONS,
("menu_hardware_te1_card_advanced_options::menu_hardware_te1_card_advanced_options()\n"));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_hardware_te1_card_advanced_options::~menu_hardware_te1_card_advanced_options()
{
Debug(DBG_MENU_HARDWARE_TE1_CARD_ADVANCED_OPTIONS,
("menu_hardware_te1_card_advanced_options::~menu_hardware_te1_card_advanced_options()\n"));
}
int menu_hardware_te1_card_advanced_options::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
unsigned int option_selected;
char exit_dialog;
int number_of_items, n, rx_slevel_ind;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
sdla_te_cfg_t* te_cfg;
const te_rx_slevel_t *te_rx_slevel_ptr;
sdla_fe_cfg_t *sdla_fe_cfg;
input_box_active_channels act_channels_ip;
input_box inb;
char backtitle[MAX_PATH_LENGTH];
char explanation_text[MAX_PATH_LENGTH];
char initial_text[MAX_PATH_LENGTH];
snprintf(backtitle, MAX_PATH_LENGTH, "WANPIPE Configuration Utility");
Debug(DBG_MENU_HARDWARE_TE1_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;
te_cfg = &linkconf->fe_cfg.cfg.te_cfg;
sdla_fe_cfg = &linkconf->fe_cfg;
Debug(DBG_MENU_HARDWARE_TE1_CARD_ADVANCED_OPTIONS,
("cfr->link_defs->name: %s\n", link_def->name));
if(te_cfg->high_impedance_mode){
te_rx_slevel_ptr = &high_impedance_rx_slevel[0];
}else{
if( linkconf->fe_cfg.media == WAN_MEDIA_T1){
te_rx_slevel_ptr = &t1_normal_mode_rx_slevel[0];
}else{
te_rx_slevel_ptr = &e1_normal_mode_rx_slevel[0];
}
}
/////////////////////////////////////////////////////////////////////////////////////
//find index of line in menue using current rx_slevel
n=0;rx_slevel_ind=0;
while(te_rx_slevel_ptr[n].name != NULL){
if(te_rx_slevel_ptr[n].value == (unsigned int)te_cfg->rx_slevel){
rx_slevel_ind = n;
break;
}
n++;
}
/////////////////////////////////////////////////////////////////////////////////////
if(linkconf->fe_cfg.media == WAN_MEDIA_T1){
number_of_items = 7;
}else if(linkconf->fe_cfg.media == WAN_MEDIA_E1){
number_of_items = 7;
}else if(linkconf->fe_cfg.media == WAN_MEDIA_BRI){
number_of_items = 1;
}else{
ERR_DBG_OUT(("Unknown Media Type!! te_cfg.media: 0x%X\n", linkconf->fe_cfg.media));
return NO;
}
menu_str = "";
if(linkconf->fe_cfg.media == WAN_MEDIA_BRI){
//////////////////////////////////////////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", RM_NETWORK_SYNC);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"External Network Sync--> %s\" ",
(sdla_fe_cfg->network_sync == WANOPT_YES ? "Yes" : "No"));
menu_str += tmp_buff;
number_of_items++;
//////////////////////////////////////////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", BRI_CLOCK_MASTER);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"BRI Master Clock Port--> %s\" ",
(linkconf->fe_cfg.cfg.bri.clock_mode == WANOPT_YES ? "Yes":"No"));
menu_str += tmp_buff;
}else{
//////////////////////////////////////////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE1_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\" ", TE1_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\" ", TE1_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\" ", TE1_CLOCK);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"TE clock mode----> %s\" ",
TECLK_DECODE(&linkconf->fe_cfg));
#if 0
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"TE clock mode----> %s\" ",
(linkconf->fe_cfg.cfg.te_cfg.te_clock == WANOPT_NORMAL_CLK ? "Normal" : "Master"));
#endif
menu_str += tmp_buff;
//////////////////////////////////////////////////////////////////////////////////////
}
//on AFT it must be 'ALL' because channelization is done on per-group-of-channels basis.
//on S514-cards it is configurable here
if(linkconf->card_type == WANOPT_S51X){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE1_ACTIVE_CH);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Act. channels----> %s\" ",
link_def->active_channels_string);
menu_str += tmp_buff;
}
//////////////////////////////////////////////////////////////////////////////////////
if(linkconf->fe_cfg.media == WAN_MEDIA_T1){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", T1_LBO);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"LBO--------------> %s\" ",
LBO_DECODE(&linkconf->fe_cfg));
menu_str += tmp_buff;
}else if(linkconf->fe_cfg.media == WAN_MEDIA_E1){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", E1_LBO);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"LBO--------------> %s\" ",
LBO_DECODE(&linkconf->fe_cfg));
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", E1_SIG_MODE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Signalling Mode--> %s\" ",
(FE_SIG_MODE(&linkconf->fe_cfg) == WAN_TE1_SIG_CCS ? "CCS":"CAS"));
menu_str += tmp_buff;
}
//////////////////////////////////////////////////////////////////////////////////////
if(linkconf->fe_cfg.media != WAN_MEDIA_BRI &&
(linkconf->card_type == WANOPT_AFT || linkconf->card_type == WANOPT_AFT104)){
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;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE_REF_CLOCK);
menu_str += tmp_buff;
if(te_cfg->te_ref_clock == 0){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Reference Clock Port--> %s\" ", "Not Used");
}else{
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Reference Clock Port--> %d\" ",
te_cfg->te_ref_clock);
}
menu_str += tmp_buff;
}
if(linkconf->fe_cfg.media != WAN_MEDIA_BRI){
//////////////////////////////////////////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE_HIGHIMPEDANCE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"High Impedance----------> %s\" ",
(te_cfg->high_impedance_mode == WANOPT_YES ? "YES" : "NO"));
menu_str += tmp_buff;
//////////////////////////////////////////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TE_RX_SLEVEL);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Rx Sensetivity Level----> %s\" ",
te_rx_slevel_ptr[rx_slevel_ind].name);
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,
"T1/E1 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_TE1_CARD_ADVANCED_OPTIONS,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
switch(atoi(get_lxdialog_output_string()))
{
case TE1_MEDIA:
{
menu_te1_select_media te1_select_media(lxdialog_path, cfr);
if(te1_select_media.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TE1_LCODE:
{
menu_te_select_line_decoding te1_select_line_decoding(lxdialog_path, cfr);
if(te1_select_line_decoding.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TE1_FRAME:
{
menu_te_select_framing te1_select_framing(lxdialog_path, cfr);
if(te1_select_framing.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case T1_LBO:
{
menu_t1_lbo t1_lbo(lxdialog_path, cfr);
if(t1_lbo.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case E1_LBO:
{
menu_e1_lbo e1_lbo(lxdialog_path, cfr);
if(e1_lbo.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case E1_SIG_MODE:
{
menu_e1_signalling_mode e1_signalling_mode(lxdialog_path, cfr);
if(e1_signalling_mode.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TE1_CLOCK:
{
menu_te1_clock_mode te1_clock_mode(lxdialog_path, cfr);
if(te1_clock_mode.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TE_HIGHIMPEDANCE:
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s High Impedance mode?",
(te_cfg->high_impedance_mode == WANOPT_NO ? "Enable" : "Disable"));
if(yes_no_question( selection_index,
lxdialog_path,
NO_PROTOCOL_NEEDED,
tmp_buff) == NO){
return NO;
}
switch(*selection_index)
{
case YES_NO_TEXT_BOX_BUTTON_YES:
if(te_cfg->high_impedance_mode == WANOPT_NO){
//was disabled - enable
te_cfg->high_impedance_mode = WANOPT_YES;
}else{
//was enabled - disable
te_cfg->high_impedance_mode = WANOPT_NO;
}
break;
}
break;
#if 1
case TE_RX_SLEVEL:
{
menu_rx_slevel rx_slevel(lxdialog_path, cfr);
if(rx_slevel.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
#endif
case RM_NETWORK_SYNC:
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s External Network Sync?",
(sdla_fe_cfg->network_sync == WANOPT_NO ? "Enable" : "Disable"));
if(yes_no_question( selection_index,
lxdialog_path,
NO_PROTOCOL_NEEDED,
tmp_buff) == NO){
return NO;
}
switch(*selection_index)
{
case YES_NO_TEXT_BOX_BUTTON_YES:
if(sdla_fe_cfg->network_sync == WANOPT_NO){
//was disabled - enable
sdla_fe_cfg->network_sync = WANOPT_YES;
}else{
//was enabled - disable
sdla_fe_cfg->network_sync = WANOPT_NO;
}
break;
}
break;
case BRI_CLOCK_MASTER:
if(linkconf->fe_cfg.cfg.bri.clock_mode == WANOPT_YES){
//It is currently Master, ask if user wants to change Normal mode
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to use this line in Normal clock mode?");
}else{
//It is currently in Normal mode, ask if user wants to change Master mode
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to use this line in Normal clock mode?");
}
if(yes_no_question( selection_index,
lxdialog_path,
NO_PROTOCOL_NEEDED,
tmp_buff) == NO){
return NO;
}
switch(*selection_index)
{
case YES_NO_TEXT_BOX_BUTTON_YES:
if(linkconf->fe_cfg.cfg.bri.clock_mode == WANOPT_NO){
//was Normal - change to Master
linkconf->fe_cfg.cfg.bri.clock_mode = WANOPT_YES;
}else{
//was Master - change to Normal
linkconf->fe_cfg.cfg.bri.clock_mode = WANOPT_NO;
}
break;
}
break;
case TE_REF_CLOCK:
{
unsigned int ref_clock_port;
show_ref_clock_input_box:
snprintf(explanation_text, MAX_PATH_LENGTH, "Please specify Reference Clock Port (0 to disable).\
If this option is used, TE1 Clock MUST be set to Master!");
snprintf(initial_text, MAX_PATH_LENGTH, "%d", te_cfg->te_ref_clock);
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:
ref_clock_port = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
if(ref_clock_port < 0 || ref_clock_port > 4){
tb.show_error_message(lxdialog_path, WANCONFIG_AFT, "Invalid Reference Clock Port!");
goto show_ref_clock_input_box;
}else{
te_cfg->te_ref_clock = ref_clock_port;
}
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, WANCONFIG_AFT, te1_options_help_str);
goto show_ref_clock_input_box;
}//switch(*selection_index)
}
break;
case TE1_ACTIVE_CH:
Debug(DBG_MENU_HARDWARE_TE1_CARD_ADVANCED_OPTIONS,
("cfr->link_defs->linkconf->config_id: %d\n", cfr->link_defs->linkconf->config_id));
if(cfr->link_defs->linkconf->config_id == WANCONFIG_AFT){
//must be alwayse ALL channels
break;
}
if(act_channels_ip.show( lxdialog_path,
linkconf->config_id,
link_def->active_channels_string,//initial text
selection_index,
linkconf->fe_cfg.media) == NO){
rc = NO;
}else{
switch(*selection_index)
{
case INPUT_BOX_BUTTON_OK:
snprintf(link_def->active_channels_string, MAX_LEN_OF_ACTIVE_CHANNELS_STRING,
act_channels_ip.get_lxdialog_output_string());
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, WANCONFIG_AFT, active_te1_channels_help_str);
break;
}
goto again;
}
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:
ERR_DBG_OUT(("Invalid option selected for editing!! selection: %s\n",
get_lxdialog_output_string()));
rc = NO;
exit_dialog = YES;
}
break;
case MENU_BOX_BUTTON_HELP:
if(linkconf->fe_cfg.media == WAN_MEDIA_BRI){
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, bri_options_help_str);
}else{
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, te1_options_help_str);
}
break;
case MENU_BOX_BUTTON_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
//////////////////////////////////////////////////////////////////////////////////////////////
// ANALOG
//////////////////////////////////////////////////////////////////////////////////////////////
#define DBG_MENU_HARDWARE_ANALOG_CARD_ADVANCED_OPTIONS 1
enum {
RM_BATTTHRESH=1,
RM_BATTDEBOUNCE,
};
menu_hardware_analog_card_advanced_options::
menu_hardware_analog_card_advanced_options( IN char * lxdialog_path,
IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_HARDWARE_ANALOG_CARD_ADVANCED_OPTIONS,
("menu_hardware_analog_card_advanced_options::menu_hardware_analog_card_advanced_options()\n"));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_hardware_analog_card_advanced_options::~menu_hardware_analog_card_advanced_options()
{
Debug(DBG_MENU_HARDWARE_ANALOG_CARD_ADVANCED_OPTIONS,
("menu_hardware_analog_card_advanced_options::~menu_hardware_analog_card_advanced_options()\n"));
}
int menu_hardware_analog_card_advanced_options::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
unsigned int option_selected;
char exit_dialog;
int number_of_items=0;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
sdla_remora_cfg_t *remora_cfg;
sdla_fe_cfg_t *sdla_fe_cfg;
input_box_active_channels act_channels_ip;
input_box inb;
char backtitle[MAX_PATH_LENGTH];
char explanation_text[MAX_PATH_LENGTH];
char initial_text[MAX_PATH_LENGTH];
snprintf(backtitle, MAX_PATH_LENGTH, "WANPIPE Configuration Utility");
Debug(DBG_MENU_HARDWARE_ANALOG_CARD_ADVANCED_OPTIONS, ("menu_net_interface_setup::%s()\n", __FUNCTION__));
again:
rc = YES;
option_selected = 0;
exit_dialog = NO;
number_of_items=0;
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
sdla_fe_cfg = &linkconf->fe_cfg;
remora_cfg = &linkconf->fe_cfg.cfg.remora;
Debug(DBG_MENU_HARDWARE_ANALOG_CARD_ADVANCED_OPTIONS,
("cfr->link_defs->name: %s\n", link_def->name));
menu_str = "";
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", RM_BATTTHRESH);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Battery Threshold--> %d\" ",
remora_cfg->battthresh);
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", RM_BATTDEBOUNCE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Battery Debounce---> %d\" ",
remora_cfg->battdebounce);
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", RM_NETWORK_SYNC);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"External Network Sync--> %s\" ",
(sdla_fe_cfg->network_sync == WANOPT_YES ? "Yes" : "No"));
menu_str += tmp_buff;
number_of_items++;
//////////////////////////////////////////////////////////////////////////////////////
//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,
"ANALOG 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_ANALOG_CARD_ADVANCED_OPTIONS,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
switch(atoi(get_lxdialog_output_string()))
{
case RM_BATTTHRESH:
unsigned int battery_threshold;
show_RM_BATTTHRESH_input_box:
snprintf(explanation_text, MAX_PATH_LENGTH, "Please specify Battery Threshold value (minimum is 1).");
snprintf(initial_text, MAX_PATH_LENGTH, "%d", remora_cfg->battthresh);
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:
battery_threshold = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
if(battery_threshold < 1){
tb.show_error_message(lxdialog_path, WANCONFIG_AFT, "Invalid Battery Threshold!");
goto show_RM_BATTTHRESH_input_box;
}else{
remora_cfg->battthresh = battery_threshold;
}
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, WANCONFIG_AFT, option_not_implemented_yet_help_str);
goto show_RM_BATTTHRESH_input_box;
}//switch(*selection_index)
break;
case RM_BATTDEBOUNCE:
unsigned int battdebounce;
show_RM_BATTDEBOUNCE_input_box:
snprintf(explanation_text, MAX_PATH_LENGTH, "Please specify Battery Debounce value (minimum is 1).");
snprintf(initial_text, MAX_PATH_LENGTH, "%d", remora_cfg->battdebounce);
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:
battdebounce = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
if(battdebounce < 1){
tb.show_error_message(lxdialog_path, WANCONFIG_AFT, "Invalid Battery Debounce!");
goto show_RM_BATTDEBOUNCE_input_box;
}else{
remora_cfg->battdebounce = battdebounce;
}
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, WANCONFIG_AFT, option_not_implemented_yet_help_str);
goto show_RM_BATTDEBOUNCE_input_box;
}//switch(*selection_index)
break;
case RM_NETWORK_SYNC:
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s External Network Sync?",
(sdla_fe_cfg->network_sync == WANOPT_NO ? "Enable" : "Disable"));
if(yes_no_question( selection_index,
lxdialog_path,
NO_PROTOCOL_NEEDED,
tmp_buff) == NO){
return NO;
}
switch(*selection_index)
{
case YES_NO_TEXT_BOX_BUTTON_YES:
if(sdla_fe_cfg->network_sync == WANOPT_NO){
//was disabled - enable
sdla_fe_cfg->network_sync = WANOPT_YES;
}else{
//was enabled - disable
sdla_fe_cfg->network_sync = WANOPT_NO;
}
break;
}
break;
default:
ERR_DBG_OUT(("Invalid option selected for editing!! selection: %s\n",
get_lxdialog_output_string()));
rc = NO;
exit_dialog = YES;
}//switch(atoi(get_lxdialog_output_string()))
break;
case MENU_BOX_BUTTON_HELP:
if(linkconf->fe_cfg.media == WAN_MEDIA_BRI){
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, bri_options_help_str);
}else{
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, te1_options_help_str);
}
break;
case MENU_BOX_BUTTON_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
#if 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//RX SLEVEL
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define DBG_MENU_RX_SLEVEL 1
menu_rx_slevel::menu_rx_slevel(IN char * lxdialog_path, IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_RX_SLEVEL, ("menu_rx_slevel::%s()\n", __FUNCTION__));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_rx_slevel::~menu_rx_slevel()
{
Debug(DBG_MENU_RX_SLEVEL, ("menu_rx_slevel::~%s()\n", __FUNCTION__));
}
int menu_rx_slevel::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
char exit_dialog;
int number_of_items, n;
unsigned char media;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
const te_rx_slevel_t *te_rx_slevel_ptr;
Debug(DBG_MENU_RX_SLEVEL, ("menu_rx_slevel::%s()\n", __FUNCTION__));
again:
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
Debug(DBG_MENU_RX_SLEVEL, ("cfr->link_defs->name: %s\n", link_def->name));
rc = YES;
exit_dialog = NO;
media = linkconf->fe_cfg.media;
if(linkconf->fe_cfg.cfg.te_cfg.high_impedance_mode){
te_rx_slevel_ptr = &high_impedance_rx_slevel[0];
}else{
if( media == WAN_MEDIA_T1){
te_rx_slevel_ptr = &t1_normal_mode_rx_slevel[0];
}else{
te_rx_slevel_ptr = &e1_normal_mode_rx_slevel[0];
}
}
Debug(DBG_MENU_RX_SLEVEL, ("linkconf->card_type: DEC:%d, HEX: 0x%X\n",
linkconf->card_type, linkconf->card_type));
number_of_items = 0;
menu_str = " ";
/*
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WAN_E1_75);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"75 OH\" ");
menu_str += tmp_buff;
*/
//add the lines to the menue
n=0;
while(te_rx_slevel_ptr[n].name != NULL){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", te_rx_slevel_ptr[n].value);
menu_str += (char*)tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%s\" ", te_rx_slevel_ptr[n].name);
menu_str += tmp_buff;
number_of_items++;
n++;
}
//////////////////////////////////////////////////////////////////////////////////////
//create the explanation text for the menu
snprintf(tmp_buff, MAX_PATH_LENGTH,
"\n------------------------------------------\
\nSelect Receiver Sensitivity for Wan Device: %s", link_def->name);
if(set_configuration( YES,//indicates to call V2 of the function
MENU_BOX_BACK,//MENU_BOX_SELECT,
lxdialog_path,
"SELECT RX SENSETIVITY LEVEL",
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_RX_SLEVEL,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
linkconf->fe_cfg.cfg.te_cfg.rx_slevel = atoi(get_lxdialog_output_string());
exit_dialog = YES;
break;
case MENU_BOX_BUTTON_HELP:
switch(atoi(get_lxdialog_output_string()))
{
default:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED,
option_not_implemented_yet_help_str);
break;
}
break;
case MENU_BOX_BUTTON_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
#endif