MKRWAN.h and EU duty cycle limitation

The MKRWAN.h library setups the LoRa module according to the region:

bool configureBand(_lora_band band) {
    sendAT(GF("+BAND="), band);
    if (waitResponse() != 1) {
        return false;
    }
    if (band == EU868 && isArduinoFW()) {
        return dutyCycle(true);
    }
    return true;
  }

If the region is EU868 and id that's an ArduinoFW it sets the dutyCycle limitation on. I'm assuming this is to comply with the 1% EU legislation rule.

Few questions:

  1. Why this dutyCycle management is turned on only if this is an ArduinoFW? The MKRWAN_v2 library doesn't have this check against the arduinoFW.

  2. The dutycylce() functions sends an "AT+DUTYCYCLE=" command to the module. I can't find any documentation related to this command by checking the docs at the link below. Is there any documentation for the AT commands the MKRWAN.h library implements? (Is this arduinoFW specific?)

https://www.st.com/resource/en/application_note/dm00346311-examples-of-at-commands-on-icubelrwan-stmicroelectronics.pdf?

  1. The cadence and duration of the TX cycle is related to the data rate mode (SF, BW, number of bytes). By turning OFF the ADR mode and forcing a data rate via the dataRate() function call the module still seems to choose a DR (SF, BW,..) on its own. At least from the logs I get from the gateway.

Kindly asking for your input. Thanks, Marko

Through a series of forum reads and some additional debugging I was able to answer my point #3.

Before I send data to the module it seems I need to set ADR to true and then set the mode to anything other than 6 to be able to control the module. Mode 6 (SF7, BW 250KHz) seems not to work.

send_something() {
    modem.setADR(true);
    modem.dataRate(5);

    modem.beginPacket();
    ....
    ....
}

As for the supported AT commands the header file defining them seems to be here: