Compare commits

...

2 Commits

Author SHA1 Message Date
Andreas Eversberg
6a32f0499f Get RSSI from received uplink data and send to PCU
This bumps the PCU API version and thus requires a new version of the
code on the sysmoBTS side!
2013-03-17 17:11:58 +01:00
Harald Welte
a5608d092d measurement: use new 'struct gsm_meas_rep_unidir' of libosmocore 2013-03-17 17:10:35 +01:00
5 changed files with 19 additions and 13 deletions

View File

@@ -5,7 +5,8 @@ int pcu_tx_info_ind(void);
int pcu_tx_rts_req(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn, int pcu_tx_rts_req(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn,
uint16_t arfcn, uint8_t block_nr); uint16_t arfcn, uint8_t block_nr);
int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn, int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn,
uint16_t arfcn, uint8_t block_nr, uint8_t *data, uint8_t len); uint16_t arfcn, uint8_t block_nr, uint8_t *data, uint8_t len,
int8_t rssi);
int pcu_tx_rach_ind(struct gsm_bts *bts, int16_t qta, uint8_t ra, uint32_t fn); int pcu_tx_rach_ind(struct gsm_bts *bts, int16_t qta, uint8_t ra, uint32_t fn);
int pcu_tx_time_ind(uint32_t fn); int pcu_tx_time_ind(uint32_t fn);
int pcu_tx_pag_req(const uint8_t *identity_lv, uint8_t chan_needed); int pcu_tx_pag_req(const uint8_t *identity_lv, uint8_t chan_needed);

View File

@@ -1,7 +1,7 @@
#ifndef _PCUIF_PROTO_H #ifndef _PCUIF_PROTO_H
#define _PCUIF_PROTO_H #define _PCUIF_PROTO_H
#define PCU_IF_VERSION 0x04 #define PCU_IF_VERSION 0x05
/* msg_type */ /* msg_type */
#define PCU_IF_MSG_DATA_REQ 0x00 /* send data to given channel */ #define PCU_IF_MSG_DATA_REQ 0x00 /* send data to given channel */
@@ -49,6 +49,7 @@ struct gsm_pcu_if_data {
uint8_t trx_nr; uint8_t trx_nr;
uint8_t ts_nr; uint8_t ts_nr;
uint8_t block_nr; uint8_t block_nr;
int8_t rssi;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct gsm_pcu_if_rts_req { struct gsm_pcu_if_rts_req {

View File

@@ -178,10 +178,10 @@ int lchan_meas_check_compute(struct gsm_lchan *lchan, uint32_t fn)
irssi_sub_sum); irssi_sub_sum);
/* store results */ /* store results */
lchan->meas.res.rxlev_full = dbm2rxlev((int)irssi_full_sum * -1); lchan->meas.ul_res.full.rx_lev = dbm2rxlev((int)irssi_full_sum * -1);
lchan->meas.res.rxlev_sub = dbm2rxlev((int)irssi_sub_sum * -1); lchan->meas.ul_res.sub.rx_lev = dbm2rxlev((int)irssi_sub_sum * -1);
lchan->meas.res.rxqual_full = ber10k_to_rxqual(ber_full_sum); lchan->meas.ul_res.full.rx_qual = ber10k_to_rxqual(ber_full_sum);
lchan->meas.res.rxqual_sub = ber10k_to_rxqual(ber_sub_sum); lchan->meas.ul_res.sub.rx_qual = ber10k_to_rxqual(ber_sub_sum);
lchan->meas.flags |= LC_UL_M_F_RES_VALID; lchan->meas.flags |= LC_UL_M_F_RES_VALID;
lchan->meas.num_ul_meas = 0; lchan->meas.num_ul_meas = 0;
@@ -194,10 +194,10 @@ int lchan_meas_check_compute(struct gsm_lchan *lchan, uint32_t fn)
/* build the 3 byte RSL uplinke measurement IE content */ /* build the 3 byte RSL uplinke measurement IE content */
int lchan_build_rsl_ul_meas(struct gsm_lchan *lchan, uint8_t *buf) int lchan_build_rsl_ul_meas(struct gsm_lchan *lchan, uint8_t *buf)
{ {
buf[0] = (lchan->meas.res.rxlev_full & 0x3f); /* FIXME: DTXu support */ buf[0] = (lchan->meas.ul_res.full.rx_lev & 0x3f); /* FIXME: DTXu support */
buf[1] = (lchan->meas.res.rxlev_sub & 0x3f); buf[1] = (lchan->meas.ul_res.sub.rx_lev & 0x3f);
buf[2] = ((lchan->meas.res.rxqual_full & 7) << 3) | buf[2] = ((lchan->meas.ul_res.full.rx_qual & 7) << 3) |
(lchan->meas.res.rxqual_sub & 7); (lchan->meas.ul_res.sub.rx_qual & 7);
return 3; return 3;
} }

View File

@@ -315,7 +315,8 @@ int pcu_tx_rts_req(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn,
} }
int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn, int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn,
uint16_t arfcn, uint8_t block_nr, uint8_t *data, uint8_t len) uint16_t arfcn, uint8_t block_nr, uint8_t *data, uint8_t len,
int8_t rssi)
{ {
struct msgb *msg; struct msgb *msg;
struct gsm_pcu_if *pcu_prim; struct gsm_pcu_if *pcu_prim;
@@ -338,6 +339,7 @@ int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t is_ptcch, uint32_t fn,
data_ind->trx_nr = ts->trx->nr; data_ind->trx_nr = ts->trx->nr;
data_ind->ts_nr = ts->nr; data_ind->ts_nr = ts->nr;
data_ind->block_nr = block_nr; data_ind->block_nr = block_nr;
data_ind->rssi = rssi;
memcpy(data_ind->data, data, len); memcpy(data_ind->data, data, len);
data_ind->len = len; data_ind->len = len;

View File

@@ -787,7 +787,8 @@ static int handle_ph_data_ind(struct femtol1_hdl *fl1, GsmL1_PhDataInd_t *data_i
data_ind->u32Fn, data_ind->u16Arfcn, data_ind->u32Fn, data_ind->u16Arfcn,
data_ind->u8BlockNbr, data_ind->u8BlockNbr,
data_ind->msgUnitParam.u8Buffer + 1, data_ind->msgUnitParam.u8Buffer + 1,
data_ind->msgUnitParam.u8Size - 1); data_ind->msgUnitParam.u8Size - 1,
(int8_t) (data_ind->measParam.fRssi));
break; break;
case GsmL1_Sapi_Ptcch: case GsmL1_Sapi_Ptcch:
/* PTCCH frame handling */ /* PTCCH frame handling */
@@ -795,7 +796,8 @@ static int handle_ph_data_ind(struct femtol1_hdl *fl1, GsmL1_PhDataInd_t *data_i
data_ind->u32Fn, data_ind->u16Arfcn, data_ind->u32Fn, data_ind->u16Arfcn,
data_ind->u8BlockNbr, data_ind->u8BlockNbr,
data_ind->msgUnitParam.u8Buffer, data_ind->msgUnitParam.u8Buffer,
data_ind->msgUnitParam.u8Size); data_ind->msgUnitParam.u8Size,
(int8_t) (data_ind->measParam.fRssi));
break; break;
default: default:
LOGP(DL1C, LOGL_NOTICE, "Rx PH-DATA.ind for unknown L1 SAPI %s\n", LOGP(DL1C, LOGL_NOTICE, "Rx PH-DATA.ind for unknown L1 SAPI %s\n",