Proper measurement reporting

Vadim Yanitskiy axilirator at gmail.com
Fri Mar 23 13:20:22 UTC 2018


Hi Sylvain,

I am currently working on https://osmocom.org/issues/2988#note-21.
And while reading the specifications and looking at the Calypso
PHY implementation, I've got a few questions.

In short, according to the GSM TS 04.08, section 3.4.1.1 "SACCH
procedures", Measurement Report messages are sent at each possible
occasion when nothing else has to be sent. In other words, a dummy
LAPDm fill frame (0x01, 0x03, 0x01, 0x2b, ...) is not applicable here.

The Calypso PHY (i.e. the firmware) is sending self-composed
Measurement Reports if there is nothing in transmit queue:

> static uint8_t ubMeas[23] = {
>   /* L1 SAACH pseudo-header */
>   0x0f, 0x00,
>
>   /* lapdm header */
>   0x01, 0x03, 0x49,
>
>   /* Measurement report */
>   0x06, 0x15, 0x36, 0x36, 0x01, 0xC0, 0x00, 0x00,
>   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
>   0x00, 0x00
> };
>
> /**
>  * Is called every time when when
>  * a new LAPDm frame received from DSP
>  */
> void pu_update_rx_level(uint8_t rx_level)
> {
>   ubMeas[7] = ubMeas[8] = rx_level;
> }
>
> const uint8_t *pu_get_meas_frame(void)
> {
>   if (l1s.tx_meas) {
>     /* There is a Measurement Report in transmit queue */
>     return l1s.tx_meas->l3h;
>   } else {
>     /* Compose a Measurement Report */
>     /* Update L1 SAACH pseudo-header */
>     ubMeas[0] = l1s.tx_power;
>     ubMeas[1] = l1s.ta;
>
>     return ubMeas;
>   }
> }

I am not sure if this is the correct way. Why?

  - The Measurement Reports coming from the higher
    layers may contain additional information, such
    as the neighbour measurements.

  - The higher layers may spoof indicated TA value,
    while this code uses the actual one.

  - Measurement Reporting is already implemented
    in the higher layers, so this duplicates...

My current ideas are:

  1) Create a separate L1CTL message, that would be
     used to carry Measurement Reports. This way
     we wouldn't need to extract them from the
     L1CTL_DATA_REQ messages manually.

  2) Keep a last Measurement Report somewhere, and
     transmit it until a new one is arrived from
     the higher layers.

But I am still unsure, is this approach correct too.

Probably, some parts of the Measurement Reporting implementation
should be moved to L1, i.e. to the firmware, trxcon and VIRT-PHY.
This way each Measurement Report would always contain the actual
measurement results at the moment of transmission...

What do you think?
Any ideas are welcome!

With best regards,
Vadim Yanitskiy.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/baseband-devel/attachments/20180323/315109ca/attachment.html>


More information about the baseband-devel mailing list