sysmobts: Read the model number and trx once from the device

Use it for the ipaccess-find response and for the sysmobts
classification code. This can be used by the vty in a second.
This commit is contained in:
Holger Hans Peter Freyther 2014-07-31 20:56:18 +02:00
parent 3ecb2bb604
commit b1ceb40363
3 changed files with 43 additions and 21 deletions

View File

@ -44,11 +44,44 @@
#include "misc/sysmobts_nl.h"
#include "misc/sysmobts_par.h"
static int bts_type;
static int trx_number;
static int no_eeprom_write = 0;
static int daemonize = 0;
static const char *cfgfile = "sysmobts-mgr.cfg";
void *tall_mgr_ctx;
static int classify_bts(void)
{
int rc;
rc = sysmobts_par_get_int(SYSMOBTS_PAR_MODEL_NR, &bts_type);
if (rc < 0) {
fprintf(stderr, "Failed to get model number.\n");
return -1;
}
rc = sysmobts_par_get_int(SYSMOBTS_PAR_TRX_NR, &trx_number);
if (rc < 0) {
fprintf(stderr, "Failed to get the trx number.\n");
return -1;
}
return 0;
}
int is_sbts2050(void)
{
return bts_type == 2050;
}
int is_sbts2050_trx(int trx)
{
return trx_number == trx;
}
static struct osmo_timer_list temp_timer;
static void check_temp_timer_cb(void *unused)
{
@ -221,7 +254,6 @@ static void respond_to(struct sockaddr_in *src, struct osmo_fd *fd,
if (!fetched_info) {
uint8_t mac[6];
int val;
/* fetch the MAC */
sysmobts_par_get_buf(SYSMOBTS_PAR_MAC, mac, sizeof(mac));
@ -230,18 +262,16 @@ static void respond_to(struct sockaddr_in *src, struct osmo_fd *fd,
mac[3], mac[4], mac[5]);
/* fetch the model and trx number */
sysmobts_par_get_int(SYSMOBTS_PAR_MODEL_NR, &val);
switch(val) {
switch(bts_type) {
case 0:
case 0xffff:
case 1002:
model_name = "sysmoBTS 1002";
break;
case 2050:
sysmobts_par_get_int(SYSMOBTS_PAR_TRX_NR, &val);
if (val == 0)
if (trx_number == 0)
model_name = "sysmoBTS 2050 (master)";
else if (val == 1)
else if (trx_number == 1)
model_name = "sysmoBTS 2050 (slave)";
else
model_name = "sysmoBTS 2050 (unknown)";
@ -322,6 +352,8 @@ int main(int argc, char **argv)
msgb_set_talloc_ctx(tall_msgb_ctx);
mgr_log_init();
if (classify_bts() != 0)
exit(2);
osmo_init_ignore_signals();
signal(SIGINT, &signal_handler);

View File

@ -313,23 +313,10 @@ static void check_uctemp_timer_cb(void *data)
void sbts2050_uc_initialize(void)
{
int val;
if (sysmobts_par_get_int(SYSMOBTS_PAR_MODEL_NR, &val) < 0) {
LOGP(DTEMP, LOGL_ERROR,
"Failed to get Model number\n");
return;
}
if (val != 2050)
if (!is_sbts2050())
return;
if (sysmobts_par_get_int(SYSMOBTS_PAR_TRX_NR, &val) < 0) {
LOGP(DTEMP, LOGL_ERROR, "Failed to get the TRX number\n");
return;
}
if (val != 0)
if (!is_sbts2050_trx(0))
return;
ucontrol0.fd = osmo_serial_init(ucontrol0.path, 115200);

View File

@ -43,6 +43,9 @@ enum sysmobts_firmware_type {
int sysmobts_firmware_reload(enum sysmobts_firmware_type type);
int is_sbts2050(void);
int is_sbts2050_trx(int);
void sbts2050_uc_check_temp(int *temp_pa, int *temp_board);
void sbts2050_uc_set_power(int pmaster, int pslave, int ppa);
int sbts2050_uc_get_status(enum sbts2050_status_rqt status);