aboutsummaryrefslogtreecommitdiffstats
path: root/src/bs11_config.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-02-01 22:15:49 +0000
committerHarald Welte <laforge@gnumonks.org>2009-02-01 22:15:49 +0000
commit3ffd1376b7e83726e306c863780e5e8673c53b36 (patch)
tree79be54cdf78ffac90797ad6ad92f9e0d4c0453cb /src/bs11_config.c
parentc12d52bae4fbdda8bdc609323bb1ef91b07aced6 (diff)
* add abis_nm_software_load_status() to header file
* new abis_nm_bs11_bsc_disconnect() function to disconnect BSC/BTS link * add support for 'forced load' of BS-11 software to abis_nm.c and bs11_config * remove lots of debug output * print progress during software load
Diffstat (limited to 'src/bs11_config.c')
-rw-r--r--src/bs11_config.c55
1 files changed, 40 insertions, 15 deletions
diff --git a/src/bs11_config.c b/src/bs11_config.c
index e2916ab06..9acf3012b 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -92,9 +92,8 @@ static int create_trx1_objects(struct gsm_bts *bts)
}
/* create all objects for an initial configuration */
-static int create_objects(struct gsm_bts *bts, int trx1)
+static int create_objects(struct gsm_bts *bts)
{
- //abis_nm_bs11_factory_logon(bts, 1);
abis_nm_bs11_create_object(bts, BS11_OBJ_LI, 0, sizeof(obj_li_attr),
obj_li_attr);
abis_nm_bs11_create_object(bts, BS11_OBJ_GPSU, 0, 0, NULL);
@@ -113,7 +112,6 @@ static int create_objects(struct gsm_bts *bts, int trx1)
abis_nm_bs11_set_oml_tei(bts, TEI_OML);
abis_nm_bs11_set_trx_power(&bts->trx[0], BS11_TRX_POWER_GSM_30mW);
- //abis_nm_bs11_factory_logon(bts, 0);
return 0;
}
@@ -124,6 +122,8 @@ static char *fname_software = "HS011106.SWL";
static int delay_ms = 0;
static int have_trx1 = 0;
static int win_size = 8;
+static int param_disconnect = 0;
+static int param_forced = 0;
static struct gsm_bts *g_bts;
static int file_is_readable(const char *fname)
@@ -141,6 +141,9 @@ static int file_is_readable(const char *fname)
return 0;
}
+static int percent;
+static int percent_old;
+
/* callback function passed to the ABIS OML code */
static int swload_cbfn(unsigned int hook, unsigned int event, struct msgb *msg,
void *data, void *param)
@@ -174,6 +177,12 @@ static int swload_cbfn(unsigned int hook, unsigned int event, struct msgb *msg,
bs11cfg_state = STATE_NONE;
break;
+ case NM_MT_LOAD_SEG_ACK:
+ percent = abis_nm_software_load_status(g_bts);
+ if (percent > percent_old)
+ printf("Software Download Progress: %d%%\n", percent);
+ percent_old = percent;
+ break;
}
return 0;
}
@@ -278,8 +287,8 @@ static int handle_state_resp(enum abis_bs11_phase state)
* a safety load from a regular software */
if (file_is_readable(fname_safety))
rc = abis_nm_software_load(g_bts, fname_safety,
- win_size, swload_cbfn,
- g_bts);
+ win_size, param_forced,
+ swload_cbfn, g_bts);
else
fprintf(stderr, "No valid Safety Load file \"%s\"\n",
fname_safety);
@@ -287,17 +296,20 @@ static int handle_state_resp(enum abis_bs11_phase state)
case BS11_STATE_WAIT_MIN_CFG:
case BS11_STATE_WAIT_MIN_CFG_2:
bs11cfg_state = STATE_SWLOAD;
- rc = create_objects(g_bts, have_trx1);
+ rc = create_objects(g_bts);
break;
case BS11_STATE_MAINTENANCE:
- bs11cfg_state = STATE_SWLOAD;
- /* send software (FIXME: over A-bis?) */
- if (file_is_readable(fname_software))
- rc = abis_nm_bs11_load_swl(g_bts, fname_software,
- win_size, swload_cbfn);
- else
- fprintf(stderr, "No valid Software file \"%s\"\n",
- fname_software);
+ if (bs11cfg_state != STATE_SWLOAD) {
+ bs11cfg_state = STATE_SWLOAD;
+ /* send software (FIXME: over A-bis?) */
+ if (file_is_readable(fname_software))
+ rc = abis_nm_bs11_load_swl(g_bts, fname_software,
+ win_size, param_forced,
+ swload_cbfn);
+ else
+ fprintf(stderr, "No valid Software file \"%s\"\n",
+ fname_software);
+ }
break;
case BS11_STATE_NORMAL:
if (have_trx1)
@@ -389,7 +401,9 @@ static void print_help(void)
printf("\t-s --software <file>\t\tSpecify Software file\n");
printf("\t-S --safety <file>\t\tSpecify Safety Load file\n");
printf("\t-d --delay <file>\t\tSpecify delay\n");
+ printf("\t-D --disconnect\t\t\tDisconnect BTS from BSC\n");
printf("\t-w --win-size <num>\t\tSpecify Window Size\n");
+ printf("\t-f --forced\t\t\tForce Software Load\n");
}
static void handle_options(int argc, char **argv)
@@ -405,10 +419,12 @@ static void handle_options(int argc, char **argv)
{ "software", 1, 0, 's' },
{ "safety", 1, 0, 'S' },
{ "delay", 1, 0, 'd' },
+ { "disconnect", 0, 0, 'D' },
{ "win-size", 1, 0, 'w' },
+ { "forced", 0, 0, 'f' },
};
- c = getopt_long(argc, argv, "hp:s:S:td:w:",
+ c = getopt_long(argc, argv, "hp:s:S:td:Dw:f",
long_options, &option_index);
if (c == -1)
@@ -436,6 +452,12 @@ static void handle_options(int argc, char **argv)
case 'w':
win_size = atoi(optarg);
break;
+ case 'D':
+ param_disconnect = 1;
+ break;
+ case 'f':
+ param_forced = 1;
+ break;
default:
break;
}
@@ -474,6 +496,9 @@ int main(int argc, char **argv)
abis_nm_bs11_factory_logon(g_bts, 1);
//abis_nm_bs11_get_serno(g_bts);
+ if (param_disconnect)
+ abis_nm_bs11_bsc_disconnect(g_bts, 0);
+
while (1) {
bsc_select_main();
}