aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-05-17 12:43:42 +0000
committerHarald Welte <laforge@gnumonks.org>2009-05-17 12:43:42 +0000
commitef061951e6e9c8bb9eda16f396ad245037156868 (patch)
tree89cde45e06301c1d2a599ebf4aad07442416f630
parent7a2a71e25559394cfd0ceeb98b510e6bf778fc54 (diff)
dump CCLK accuracy/type as part of bs11_config query
-rw-r--r--include/openbsc/abis_nm.h2
-rw-r--r--src/abis_nm.c17
-rw-r--r--src/bs11_config.c30
3 files changed, 47 insertions, 2 deletions
diff --git a/include/openbsc/abis_nm.h b/include/openbsc/abis_nm.h
index 2ffd75db0..aed556c74 100644
--- a/include/openbsc/abis_nm.h
+++ b/include/openbsc/abis_nm.h
@@ -595,6 +595,8 @@ int abis_nm_bs11_get_trx_power(struct gsm_bts_trx *trx);
int abis_nm_bs11_factory_logon(struct gsm_bts *bts, int on);
int abis_nm_bs11_set_trx1_pw(struct gsm_bts *bts, const char *password);
int abis_nm_bs11_set_pll_locked(struct gsm_bts *bts, int locked);
+int abis_nm_bs11_get_pll_mode(struct gsm_bts *bts);
+int abis_nm_bs11_get_cclk(struct gsm_bts *bts);
int abis_nm_bs11_get_state(struct gsm_bts *bts);
int abis_nm_bs11_load_swl(struct gsm_bts *bts, const char *fname,
u_int8_t win_size, int forced, gsm_cbfn *cbfn);
diff --git a/src/abis_nm.c b/src/abis_nm.c
index 5fb53d72f..9820d974b 100644
--- a/src/abis_nm.c
+++ b/src/abis_nm.c
@@ -351,6 +351,8 @@ static const struct tlv_definition nm_att_tlvdef = {
[NM_ATT_BS11_E1_STATE] = { TLV_TYPE_TLV },
[NM_ATT_BS11_PLL_MODE] = { TLV_TYPE_TLV },
[NM_ATT_BS11_PLL] = { TLV_TYPE_TLV },
+ [NM_ATT_BS11_CCLK_ACCURACY] = { TLV_TYPE_TV },
+ [NM_ATT_BS11_CCLK_TYPE] = { TLV_TYPE_TV },
/* ip.access specifics */
[NM_ATT_IPACC_RSL_BSC_IP] = { TLV_TYPE_FIXED, 4 },
[NM_ATT_IPACC_RSL_BSC_PORT] = { TLV_TYPE_FIXED, 2 },
@@ -1837,6 +1839,21 @@ int abis_nm_bs11_get_pll_mode(struct gsm_bts *bts)
return abis_nm_sendmsg(bts, msg);
}
+int abis_nm_bs11_get_cclk(struct gsm_bts *bts)
+{
+ struct abis_om_hdr *oh;
+ struct msgb *msg = nm_msgb_alloc();
+ u_int8_t attr[] = { NM_ATT_BS11_CCLK_ACCURACY,
+ NM_ATT_BS11_CCLK_TYPE };
+
+ oh = (struct abis_om_hdr *) msgb_put(msg, ABIS_OM_FOM_HDR_SIZE);
+ fill_om_fom_hdr(oh, 2+sizeof(attr), NM_MT_GET_ATTR,
+ NM_OC_BS11, BS11_OBJ_CCLK, 0x00, 0x00);
+ msgb_tlv_put(msg, NM_ATT_LIST_REQ_ATTR, sizeof(attr), attr);
+
+ return abis_nm_sendmsg(bts, msg);
+
+}
//static const u_int8_t bs11_logon_c7[] = { 0x07, 0xd9, 0x01, 0x11, 0x0d, 0x10, 0x20 };
static const u_int8_t bs11_logon_c8[] = { 0x02 };
diff --git a/src/bs11_config.c b/src/bs11_config.c
index 2a25b6051..25ff0e0e6 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -306,6 +306,18 @@ static const char *pll_mode_name(u_int8_t mode)
}
}
+static const char *cclk_acc_name(u_int8_t acc)
+{
+ switch (acc) {
+ case 0:
+ return "Medium";
+ case 1:
+ return "High";
+ default:
+ return "unknown";
+ }
+}
+
static const char *obj_name(struct abis_om_fom_hdr *foh)
{
static char retbuf[256];
@@ -323,6 +335,9 @@ static const char *obj_name(struct abis_om_fom_hdr *foh)
case BS11_OBJ_LI:
sprintf(retbuf+strlen(retbuf), "Line Interface ");
break;
+ case BS11_OBJ_CCLK:
+ sprintf(retbuf+strlen(retbuf), "CCLK ");
+ break;
}
break;
case NM_OC_SITE_MANAGER:
@@ -403,7 +418,17 @@ static int print_attr(struct tlv_parsed *tp)
printf("\tPLL Set Value=%d, Work Value=%d\n",
vp[0] << 8 | vp[1], vp[2] << 8 | vp[3]);
}
-
+ if (TLVP_PRESENT(tp, NM_ATT_BS11_CCLK_ACCURACY) &&
+ TLVP_LEN(tp, NM_ATT_BS11_CCLK_ACCURACY) >= 1) {
+ const u_int8_t *acc = TLVP_VAL(tp, NM_ATT_BS11_CCLK_ACCURACY);
+ printf("\tCCLK Accuracy: %s (%d)\n", cclk_acc_name(*acc), *acc);
+ }
+ if (TLVP_PRESENT(tp, NM_ATT_BS11_CCLK_TYPE) &&
+ TLVP_LEN(tp, NM_ATT_BS11_CCLK_TYPE) >= 1) {
+ const u_int8_t *acc = TLVP_VAL(tp, NM_ATT_BS11_CCLK_TYPE);
+ printf("\tCCLK Type=%d\n", *acc);
+ }
+
return 0;
}
@@ -414,9 +439,10 @@ static void cmd_query(void)
abis_nm_bs11_get_serno(g_bts);
abis_nm_bs11_get_oml_tei_ts(g_bts);
abis_nm_bs11_get_pll_mode(g_bts);
+ abis_nm_bs11_get_cclk(g_bts);
abis_nm_bs11_get_trx_power(&g_bts->trx[0]);
abis_nm_bs11_get_trx_power(&g_bts->trx[1]);
- sleep(5);
+ sleep(1);
abis_nm_bs11_factory_logon(g_bts, 0);
command = NULL;
}