wanpipe/util/wancfg/menu_hardware_setup.cpp

1691 lines
49 KiB
C++

/***************************************************************************
menu_hardware_setup.cpp - description
-------------------
begin : Tue Mar 30 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_setup.h"
#include "text_box_help.h"
#include "input_box.h"
#include "text_box_yes_no.h"
#include "menu_hardware_card_type.h"
#include "menu_hardware_serial_card_advanced_options.h"
#include "menu_hardware_te1_card_advanced_options.h"
#include "menu_hardware_te3_card_advanced_options.h"
#include "menu_hardware_select_comms_port.h"
#include "menu_te1_select_media.h"
#include "menu_te3_select_media.h"
#include "menu_hardware_serial_select_medium.h"
#include "menu_s508_io_port_select.h"
#include "menu_s508_irq_select.h"
#include "menu_s508_memory_addr.h"
#include "menu_list_existing_wanpipes.h"
#include "menu_aft_logical_channels_list.h"
#include "menu_advanced_pci_configuration.h"
#include "menu_adsl_encapsulation.h"
#include "menu_adsl_advanced_cfg.h"
#include "menu_tdmv_law.h"
#define DBG_MENU_HARDWARE_SETUP 1
extern char* adapter_type_help_str;
extern char* cpu_number_help_str;
extern char* media_type_help_str;
#define MIN_PCI_BUS_SLOT 0
#define MAX_PCI_BUS_SLOT 255
///////////////////////////////////////////////////////////
char* te1_advanced_cfg_help_str =
"This option allows to set following T1/E1 parameters:\n"
" -Line decoding\n"
" -Framing\n"
" -TE clock mode\n"
" -Act. channels\n"
" -LBO (T1 only)\n";
char* comms_port_help_str =
"COMMUNICATION PORT\n"
"\n"
"Currently only CHDLC and HDLC Streaming protocols can use\n"
"both ports on a S508 or S514 PCI card at the same time.\n"
"Thus, two physical links can be hooked up to\n"
"a single card using the above protocols.\n"
"\n"
"Availabe options:\n"
"\n"
"PRI: Primary High speed port\n"
" S508: up to 2Mbps\n"
" S514: up to 4Mbps\n"
"\n"
"SEC: Secondary Low speed port\n"
" S508: up to 256Kbps\n"
" S514: up to 512Kbps\n"
"\n"
"Default: PRI\n";
char* s508_io_port_help_str =
"S508 IO PORT\n"
"\n"
"Adapter's I/O port address. Make sure there is no\n"
"conflict with other devices on the system in\n"
"/proc/ioports.\n"
"IO port address values are set by\n"
"the jumpers on the S508 board.\n"
"Refer to the user manual for the jumper setup.\n";
char* s508_irq_help_str =
"S508 IRQ\n"
"\n"
"Adapters interrupt request level. Make sure there is no\n"
"conflict with other devices on the system in\n"
"/proc/interrupts.\n"
"IRQ used by S508 is software set and\n"
"NO jumper reconfiguration is needed.\n";
char* s508_shared_memory_addr =
"MEMORY ADDRESS\n"
"\n"
"Address of the adapter shared memory window.\n"
"If set to Auto the memory address is determined\n"
"automatically.\n"
"\n"
"Default: Auto\n";
char* serial_physical_interface_help_str =
"Serial Line Physical Interface\n"
"\n"
"Physical interface type. Available options are:\n"
" RS232 RS-232C interface (V.10)\n"
" V35 V.35 interface (X.21/EIA530/RS-422/V.11)\n";
char* serial_advanced_configuration_help_str =
"Advanced Serial Line Configuration\n"
"----------------------------------\n"
"CLOCKING\n"
"\n"
"Source of the adapter transmit and receive clock\n"
"signals. Available options are:\n"
"\n"
"External: Clock is provided externally (e.g. by\n"
"the modem or CSU/DSU). Use this for the\n"
"FT1 (S5143) boards too.\n"
"\n"
"Internal: Clock is generated on the adapter.\n"
"When there are two Sangoma Cards back\n"
"to back set clocking to Internal on one\n"
"of the cards.\n"
"Note: Jumpers must be set for internal or external\n"
"clocking for RS232 communication on:\n"
"s508 board: RS232 SEC port\n"
"s514 board: RS232 PRI and SEC port\n"
"\n"
"BAUDRATE\n"
"\n"
"Data transfer rate in bits per second. These values\n"
"are meaningful if internal clocking is selected\n"
"(like in a back-to-back testing configuration).\n";
///////////////////////////////////////////////////////////
enum HW_SETUP_OPTIONS {
EMPTY_LINE=1,
CARD_TYPE,
S514_SERIAL_INTERFACE,
S514_TE1_INTERFACE,
AFT_TE3_INTERFACE,
COMMS_PORT,
S514_SERIAL_ADVANCED,
S514_TE1_ADVANCED,
AFT_TE1_ADVANCED,
AFT_TE3_ADVANCED,
ADSL_ENCAPSULATION_MODE,
ADSL_ATM_AUTOCFG,
ADSL_VCI,
ADSL_VPI,
ADSL_WATCHDOG,
ADSL_ADVANCED,
S508_IO_PORT,
S508_MEMORY,
S508_IRQ,
TIMESLOT_GROUP_CFG,
ADVANCED_PCI_CFG,
TDMV_LAW_SELECT,
TDMV_OPERMODE,
AFT_ANALOG_ADVANCED,
AFT_SERIAL_CONNECTION_TYPE,
AFT_SERIAL_LINE_CODING,
AFT_SERIAL_LINE_IDLE
};
menu_hardware_setup::menu_hardware_setup( IN char * lxdialog_path,
IN conf_file_reader* cfr)
{
Debug(DBG_MENU_HARDWARE_SETUP, ("menu_hardware_setup::menu_hardware_setup()\n"));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = cfr;
}
menu_hardware_setup::~menu_hardware_setup()
{
Debug(DBG_MENU_HARDWARE_SETUP, ("menu_hardware_setup::~menu_hardware_setup()\n"));
}
int menu_hardware_setup::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;
int old_card_type;
int new_card_type;
//help text box
text_box tb;
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");
link_def_t * link_def;
wandev_conf_t *linkconf;
wan_adsl_conf_t* adsl_cfg;
sdla_fe_cfg_t* fe_cfg;
again:
number_of_items = 0;
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
adsl_cfg = &linkconf->u.adsl;
fe_cfg = &linkconf->fe_cfg;
Debug(DBG_MENU_HARDWARE_SETUP, ("menu_hardware_setup::run(): cfr->link_defs->name: %s\n", link_def->name));
rc = YES;
option_selected = 0;
exit_dialog = NO;
menu_str = " ";
////////////////////////////////////////////////
//depending on 'current hardware' display it's settings
//e.g.: CHANNELS is irrelevant for S5141
// V.35 is irrelevant for S5147
switch(linkconf->card_type)
{
case WANOPT_S51X:
if(get_S514_card_version_string(link_def->card_version) == NULL){
ERR_DBG_OUT(("Invalid S514 Card Version!!"));
rc = NO;
goto cleanup;
}
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", CARD_TYPE);
menu_str = tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Card Type-------> %s\" ",
get_S514_card_version_string(link_def->card_version));
menu_str += tmp_buff;
switch(link_def->card_version)
{
case S5141_ADPTR_1_CPU_SERIAL:
number_of_items = 2;
form_s514_serial_options_menu(menu_str, number_of_items);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_SERIAL_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
form_pci_card_locations_options_menu(menu_str, number_of_items);
break;
case S5143_ADPTR_1_CPU_FT1:
//no options
number_of_items = 1;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
form_pci_card_locations_options_menu(menu_str, number_of_items);
break;
case S5144_ADPTR_1_CPU_T1E1:
number_of_items = 2;
form_s514_TE1_options_menu(menu_str, number_of_items);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_TE1_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
form_pci_card_locations_options_menu(menu_str, number_of_items);
break;
case S5145_ADPTR_1_CPU_56K:
//no options
number_of_items = 1;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
form_pci_card_locations_options_menu(menu_str, number_of_items);
break;
}//switch(link_def->card_version)
break;
case WANOPT_AFT:
number_of_items = 2;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", CARD_TYPE);
menu_str = tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Card Type-------> %s\" ",
get_card_type_string(linkconf->card_type, link_def->card_version));
menu_str += tmp_buff;
switch(link_def->card_version)
{
case A101_ADPTR_1TE1://WAN_MEDIA_T1:
case A104_ADPTR_4TE1://WAN_MEDIA_T1:
//AFT using the same code for TE1 configuration
form_s514_TE1_options_menu(menu_str, number_of_items);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_TE1_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
//timeslot group configuration
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TIMESLOT_GROUP_CFG);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Advanced %s Configuration\" ", TIME_SLOT_GROUPS_STR);
menu_str += tmp_buff;
number_of_items++;
break;
case A200_ADPTR_ANALOG:
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TDMV_LAW_SELECT);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"TDMV LAW--------> %s\" ",
(fe_cfg->tdmv_law == WAN_TDMV_MULAW ? "MuLaw" : "ALaw"));
menu_str += tmp_buff;
number_of_items++;
//for backwards compatibility with older files, check TDMV_OPERMODE was read
//or initiaized when card type was selected
if(fe_cfg->cfg.remora.opermode_name[0] != 0){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TDMV_OPERMODE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"TDMV Operational Mode-> %s\" ",
fe_cfg->cfg.remora.opermode_name);
menu_str += tmp_buff;
number_of_items++;
}
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_ANALOG_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
number_of_items++;
//timeslot group configuration
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", TIMESLOT_GROUP_CFG);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Advanced %s Configuration\" ", TIME_SLOT_GROUPS_STR);
menu_str += tmp_buff;
number_of_items++;
break;
case A300_ADPTR_U_1TE3://WAN_MEDIA_DS3:
form_TE3_options_menu(menu_str, number_of_items);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_TE3_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
break;
case AFT_ADPTR_ISDN://WAN_MEDIA_BRI:
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_TE1_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
break;
case AFT_ADPTR_2SERIAL_V35X21:
form_AFT_Serial_options_menu(menu_str, number_of_items);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_SERIAL_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
break;
}
form_pci_card_locations_options_menu(menu_str, number_of_items);
break;
case WANOPT_ADSL:
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", CARD_TYPE);
menu_str = tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Card Type-------> %s\" ",
get_card_type_string(linkconf->card_type, link_def->card_version));
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_ENCAPSULATION_MODE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"EncapMode-> %s\" ",
ADSL_ENCAPSULATION_DECODE(adsl_cfg->EncapMode));
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_ATM_AUTOCFG);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"ATM_AUTOCFG-> %s\" ",
(adsl_cfg->atm_autocfg == WANOPT_NO ? "NO" : "YES"));
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_VCI);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"VCI---------> %u\" ",
adsl_cfg->Vci);
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_VPI);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"VPI---------> %u\" ",
adsl_cfg->Vpi);
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_WATCHDOG);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"ADSL_WATCHDOG-> %s\" ",
(adsl_cfg->atm_watchdog == WANOPT_NO ? "NO" : "YES"));
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", EMPTY_LINE);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \" \" ");
menu_str += tmp_buff;
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADSL_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced ADSL Configuration\" ";
number_of_items++;
form_pci_card_locations_options_menu(menu_str, number_of_items);
number_of_items++;
break;
case WANOPT_S50X:
number_of_items = 5;
menu_str.sprintf(" \"%d\" ", CARD_TYPE);
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Card Type-------> %s\" ",
get_card_type_string(linkconf->card_type, link_def->card_version));
menu_str += tmp_buff;
/////////////////////
//initialize for new configuration
if(linkconf->ioport == 0){
linkconf->ioport = 0x360;
}
if(linkconf->irq == 0){
linkconf->irq = 7;
}
/////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", COMMS_PORT);
menu_str+= tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Comms Port------> %s\" ",
(linkconf->comm_port == 0 ? "Primary" : "Secondary"));
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S508_IO_PORT);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"IOPORT----------> 0x%X\" ", linkconf->ioport);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S508_IRQ);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"IRQ-------------> %d\" ", linkconf->irq);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S508_MEMORY);
menu_str += tmp_buff;
if(linkconf->maddr == 0x00){
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Memory Addr-----> Auto\" ");
}else{
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Memory Addr-----> 0x%lX\" ", linkconf->maddr);
}
menu_str += tmp_buff;
form_s514_serial_options_menu(menu_str, number_of_items);
number_of_items++;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_SERIAL_ADVANCED);
menu_str += tmp_buff;
menu_str += " \"Advanced Physical Medium Configuration\" ";
break;
case NOT_SET:
//It is a new configuration.
//Do not display "Undefined" twice - go directly to hardware selection.
goto display_hardware_selection_label;
}//switch(linkconf->card_type)
Debug(DBG_MENU_HARDWARE_SETUP, ("number_of_items: %d\n", number_of_items));
//////////////////////////////////////////////////////////////////////////////////////
//create the explanation text for the menu
snprintf(tmp_buff, MAX_PATH_LENGTH,
"\n------------------------------------------\
\nHardware 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,
"HARDWARE CONFIGURATION",
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_SETUP,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
switch(atoi(get_lxdialog_output_string()))
{
case EMPTY_LINE:
//do nothing
break;
case CARD_TYPE:
case NOT_SET:
display_hardware_selection_label:
{
old_card_type = new_card_type = linkconf->card_type;
menu_hardware_card_type hardware_card_type(lxdialog_path, cfr);
if(hardware_card_type.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}else{
new_card_type = linkconf->card_type;
Debug(DBG_MENU_HARDWARE_SETUP,
("hardware_setup: old_card_type: %d, new_card_type: %d\n", old_card_type, new_card_type));
if(old_card_type != new_card_type){
//if card type change reset everything to defaults
//delete list of logical channels
if(cfr->main_obj_list != NULL){
delete cfr->main_obj_list;
cfr->main_obj_list = NULL;
}
//create the new list
cfr->main_obj_list = new objects_list();
//insert one logical channel
switch(new_card_type)
{
case WANOPT_S50X:
case WANOPT_S51X:
adjust_number_of_logical_channels_in_list(WANCONFIG_GENERIC, cfr->main_obj_list,
cfr, 1);
break;
case WANOPT_AFT:
adjust_number_of_logical_channels_in_list(WANCONFIG_AFT, cfr->main_obj_list,
cfr, 1);
break;
case WANOPT_ADSL:
adjust_number_of_logical_channels_in_list(WANCONFIG_ADSL, cfr->main_obj_list,
cfr, 1);
break;
default:
ERR_DBG_OUT(("Invalid card type 0x%X!!\n", linkconf->card_type));
}
}else{
Debug(DBG_MENU_HARDWARE_SETUP, ("card type unchanged\n"));
if(linkconf->card_type == NOT_SET){
//user did NOT select any card type, but wants to exit. exit the dialog.
rc = YES;
exit_dialog = YES;
}
}
}
}
break;
case S514_TE1_INTERFACE:
{
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 AFT_TE3_INTERFACE:
{
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 COMMS_PORT://Pri/Sec
{
menu_hardware_select_comms_port select_comms_port(lxdialog_path, cfr);
if(select_comms_port.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S514_SERIAL_INTERFACE://V.35/RS232
{
menu_hardware_serial_select_medium serial_select_medium(lxdialog_path, cfr);
if(serial_select_medium.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S514_SERIAL_ADVANCED://Clock + bit rate
{
menu_hardware_serial_card_advanced_options hardware_serial_card_advanced_options(
lxdialog_path, cfr);
if(hardware_serial_card_advanced_options.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S514_TE1_ADVANCED:
case AFT_TE1_ADVANCED:
{
menu_hardware_te1_card_advanced_options hardware_te1_card_advanced_options(
lxdialog_path, cfr);
if(hardware_te1_card_advanced_options.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case AFT_ANALOG_ADVANCED:
{
menu_hardware_analog_card_advanced_options hardware_analog_card_advanced_options(
lxdialog_path, cfr);
if(hardware_analog_card_advanced_options.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case AFT_TE3_ADVANCED:
{
menu_hardware_te3_card_advanced_options hardware_te3_card_advanced_options(
lxdialog_path, cfr);
if(hardware_te3_card_advanced_options.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S508_IO_PORT:
{
menu_s508_io_port_select s508_io_port_select(lxdialog_path, cfr);
if(s508_io_port_select.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S508_IRQ:
{
menu_s508_irq_select s508_irq_select(lxdialog_path, cfr);
if(s508_irq_select.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case S508_MEMORY:
{
menu_s508_memory_addr s508_memory_addr(lxdialog_path, cfr);
if(s508_memory_addr.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TIMESLOT_GROUP_CFG:
//for the AFT card:
//1. get number of logical channels
//2. for each log. cha-l get the timeslots it will use
//3. for each log. cha-l get the protocol
{
menu_aft_logical_channels_list aft_logical_channels_list(lxdialog_path, cfr);
if(aft_logical_channels_list.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case ADVANCED_PCI_CFG:
{
menu_advanced_pci_configuration advanced_pci_configuration(lxdialog_path, cfr);
if(advanced_pci_configuration.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case ADSL_ENCAPSULATION_MODE:
{
int old_encapsulation = adsl_cfg->EncapMode;
menu_adsl_encapsulation adsl_encapsulation(lxdialog_path, adsl_cfg);
if(adsl_encapsulation.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
if(old_encapsulation != adsl_cfg->EncapMode){
//change the 'sub_config_id' accordingly
switch(adsl_cfg->EncapMode)
{
case RFC_MODE_BRIDGED_ETH_LLC:
case RFC_MODE_BRIDGED_ETH_VC:
link_def->sub_config_id = PROTOCOL_ETHERNET;
break;
case RFC_MODE_ROUTED_IP_LLC:
case RFC_MODE_ROUTED_IP_VC:
case RFC_MODE_RFC1577_ENCAP:
link_def->sub_config_id = PROTOCOL_IP;
break;
case RFC_MODE_PPP_LLC:
case RFC_MODE_PPP_VC:
link_def->sub_config_id = WANCONFIG_MPPP;
break;
}//switch(adsl_cfg->EncapMode)
}
}
break;
case ADSL_ATM_AUTOCFG:
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s ADSL autoconfiguration?",
(adsl_cfg->atm_autocfg == WANOPT_NO ? "Enable" : "Disable"));
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(adsl_cfg->atm_autocfg == WANOPT_NO){
//disabled, user wants to enable
adsl_cfg->atm_autocfg = WANOPT_YES;
}else{
adsl_cfg->atm_autocfg = WANOPT_NO;
}
break;
case YES_NO_TEXT_BOX_BUTTON_NO:
//don't do anything
break;
}
break;
case ADSL_VCI:
show_vci_input_box:
snprintf(explanation_text, MAX_PATH_LENGTH, "Enter Vci number");
snprintf(initial_text, MAX_PATH_LENGTH, "%d", adsl_cfg->Vci);
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:
adsl_cfg->Vci = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
goto show_vci_input_box;
}//switch(*selection_index)
break;
case ADSL_VPI:
show_vpi_input_box:
snprintf(explanation_text, MAX_PATH_LENGTH, "Enter Vpi number");
snprintf(initial_text, MAX_PATH_LENGTH, "%d", adsl_cfg->Vpi);
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:
adsl_cfg->Vpi = atoi(remove_spaces_in_int_string(inb.get_lxdialog_output_string()));
break;
case INPUT_BOX_BUTTON_HELP:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
goto show_vpi_input_box;
}//switch(*selection_index)
break;
case ADSL_WATCHDOG:
snprintf(tmp_buff, MAX_PATH_LENGTH, "Do you want to %s ADSL watchdog?",
(adsl_cfg->atm_watchdog == WANOPT_NO ? "Enable" : "Disable"));
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(adsl_cfg->atm_watchdog == WANOPT_NO){
//disabled, user wants to enable
adsl_cfg->atm_watchdog = WANOPT_YES;
}else{
adsl_cfg->atm_watchdog = WANOPT_NO;
}
break;
case YES_NO_TEXT_BOX_BUTTON_NO:
//don't do anything
break;
}
break;
case ADSL_ADVANCED:
{
menu_adsl_advanced_cfg adsl_advanced_cfg(lxdialog_path, adsl_cfg);
if(adsl_advanced_cfg.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TDMV_LAW_SELECT:
{
menu_tdmv_law tdmv_law(lxdialog_path, cfr);
if(tdmv_law.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case TDMV_OPERMODE:
{
menu_tdmv_opermode tdmv_opermode(lxdialog_path, cfr);
if(tdmv_opermode.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case AFT_SERIAL_CONNECTION_TYPE:
{
menu_hardware_serial_connection_type hardware_serial_connection_type(
lxdialog_path, cfr);
if(hardware_serial_connection_type.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case AFT_SERIAL_LINE_CODING:
{
menu_hardware_serial_line_coding hardware_serial_line_coding(
lxdialog_path, cfr);
if(hardware_serial_line_coding.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
break;
case AFT_SERIAL_LINE_IDLE:
{
menu_hardware_serial_line_idle hardware_serial_line_idle(
lxdialog_path, cfr);
if(hardware_serial_line_idle.run(selection_index) == NO){
rc = NO;
exit_dialog = YES;
}
}
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:
switch(atoi(get_lxdialog_output_string()))
{
case CARD_TYPE:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, adapter_type_help_str);
break;
case S514_TE1_ADVANCED:
case AFT_TE1_ADVANCED:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, te1_advanced_cfg_help_str);
break;
case S514_TE1_INTERFACE:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, media_type_help_str);
break;
case COMMS_PORT:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, comms_port_help_str);
break;
case S508_IO_PORT:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, s508_io_port_help_str);
break;
case S508_IRQ:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, s508_irq_help_str);
break;
case S508_MEMORY:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, s508_shared_memory_addr);
break;
case S514_SERIAL_INTERFACE:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, serial_physical_interface_help_str);
break;
case S514_SERIAL_ADVANCED:
tb.show_help_message( lxdialog_path, NO_PROTOCOL_NEEDED,
serial_advanced_configuration_help_str);
break;
case ADSL_ADVANCED:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
break;
default:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED, option_not_implemented_yet_help_str);
}
break;
case MENU_BOX_BUTTON_EXIT:
rc = YES;
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
void menu_hardware_setup::form_s514_serial_options_menu(string& str, int& number_of_items)
{
char tmp_buff[MAX_PATH_LENGTH];
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SETUP,
("menu_net_interface_setup::form_s514_serial_options_menu()\n"));
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_SERIAL_INTERFACE);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Physical Medium-> %s\" ",
//snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Interface------> %s\" ",
(linkconf->electrical_interface == WANOPT_V35 ? "V.35" : "RS232"));
str += tmp_buff;
number_of_items++;
}
void menu_hardware_setup::form_AFT_Serial_options_menu(string& str, int& number_of_items)
{
char tmp_buff[MAX_PATH_LENGTH];
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SETUP, ("menu_net_interface_setup::%s()\n", __FUNCTION__));
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
//////////////////////////////////////////////////////////////////////////////////////////
//Serial connection type
//Permanent - CTS/RTS are always up
//Switched - CTS/RTS are only brought up tx
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_SERIAL_CONNECTION_TYPE);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Connection Type-> %s\" ",
(linkconf->connection == WANOPT_PERMANENT ? "Permanent" : (linkconf->connection == WANOPT_SWITCHED?"Switched":"Unknown!")));
str += tmp_buff;
number_of_items++;
//////////////////////////////////////////////////////////////////////////////////////////
//Serial LineCoding: NRZ or NRZI
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_SERIAL_LINE_CODING);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Line Coding-----> %s\" ",
(linkconf->line_coding == WANOPT_NRZ ? "NRZ" : (linkconf->line_coding == WANOPT_NRZI ? "NRZI":"Unknown!")));
str += tmp_buff;
number_of_items++;
//////////////////////////////////////////////////////////////////////////////////////////
//Serial LineIdle:
//Flag - use flags to idle on the line
//Mark - use mark to idle on the line
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_SERIAL_LINE_IDLE);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Line Idle-------> %s\" ",
(linkconf->line_idle == WANOPT_IDLE_FLAG ? "Flag" : (linkconf->line_idle == WANOPT_IDLE_MARK ? "Mark":"Unknown!")));
str += tmp_buff;
number_of_items++;
//////////////////////////////////////////////////////////////////////////////////////////
}
void menu_hardware_setup::form_s514_TE1_options_menu(string& str, int& number_of_items)
{
char tmp_buff[MAX_PATH_LENGTH];
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SETUP,
("menu_net_interface_setup::form_s514_TE1_options_menu()\n"));
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", S514_TE1_INTERFACE);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Physical Medium-> %s\" ",
//snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Media-----------> %s\" ",
MEDIA_DECODE(&linkconf->fe_cfg));
str += tmp_buff;
number_of_items++;
}
void menu_hardware_setup::form_TE3_options_menu(string& str, int& number_of_items)
{
char tmp_buff[MAX_PATH_LENGTH];
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SETUP,
("menu_net_interface_setup::form_TE3_options_menu()\n"));
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", AFT_TE3_INTERFACE);
str += tmp_buff;
Debug(DBG_MENU_HARDWARE_SETUP, ("linkconf->fe_cfg.media: 0x%X\n",
linkconf->fe_cfg.media));
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Physical Medium-> %s\" ",
(linkconf->fe_cfg.media == WAN_MEDIA_DS3 ? "T3" : "E3"));
str += tmp_buff;
number_of_items++;
}
void menu_hardware_setup::form_pci_card_locations_options_menu(string& str, int& number_of_items)
{
char tmp_buff[MAX_PATH_LENGTH];
Debug(DBG_MENU_HARDWARE_SETUP,
("menu_net_interface_setup::form_pci_card_locations_options_menu()\n"));
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", ADVANCED_PCI_CFG);
str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Advanced PCI Configuration\" ");
str += tmp_buff;
number_of_items++;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum SERIAL_CONNECTION_TYPE{
PERMANENT,
SWITCHED
};
#define DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE 1
menu_hardware_serial_connection_type::
menu_hardware_serial_connection_type(IN char * lxdialog_path,
IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE,
("menu_hardware_serial_connection_type::%s()\n", __FUNCTION__));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_hardware_serial_connection_type::~menu_hardware_serial_connection_type()
{
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE,
("menu_hardware_serial_connection_type::%s()\n", __FUNCTION__));
}
int menu_hardware_serial_connection_type::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
char exit_dialog;
int number_of_items;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE,
("menu_hardware_serial_connection_type::%s()\n", __FUNCTION__));
again:
number_of_items = 2;
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE, ("cfr->link_defs->name: %s\n", link_def->name));
rc = YES;
exit_dialog = NO;
menu_str = " ";
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE, ("linkconf->card_type: DEC:%d, HEX: 0x%X\n",
linkconf->card_type, linkconf->card_type));
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_PERMANENT);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Permanent\" ");
menu_str += tmp_buff;
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_SWITCHED);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Switched\" ");
menu_str += tmp_buff;
//////////////////////////////////////////////////////////////////////////////////////
//create the explanation text for the menu
snprintf(tmp_buff, MAX_PATH_LENGTH,
"\n------------------------------------------\
\nSelect Serial Connection type 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 CONNECTION TYPE",
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_SERIAL_CONNECTION_TYPE,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
Debug(DBG_MENU_HARDWARE_SERIAL_CONNECTION_TYPE,
("serial select clock: atoi(get_lxdialog_output_string(): %d\n",
atoi(get_lxdialog_output_string())));
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_PERMANENT:
linkconf->connection = WANOPT_PERMANENT;
exit_dialog = YES;
break;
case WANOPT_SWITCHED:
linkconf->connection = WANOPT_SWITCHED;
exit_dialog = YES;
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:
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_PERMANENT:
case WANOPT_SWITCHED:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED,
"Please select Serial Connection type.");
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_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum SERIAL_LINE_CODING{
NRZ,
NRZI
};
#define DBG_MENU_HARDWARE_SERIAL_LINE_CODING 1
menu_hardware_serial_line_coding::
menu_hardware_serial_line_coding(IN char * lxdialog_path,
IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING,
("menu_hardware_serial_line_coding::%s()\n", __FUNCTION__));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_hardware_serial_line_coding::~menu_hardware_serial_line_coding()
{
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING,
("menu_hardware_serial_line_coding::%s()\n", __FUNCTION__));
}
int menu_hardware_serial_line_coding::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
char exit_dialog;
int number_of_items;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING,
("menu_hardware_serial_line_coding::%s()\n", __FUNCTION__));
again:
number_of_items = 2;
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING, ("cfr->link_defs->name: %s\n", link_def->name));
rc = YES;
exit_dialog = NO;
menu_str = " ";
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING, ("linkconf->card_type: DEC:%d, HEX: 0x%X\n",
linkconf->card_type, linkconf->card_type));
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_NRZ);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"NRZ\" ");
menu_str += tmp_buff;
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_NRZI);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"NRZI\" ");
menu_str += tmp_buff;
//////////////////////////////////////////////////////////////////////////////////////
//create the explanation text for the menu
snprintf(tmp_buff, MAX_PATH_LENGTH,
"\n------------------------------------------\
\nSelect Serial Line Coding type 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 LINE CODING",
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_SERIAL_LINE_CODING,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_CODING,
("serial select clock: atoi(get_lxdialog_output_string(): %d\n",
atoi(get_lxdialog_output_string())));
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_NRZ:
linkconf->line_coding = WANOPT_NRZ;
exit_dialog = YES;
break;
case WANOPT_NRZI:
linkconf->line_coding = WANOPT_NRZI;
exit_dialog = YES;
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:
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_NRZ:
case WANOPT_NRZI:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED,
"Please select Serial Line coding.");
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_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum SERIAL_LINE_IDLE{
FLAG,
MARK
};
#define DBG_MENU_HARDWARE_SERIAL_LINE_IDLE 1
menu_hardware_serial_line_idle::
menu_hardware_serial_line_idle(IN char * lxdialog_path,
IN conf_file_reader* ptr_cfr)
{
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE,
("menu_hardware_serial_line_idle::%s()\n", __FUNCTION__));
snprintf(this->lxdialog_path, MAX_PATH_LENGTH, "%s", lxdialog_path);
this->cfr = ptr_cfr;
}
menu_hardware_serial_line_idle::~menu_hardware_serial_line_idle()
{
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE,
("menu_hardware_serial_line_idle::%s()\n", __FUNCTION__));
}
int menu_hardware_serial_line_idle::run(OUT int * selection_index)
{
string menu_str;
int rc;
char tmp_buff[MAX_PATH_LENGTH];
char exit_dialog;
int number_of_items;
//help text box
text_box tb;
link_def_t * link_def;
wandev_conf_t *linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE,
("menu_hardware_serial_line_idle::%s()\n", __FUNCTION__));
again:
number_of_items = 2;
link_def = cfr->link_defs;
linkconf = cfr->link_defs->linkconf;
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE, ("cfr->link_defs->name: %s\n", link_def->name));
rc = YES;
exit_dialog = NO;
menu_str = " ";
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE, ("linkconf->card_type: DEC:%d, HEX: 0x%X\n",
linkconf->card_type, linkconf->card_type));
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_IDLE_FLAG);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Flag\" ");
menu_str += tmp_buff;
/////////////////////////////////////////////////
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"%d\" ", WANOPT_IDLE_MARK);
menu_str += tmp_buff;
snprintf(tmp_buff, MAX_PATH_LENGTH, " \"Mark\" ");
menu_str += tmp_buff;
//////////////////////////////////////////////////////////////////////////////////////
//create the explanation text for the menu
snprintf(tmp_buff, MAX_PATH_LENGTH,
"\n------------------------------------------\
\nSelect Serial Line Idle 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 LINE IDLE",
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_SERIAL_LINE_IDLE,
("hardware_setup: option selected for editing: %s\n", get_lxdialog_output_string()));
Debug(DBG_MENU_HARDWARE_SERIAL_LINE_IDLE,
("serial select clock: atoi(get_lxdialog_output_string(): %d\n",
atoi(get_lxdialog_output_string())));
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_IDLE_FLAG:
linkconf->line_idle = WANOPT_IDLE_FLAG;
exit_dialog = YES;
break;
case WANOPT_IDLE_MARK:
linkconf->line_idle = WANOPT_IDLE_MARK;
exit_dialog = YES;
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:
switch(atoi(get_lxdialog_output_string()))
{
case WANOPT_IDLE_FLAG:
case WANOPT_IDLE_MARK:
tb.show_help_message(lxdialog_path, NO_PROTOCOL_NEEDED,
"Please select Serial Line Idle.");
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_EXIT:
exit_dialog = YES;
break;
}//switch(*selection_index)
if(exit_dialog == NO){
goto again;
}
cleanup:
return rc;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////