<div dir="ltr">Hi Sylvain,<br><br>I am currently working on <a href="https://osmocom.org/issues/2988#note-21">https://osmocom.org/issues/2988#note-21</a>.<br>And while reading the specifications and looking at the Calypso<br>PHY implementation, I've got a few questions.<br><br>In short, according to the GSM TS 04.08, section 3.4.1.1 "SACCH<br>procedures", Measurement Report messages are sent at each possible<br>occasion when nothing else has to be sent. In other words, a dummy<br>LAPDm fill frame (0x01, 0x03, 0x01, 0x2b, ...) is not applicable here.<br><br>The Calypso PHY (i.e. the firmware) is sending self-composed<br>Measurement Reports if there is nothing in transmit queue:<br><br>> static uint8_t ubMeas[23] = {<br>>   /* L1 SAACH pseudo-header */<br>>   0x0f, 0x00,<br>><br>>   /* lapdm header */<br>>   0x01, 0x03, 0x49,<br>><br>>   /* Measurement report */<br>>   0x06, 0x15, 0x36, 0x36, 0x01, 0xC0, 0x00, 0x00,<br>>   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,<br>>   0x00, 0x00<br>> };<br>><br>> /**<br>>  * Is called every time when when<br>>  * a new LAPDm frame received from DSP<br>>  */<br>> void pu_update_rx_level(uint8_t rx_level)<br>> {<br>>   ubMeas[7] = ubMeas[8] = rx_level;<br>> }<br>><br>> const uint8_t *pu_get_meas_frame(void)<br>> {<br>>   if (l1s.tx_meas) {<br>>     /* There is a Measurement Report in transmit queue */<br>>     return l1s.tx_meas->l3h;<br>>   } else {<br>>     /* Compose a Measurement Report */<br>>     /* Update L1 SAACH pseudo-header */<br>>     ubMeas[0] = l1s.tx_power;<br>>     ubMeas[1] = l1s.ta;<br>><br>>     return ubMeas;<br>>   }<br>> }<br><br>I am not sure if this is the correct way. Why?<br><br>  - The Measurement Reports coming from the higher<br>    layers may contain additional information, such<br>    as the neighbour measurements.<br><br>  - The higher layers may spoof indicated TA value,<br>    while this code uses the actual one.<br><br>  - Measurement Reporting is already implemented<br>    in the higher layers, so this duplicates...<br><br>My current ideas are:<br><br>  1) Create a separate L1CTL message, that would be<br>     used to carry Measurement Reports. This way<br>     we wouldn't need to extract them from the<br>     L1CTL_DATA_REQ messages manually.<br><br>  2) Keep a last Measurement Report somewhere, and<br>     transmit it until a new one is arrived from<br>     the higher layers.<br><br>But I am still unsure, is this approach correct too.<br><br>Probably, some parts of the Measurement Reporting implementation<br>should be moved to L1, i.e. to the firmware, trxcon and VIRT-PHY.<br>This way each Measurement Report would always contain the actual<br>measurement results at the moment of transmission...<br><br>What do you think?<br>Any ideas are welcome!<br><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>With best regards,<br></div><div>Vadim Yanitskiy.<br><br></div></div></div></div></div></div>
</div>