Afero supports multiple ASR systems-on-chips, which may have different capabilities inherently or by virtue of the version of firmware active at runtime. In order to help you create MCU code flexible enough to tolerate such different environments, afLib provides a function to enable MCU to query ASR to check if a specific capability is offered.
Check the current ASR/firmware for the availability of specified capability.
af_lib_error_t af_lib_asr_has_capability(af_lib_t *af_lib, uint32_t af_asr_capability)
af_lib |
Pointer to the active afLib instance. |
af_asr_capability |
A given capability to test. |
Possible capability values currently include:
AF_ASR_CAPABILITY_MCU_OTA
- ASR supports MCU OTA.It can take non-zero time for ASR to communicate a capability to afLib. If this function is called
too early it will return the AF_ERROR_BUSY
error code, in which case it should be tried again "at a later time."
If you need an explicit determination of that "later time," it is marked by the time when you can successfully call
af_lib_get_attribute()
for attribute AF_ATTRIBUTE_ID_ASR_CAPABILITIES
, and retrieve it via the
attrEventCallback()
, in the AF_LIB_EVENT_ASR_GET_RESPONSE
event.
include "af_lib.h" #include "af_module_commands.h" #include "af_module_states.h" #include "arduino_spi.h" #include "arduino_transport.h" af_lib_t *af_lib; af_lib_error_t capabilityResult = AF_SUCCESS; bool stopChecking = false; void setup() { // Initialize afLib af_transport_t* arduinoSPI = arduino_transport_create_spi(CS_PIN); af_lib = af_lib_create_with_unified_callback(attrEventCallback, arduinoSPI); arduino_spi_setup_interrupts(af_lib, digitalPinToInterrupt(INT_PIN)); } void loop() { capabilityResult = af_lib_asr_has_capability(af_lib, AF_ASR_CAPABILITY_MCU_OTA); if (!stopChecking){ switch (capabilityResult) { case AF_SUCCESS: Serial.println("MCU OTA is SUPPORTED!!!"); stopChecking = true; break; case AF_ERROR_NOT_SUPPORTED: Serial.println("MCU OTA is NOT SUPPORTED!!!"); stopChecking = true; break; case AF_ERROR_BUSY: Serial.println("It's too early to know if MCU OTA is supported!!!"); break; } } // Give afLib processing time by calling af_lib_loop(af_lib) in sketch's loop() af_lib_loop(af_lib); }