Please consolidate nRF9160 documentation about CP-RAI and AS-RAI

Knowing, that the AS-RAI implementation is experimental, I would still prefer to have more documentation about the details.

I already asked for these details in an other issue (see Details of AS-RAI and CP-RAI fallback ) but for me there are still some gaps.

The above referred thread discussed, that requesting to use Rel. 14 AS-RAI, the modem falls back to Rel. 13 CP_RAI, if AS-RAI isn't supported by the network provider. So far, so good. The nasty point seems to be, that you can't use this fallback without knowing that, because the supported options seems to differ for AS-RAI and CP-RAI and a function to see, that the modem decided to fall back, is missing.

My results (the trace are provided in the referred thread):

With Rel. 14 AS-RAI only the SO_RAI_NO_DATA seems to work, with SO_RAI_ONE_RESP I had no success.

With requesting Rel. 14 AS-RAI, but fallback to Rel. 13 CP-RAI, SO_RAI_NO_DATA doesn't work, but SO_RAI_ONE_RESP is now working.

My questions:

1. Please document, which options are working in which mode (SO_RAI_NO_DATA, SO_RAI_LAST, SO_RAI_ONE_RESP combined with Rel. 14 AS-RAI, AS-RAI fallback to CP-RAI).

2. Is it possible the check, if the modem falls back to Rel. 13 CP-RAI? Especially, if the first question shows, that there are no common supported options, such a function helps to implement a working application.

Thanks in advance. 

  • In my opinion it is not "the best possible way" to swallow a SO_RAI_ONE_RESP or SO_RAI_NO_DATA in the case it is not supported. Either returning an error code

    Error code would trigger AT command flow redesign for Serial LTE Modem application since there is no easy way to distinguish breaking/non-breaking error. I understand, that for API level it is not an issue, but a feasible solution should consider broader use cases than just API.

  • > Serial LTE Modem

    That's one application among a lot.

    > there is no easy way to distinguish breaking/non-breaking error

    I assume, you mean at the AT-cmd level of that application?

    AS-RAI uses "setsockopt", which already defines to return errors. The current implementation actually returns error codes, e.g. if the UDP socket is not connected, you get a -1 and errno of 121 (EDESTADDRREQ) for SO_RAI_NO_DATA. Returning an error in cases, where the selected RAI option is not supported by the network is more a bugfix according the expected behavior then an API break.

    I don't use the "Serial LTE Modem", so if other feel, that an error causes trouble there, then it should be very easy to swallow a returned error in that application.

  • I assume, you mean at the AT-cmd level of that application?

    Yes.

    I don't use the "Serial LTE Modem", so if other feel, that an error causes trouble there, then it should be very easy to swallow a returned error in that application.

    SLM returns just OK or ERROR. In case of ERROR it would not be clear if it is a breaking error (e.g. socket is not connected) or a non-breaking error like a feature is not supported by the network.

    So there would not be an easy way how to distinguish whether to swallow or not swallow error.

  • That affects only SLM. And for that it's very easy, to keep the wrong OK, even if setsockopt returns an error.

    But to return error, if something doesn't work as expected, is for me a well API designed. And that fix should not be blocked by a single application.

    I guess you request a different API. Without an alternative proposals, I don't see, that this would be available soon. But return an error for setsockopt should be not too hard, even if SLM will then not benefit.

  • > if it is a breaking error (e.g. socket is not connected)

    In combination with setsockopt SO_RAI_NO_DATA it's not breaking. In that case it is not applied, but the other functions are working. It is very much the same, as if it doesn't work, because Rel 13 CP-RAI is used implicit.

Related