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. 

Parents
  • Hi,

    I have asked internally. I will get back to you by Monday next week at the latest.

    Best regards,
    Dejan

  • Thanks!

    Also for the answers in the other discussion.

  • Hi,

    Michal Mühlpachr said:
    is there API way to detect whether network is R13 or R14, weather AS-RAI or R14 features are supported?

    Our customers do not need to know which RAI is supported or which is enabled (if any). It is enough to configure last_packet/one_resp/no_data socket option based on the situation in application and modem will use it in the best possible way depending on network's RAI support. Simply set the socket options to the best of application knowledge. There is no need for knowing other possible sockets in use when setting socket options for one socket because modem has common understanding of all sockets. In addition, it is not necessary to know which protocol (TCP or UDP) is used because the protocols are handled below the socket interface.

    Best regards,
    Dejan

  • > It is enough to configure last_packet/one_resp/no_data socket option

    That is exactly not the case! Someone need to know, that using one_resp or no_data doesn't work reliable, these options must be used together.

  • Our customers do not need to know which RAI is supported or which is enabled (if any).

    We are your customer and we need to know that for troubleshooting purposes.

    Knowing that and reporting that to our backend occasionally brings insight about operator/transport in use and allows battery lifetime estimation (based on communication power usage estimation). The modem do not provide information about "power consumed" unfortunately, so we do not have any other possibility how to estimate battery lifetime in case power consumption key drivers are unknown.

    How would you suggest estimating energy consumed by the modem without knowing those details?

  • Hi,

    Michal Mühlpachr said:
    What about SO_RAI_NO_DATA in this case?

    Nothing should happen with SO_RAI_NO_DATA. 

    Best regards,
    Dejan

  • To "ignore" SO_RAI_NO_DATA is for some customers not "nothing" ;-).

    My feeling is, there are very different understandings, what should happen.

    For Nordic it seems to be "the best possible way" to not report, if a requested RAI option is effective or not.

    For developer, which want to implement energy efficient applications, "the best possible way" would be at least an error-code, if a requested RAI option is not effective. A "smart mapping" of not supported options into implicit working options (e.g. "SO_RAI_ONE_RESP" with Rel. 14 AS-RAI into "SO_RAI_NO_DATA" after receiving a incoming data) would be an improvement. Or at least a documentation, where it get's clear, that SO_RAI_ONE_RESP and SO_RAI_NO_DATA are intended to be used together, if it's unclear, which RAI version you get.

    All in all:

    Your customers are spending so much time in your "best possible way" of not reporting details, that this gets very expensive.

Reply
  • To "ignore" SO_RAI_NO_DATA is for some customers not "nothing" ;-).

    My feeling is, there are very different understandings, what should happen.

    For Nordic it seems to be "the best possible way" to not report, if a requested RAI option is effective or not.

    For developer, which want to implement energy efficient applications, "the best possible way" would be at least an error-code, if a requested RAI option is not effective. A "smart mapping" of not supported options into implicit working options (e.g. "SO_RAI_ONE_RESP" with Rel. 14 AS-RAI into "SO_RAI_NO_DATA" after receiving a incoming data) would be an improvement. Or at least a documentation, where it get's clear, that SO_RAI_ONE_RESP and SO_RAI_NO_DATA are intended to be used together, if it's unclear, which RAI version you get.

    All in all:

    Your customers are spending so much time in your "best possible way" of not reporting details, that this gets very expensive.

Children
  • Hi,

    Dejan is currently on vacation, so I have taken over this ticket.

    Is there anything that is still unclear?

    I'll see what I can do regarding a sample or more documentation on how to use RAI.

    Best regards,

    Didrik

  • To mention what works and what works not in the documentation would have saved a lot of time, at least for me.

    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 or the actual RAI mode supported by the network would enable users to write better applications and understand the network features.

  • 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.

Related