le_avc_interface.h

Go to the documentation of this file.
1 
2 
3 /*
4  * ====================== WARNING ======================
5  *
6  * THE CONTENTS OF THIS FILE HAVE BEEN AUTO-GENERATED.
7  * DO NOT MODIFY IN ANY WAY.
8  *
9  * ====================== WARNING ======================
10  */
11 
12 /**
13  * @page c_le_avc AirVantage Connector API
14  *
15  * @ref le_avc_interface.h "API Reference" <br>
16  * @ref legatoServicesAirVantage "AirVantage Connector Platform Service"
17  *
18  *
19  * The AirVantage connector service provides an API to communicate with the AirVantage Server to
20  * download and install updates.
21  *
22  * @section c_le_avc_update Firmware/Application Updates
23  *
24  * The API for firmware/application update is divided into two parts:
25  * - Allow an App to contact the server for pending updates. If available,
26  * can select to download or install the update.
27  * - Allow an App to block an update from being installed. An App may need this if it's
28  * performing a critical operation that can't be interrupted (e.g., eCall). This is necessary
29  * as installing an update will cause the App to restart (either the App itself needs to restart
30  * or a firmware change causes the modem to reset).
31  *
32  * @subsection c_le_avc_user_agreement User Agreement
33  *
34  * When writing a control app for the AirVantage Service it is up to the developer to ensure that
35  * user agreements have been enabled for all actions the control app performs. By default all
36  * user agreements are enabled and the avcService app will notify the control app and wait for a
37  * response before downloading or installing the update. If the avcService can't communicate with
38  * the control app it waits for 3 minutes and tries again. To not have the avcService wait for the
39  * control app to accept the agreement the user agreement must be disabled.
40  *
41  * There are 5 events that require user agreements:
42  * - LE_AVC_CONNECTION_PENDING
43  * - LE_AVC_DOWNLOAD_PENDING
44  * - LE_AVC_INSTALL_PENDING
45  * - LE_AVC_REBOOT_PENDING
46  * - LE_AVC_UNINSTALL_PENDING
47  *
48  * An app can respond to these user agreement notification by opening a connection if the
49  * notification is connection pending or by accepting or deferring the operation if the notification
50  * is one of download, install, uninstall or reboot pending.
51  *
52  * Whether avcService should forward these notifications to an app or act on these notifications by
53  * itself is determined by the individual configuration flags that enables or disables user
54  * agreement for these operations. If the user agreement flag is turned off for an operation,
55  * the default action by avcService is to automatically accept that pending operation. An app can
56  * register its handler by calling le_avc_AddStatusEventHandler() described in
57  * c_le_avc_update_control and the configuration flags can be set by le_avc_SetUserAgreement().
58  *
59  * Example of enabling user agreement for LE_AVC_DOWNLOAD_PENDING:
60  * @code
61  * le_result_t result;
62  * result = le_avc_SetUserAgreement(LE_AVC_USER_AGREEMENT_DOWNLOAD, true);
63  *
64  * if (result != LE_OK)
65  * {
66  * LE_ERROR("Failed to enable user agreement for download operation");
67  * }
68  * @endcode
69  *
70  * @subsection c_le_avc_update_control Update Control
71  *
72  * Any App can start a session with an AirVantage server to determine if there
73  * is a pending update. This is done with le_avc_StartSession().
74  *
75  * The current session can be stopped using le_avc_StopSession(). This cancels any query for pending
76  * update, or suspends a download in progress; however, it <b>won't stop</b> an install in progress.
77  *
78  * The status of a pending update is sent to all Apps registered for receiving a notification.
79  * An App can use le_avc_AddStatusEventHandler() to register a handler function to
80  * receive this notification. The notification will be received after a session is started.
81  *
82  * Example of registering an AVC handler and starting a session with fault checking:
83  * @code
84  * // Start AVC Session
85  * LE_INFO("AirVantage Connection Controller started.");
86  * le_avc_AddStatusEventHandler(avcStatusHandler, NULL); //register a AVC handler
87  *
88  * //Start AVC session. Note: AVC handler must be registered prior starting a session
89  * le_result_t result = le_avc_StartSession();
90  * if (LE_FAULT == result)
91  * {
92  * le_avc_StopSession();
93  * le_avc_StartSession();
94  * }
95  * @endcode
96  *
97  * Sometimes, @c avcService may decide to start a session with the AirVantage
98  * server; for instance if a call to le_avc_AcceptDownload() when the session is stopped,
99  * @c avcService will open a session to proceed with the download. In this case, a session started
100  * notification could also be received, even if le_avc_StartSession() is not called explicitly.
101  *
102  * @subsubsection c_le_avc_updateControl_pending Pending Updates
103  *
104  * There can only be one pending update at a time. To query the type of update, use
105  * le_avc_GetUpdateType(). App updates can call le_avc_GetAppUpdateName() to retrieve the App name.
106  *
107  * If a download is pending, le_avc_AcceptDownload() can be used to allow the update to be
108  * downloaded. An AirVantage session will be initiated if this api is called while there is no
109  * active AirVantage session. le_avc_DeferDownload() can be used to defer the download for the
110  * specified number of minutes. After the defer time has elapsed, the pending download notification
111  * will be re-sent again to all registered apps. le_avc_AcceptDownload() can be used to accept the
112  * download even before the defer timer expires. This behaviour is true for deferring install
113  * and uninstall as well.
114  *
115  * Once an update has been downloaded, a new notification will be received to indicate that an
116  * install is pending. Apps can then use le_avc_AcceptInstall() to allow the install to proceed.
117  *
118  * If an uninstall is pending, then le_avc_AcceptUninstall() can be used to allow the uninstall to
119  * proceed. To defer the decision, le_avc_DeferUninstall() can be used to defer the uninstall for
120  * the specified number of minutes. In case of an upgrade, the existing application will not be
121  * uninstalled after le_avc_AcceptUninstall() is called. le_avc_AcceptUninstall() is only used to
122  * signal the server to start downloading the new application. To proceed with an upgrade process,
123  * accept the uninstall of the existing version followed by accepting the download and install of
124  * the new version.
125  *
126  * @code
127  * switch (updateStatus)
128  * {
129  * case LE_AVC_DOWNLOAD_PENDING:
130  * LE_INFO("Accepting %s update.", GetUpdateType());
131  * res = le_avc_AcceptDownload();
132  * if (res != LE_OK)
133  * {
134  * LE_ERROR("Failed to accept download from AirVantage (%s)", LE_RESULT_TXT(res));
135  * }
136  * break;
137  *
138  * case LE_AVC_INSTALL_PENDING:
139  * LE_INFO("Accepting %s installation.", GetUpdateType());
140  * res = le_avc_AcceptInstall();
141  * if (res != LE_OK)
142  * {
143  * LE_ERROR("Failed to accept install from AirVantage (%s)", LE_RESULT_TXT(res));
144  * }
145  * break;
146  *
147  * case LE_AVC_UNINSTALL_PENDING:
148  * LE_INFO("Accepting %s uninstall.", GetUpdateType());
149  * res = le_avc_AcceptUninstall();
150  * if (res != LE_OK)
151  * {
152  * LE_ERROR("Failed to accept uninstall from AirVantage (%s)", LE_RESULT_TXT(res));
153  * }
154  * break;
155  *
156  * case LE_AVC_REBOOT_PENDING:
157  * LE_INFO("Accepting device reboot.");
158  * res = le_avc_AcceptReboot();
159  * if (res != LE_OK)
160  * {
161  * LE_ERROR("Failed to accept reboot from AirVantage (%s)", LE_RESULT_TXT(res));
162  * }
163  * break;
164  *
165  * default:
166  * // No action required
167  * break;
168  * }
169  * @endcode
170  *
171  * @note Even if an App calls le_avc_AcceptInstall(), the install may still be blocked by another
172  * App using the @ref c_le_avc_update_app functions. To defer the decision, an App can use
173  * le_avc_DeferInstall() to defer the install for the specified number of minutes. After the defer
174  * time has elapsed, the pending install notification will be re-sent to allow Apps to make a new
175  * decision, or again defer.
176  *
177  *
178  * @subsubsection c_le_avc_updateControl_accepting Accepting Installs/Uninstalls
179  *
180  * Accepting an App install or uninstall will not initiate an AirVantage session if no session
181  * is active. An App should start an AirVantage session before accepting an App install/uninstall,
182  * to ensure the process is completed, and the server is updated.
183  *
184  * If no app has registered for notifications using le_avc_AddStatusEventHandler(),
185  * then any pending downloads and installs will happen automatically, subject to any restrictions
186  * imposed by app using the @ref c_le_avc_update_app functions.
187  *
188  * There is no restriction on the number of Apps registering for notifications.
189  *
190  * In case of any error incurred during App download/install, an error code will be set which can be
191  * retrieved by calling le_avc_GetErrorCode().
192  *
193  * @subsection c_le_avc_update_app Application Installation Blocking
194  *
195  * When an App is about to perform a critical operation, it can block the installation of
196  * an update with le_avc_BlockInstall(), and after it's finished with the critical operation, it
197  * can unblock the install with le_avc_UnblockInstall().
198  *
199  * What constitutes a critical operation depends on the App. An eCall App might
200  * block installs for the duration that it runs. A data collection App that wakes up
201  * once an hour might block installs while it collects and stores and/or transmits a new data
202  * sample, and then unblock installs just before it goes to sleep again.
203  *
204  * If an install can't be applied because it's blocked, another attempt to apply the install
205  * will be made at a later time.
206  *
207  * An App can add a session control handler using le_avc_AddSessionRequestEventHandler(). Requests
208  * by user Apps to open or close session will be forwarded to the session control handler. If no App
209  * has registered a session request handler, AVC session can be opened or closed anytime by
210  * user Apps.
211  *
212  * @subsection c_le_avc_suspend_resume Suspend and resume an update
213  *
214  * A firmware/application update can be interrupted or suspended by different events:
215  * - a device reboot
216  * - a network loss
217  * - a manual suspend through a session stop.
218  *
219  * After the update suspension, when the @c avcService is ready to resume the update process:
220  * - If the user agreements are disabled, the update process is automatically restarted.
221  * - If the user agreements are enabled, the previous @c PENDING notification is sent to the App,
222  * as indicated in the table below.
223  *
224  * @note The @c avcService might take a while to suspend the update process (typically a few
225  * minutes), e.g. in some cases of firmware update. The @c PENDING notification will therefore be
226  * sent only when the suspension is over. Trying to resume the update process while the suspension
227  * is not over and the notification is not received has no effect.
228  *
229  * | Last received event | Event sent to resume | Expected action from App |
230  * |--------------------------------|-------------------------------------------------------------|--------------------------|
231  * | @c LE_AVC_DOWNLOAD_PENDING | @c LE_AVC_DOWNLOAD_PENDING | Accept download |
232  * | @c LE_AVC_DOWNLOAD_IN_PROGRESS | @c LE_AVC_DOWNLOAD_PENDING with remaining bytes to download | Accept download |
233  * | @c LE_AVC_DOWNLOAD_COMPLETE | @c LE_AVC_DOWNLOAD_PENDING with zero bytes to download | Accept download |
234  * | @c LE_AVC_INSTALL_PENDING | @c LE_AVC_INSTALL_PENDING | Accept install |
235  * | @c LE_AVC_INSTALL_IN_PROGRESS | @c LE_AVC_INSTALL_PENDING | Accept install |
236  * | @c LE_AVC_UNINSTALL_PENDING | @c LE_AVC_UNINSTALL_PENDING | Accept uninstall |
237  * | @c LE_AVC_CONNECTION_PENDING | @c LE_AVC_CONNECTION_PENDING | Start session |
238  *
239  * @note If firmware is updated (via fwupdate tool) or new legato is installed (via instlegato),
240  * all suspend/resume information stored by avcService is erased. So if developer updates firmware
241  * or legato (via ethernet or ecm etc.) in the middle of any update initiated by avcService, this
242  * need to be cancelled and restarted again from airVantage server.
243  *
244  * @section c_le_avc_Timers Timers
245  *
246  * Polling timers sets the time that the Target will communicate with the AirVantage Server to check
247  * for new jobs. Retry timers will try and re-establish a connection to the AirVantage Server in
248  * accordance with the times that are declared.
249  *
250  * @subsection c_le_avc_PollingTimer Polling Timer
251  *
252  * The target will periodically initiate a connection to the AirVantage Server according to the
253  * settings for the polling timer to check if there are any pending jobs.
254  *
255  * If you need to disable the poling timer call le_avc_SetPollingTimer() and set the value to 0.
256  *
257  * The polling timer accepts ranges from 0 to 525600 minutes and is persistent across reboots and
258  * upgrades.
259  *
260  * To read the polling timer call: le_avc_GetPollingTimer()
261  *
262  * To write a new value to the polling timer call: le_avc_SetPollingTimer()
263  *
264  * Writing to the polling timer stops the current polling timer if it is running and starts a timer
265  * with the new value. The next connection will be initated when the new polling timer expires.
266  *
267  * @subsection c_le_avc_RetryTimers Retry Timers
268  *
269  * If an error occurs during a connection to the Device Services server (WWAN DATA establishment
270  * failed and an http error code is received) the embedded module will initiate a new connection
271  * according to the values defined in the retry timers.
272  *
273  * The timers are tried in sequence until a connection is established, or all enabled retry timers
274  * are exhausted. After all the enabled timers are exhausted, a new session must be initiated again
275  * by calling le_avc_startSession() after the expiry of the retry timer.
276  *
277  * The retry timer values are persistent (reboots and updates do not effect the retry timers).
278  * If you wish to disable a retry timer set the timer value
279  * to 0. You must always pass in at least 8 values to the retry timers.
280  *
281  * Retry timer values range from 0 to 20160 minutes.
282  * The function le_avc_GetRetryTimers() reads the retry timers in an array and the function
283  * le_avc_SetRetryTimers() writes the retry timers. When writing to the retry timers, values of
284  * all the 8 timers have to be defined.
285  *
286  * Example of calling retry timers, the session will be retried after 15 minutes, 1 hour, 4 hours,
287  * 8 hours, 1 day and 2 days, the last two retries are disabled:
288  * @code
289  * uint16_t RetryTimers[LE_AVC_NUM_RETRY_TIMERS] = {15, 60, 240, 480, 1440, 2880, 0, 0};
290  * le_avc_SetRetryTimers(RetryTimers, LE_AVC_NUM_RETRY_TIMERS);
291  * @endcode
292  *
293  * @section c_le_avc_reboot Device reboot
294  *
295  * The AirVantage server can request to reboot the device. If a reboot is requested a notification
296  * is sent to the registered Apps. The App can either accept the reboot with le_avc_AcceptReboot()
297  * or defer it for a specified number of minutes with le_avc_DeferReboot(). After the defer time
298  * has elapsed, the pending reboot notification will be re-sent. This allows the registered app to
299  * make a new decision or defer the reboot again.
300  *
301  * If no App has registered for notifications using le_avc_AddStatusEventHandler(), then
302  * any pending reboot will happen automatically.
303  *
304  * @section c_le_avc_GetCredentialStatus Credential Status
305  * The device is provisioned with bootstrap credentials from factory. The Device Management (DM)
306  * credentials are provisioned by AirVantage Bootstrap Server. This API is used to retrieve the
307  * status of credentials provisioned on the device.
308  *
309  * @section c_le_avc_connection Connection pending
310  *
311  * The AirVantage agent can request a connection to the AirVantage server, especially when a
312  * firmware package is installed (after a platform reboot) or device reboots in the middle of
313  * software update (after finishing software update on reboot). In this case a notification is sent
314  * to the control App, which can start the connection with le_avc_StartSession().
315  *
316  * @section c_le_avc_routing Data routing
317  *
318  * By default the AirVantage connection uses the default mobile data profile and the default route
319  * set by the data connection service.
320  *
321  * If the user wishes to control the network configuration, e.g. to use the AirVantage agent with
322  * multi-PDP contexts, they should first bind the application to the data connection service:
323  * @verbatim
324  bindings:
325  {
326  clientExe.clientComponent.le_data -> dataConnectionService.le_data
327  }
328  @endverbatim
329  *
330  * The data connection service should then be configured before launching the AirVantage connection:
331  * - le_data_SetCellularProfileIndex() allows to change the data profile to use.
332  * - le_data_GetDefaultRouteStatus() indicates if the default route is activated in the data
333  * connection service. This default route can be deactivated in the data connection service
334  * configuration database, as explained in @ref c_le_data_defaultRoute. If the default route is
335  * deactivated, the AirVantage agent will automatically add routes to be able to reach the
336  * AirVantage server through the connection used by AirVantage.
337  *
338  * @section c_le_avc_timeout Connection / Download timeout
339  *
340  * The AirVantage connector service will abort FOTA/SOTA download, if it takes more than
341  * 300 seconds to establish a connection. Download will also be aborted, if the download speed is
342  * too low (less than 100 bytes /second) for too long (for more than 1000 seconds).
343  * These values are chosen based on experiments on low speed network. There is no configuration
344  * for these timeouts.
345  *
346  * @section le_avcService_configdb Service Configuration Tree
347  * @copydoc le_avcService_configdbPage_Hide
348  *
349  *
350  * Copyright (C) Sierra Wireless Inc.
351  */
352 /**
353  * @interface le_avcService_configdbPage_Hide
354  *
355  * The configuration database path for the activityTimeout is:
356  * @verbatim
357  /
358  apps/
359  avcService/
360  activityTimeout
361  @endverbatim
362  *
363  *
364  * After an AirVantage session is started, if there's no activity between the device and the server
365  * within the timer interval, then LE_AVC_NO_UPDATE state will be returned to the app. However,
366  * this activity timeout can be overridden by setting an integer value for
367  * /apps/avcService/activityTimeout. The activity timer is initialized only when the @c avcService
368  * starts. If a valid entry >0 is found, then it will be used instead of the default value of 20
369  * seconds. The following steps should be used to set the activityTimeout.
370  *
371  *
372  * @verbatim
373  config set /apps/avcService/activityTimeout xx int
374  app restart avcService
375  @endverbatim
376  *
377  * @note
378  * Everytime a new value is written to activityTimeout, the avcService needs to be
379  * restarted to read the new value.
380  *
381  *
382  */
383 /**
384  * @file le_avc_interface.h
385  *
386  * Legato @ref c_le_avc include file.
387  *
388  * Copyright (C) Sierra Wireless Inc.
389  */
390 
391 #ifndef LE_AVC_INTERFACE_H_INCLUDE_GUARD
392 #define LE_AVC_INTERFACE_H_INCLUDE_GUARD
393 
394 
395 #include "legato.h"
396 
397 // Interface specific includes
398 #include "le_limit_interface.h"
399 
400 
401 //--------------------------------------------------------------------------------------------------
402 /**
403  * Type for handler called when a server disconnects.
404  */
405 //--------------------------------------------------------------------------------------------------
406 typedef void (*le_avc_DisconnectHandler_t)(void *);
407 
408 //--------------------------------------------------------------------------------------------------
409 /**
410  *
411  * Connect the current client thread to the service providing this API. Block until the service is
412  * available.
413  *
414  * For each thread that wants to use this API, either ConnectService or TryConnectService must be
415  * called before any other functions in this API. Normally, ConnectService is automatically called
416  * for the main thread, but not for any other thread. For details, see @ref apiFilesC_client.
417  *
418  * This function is created automatically.
419  */
420 //--------------------------------------------------------------------------------------------------
422 (
423  void
424 );
425 
426 //--------------------------------------------------------------------------------------------------
427 /**
428  *
429  * Try to connect the current client thread to the service providing this API. Return with an error
430  * if the service is not available.
431  *
432  * For each thread that wants to use this API, either ConnectService or TryConnectService must be
433  * called before any other functions in this API. Normally, ConnectService is automatically called
434  * for the main thread, but not for any other thread. For details, see @ref apiFilesC_client.
435  *
436  * This function is created automatically.
437  *
438  * @return
439  * - LE_OK if the client connected successfully to the service.
440  * - LE_UNAVAILABLE if the server is not currently offering the service to which the client is
441  * bound.
442  * - LE_NOT_PERMITTED if the client interface is not bound to any service (doesn't have a binding).
443  * - LE_COMM_ERROR if the Service Directory cannot be reached.
444  */
445 //--------------------------------------------------------------------------------------------------
447 (
448  void
449 );
450 
451 //--------------------------------------------------------------------------------------------------
452 /**
453  * Set handler called when server disconnection is detected.
454  *
455  * When a server connection is lost, call this handler then exit with LE_FATAL. If a program wants
456  * to continue without exiting, it should call longjmp() from inside the handler.
457  */
458 //--------------------------------------------------------------------------------------------------
460 (
461  le_avc_DisconnectHandler_t disconnectHandler,
462  void *contextPtr
463 );
464 
465 //--------------------------------------------------------------------------------------------------
466 /**
467  *
468  * Disconnect the current client thread from the service providing this API.
469  *
470  * Normally, this function doesn't need to be called. After this function is called, there's no
471  * longer a connection to the service, and the functions in this API can't be used. For details, see
472  * @ref apiFilesC_client.
473  *
474  * This function is created automatically.
475  */
476 //--------------------------------------------------------------------------------------------------
478 (
479  void
480 );
481 
482 
483 //--------------------------------------------------------------------------------------------------
484 /**
485  * Maximum APN name length without NULL terminator.
486  */
487 //--------------------------------------------------------------------------------------------------
488 #define LE_AVC_APN_NAME_MAX_LEN 48
489 
490 //--------------------------------------------------------------------------------------------------
491 /**
492  * Maximum APN name length including NULL terminator.
493  */
494 //--------------------------------------------------------------------------------------------------
495 #define LE_AVC_APN_NAME_MAX_LEN_BYTES 49
496 
497 //--------------------------------------------------------------------------------------------------
498 /**
499  * Maximum user name length without NULL terminator.
500  */
501 //--------------------------------------------------------------------------------------------------
502 #define LE_AVC_USERNAME_MAX_LEN 28
503 
504 //--------------------------------------------------------------------------------------------------
505 /**
506  * Maximum user name length including NULL terminator.
507  */
508 //--------------------------------------------------------------------------------------------------
509 #define LE_AVC_USERNAME_MAX_LEN_BYTES 29
510 
511 //--------------------------------------------------------------------------------------------------
512 /**
513  * Maximum password length without NULL terminator..
514  */
515 //--------------------------------------------------------------------------------------------------
516 #define LE_AVC_PASSWORD_MAX_LEN 28
517 
518 //--------------------------------------------------------------------------------------------------
519 /**
520  * Maximum password length including NULL terminator.
521  */
522 //--------------------------------------------------------------------------------------------------
523 #define LE_AVC_PASSWORD_MAX_LEN_BYTES 29
524 
525 //--------------------------------------------------------------------------------------------------
526 /**
527  * Maximum number of retry timers.
528  */
529 //--------------------------------------------------------------------------------------------------
530 #define LE_AVC_NUM_RETRY_TIMERS 8
531 
532 //--------------------------------------------------------------------------------------------------
533 /**
534  * Polling timer value range in minutes. 525600 minutes = 1 year.
535  */
536 //--------------------------------------------------------------------------------------------------
537 #define LE_AVC_POLLING_TIMER_MAX_VAL 525600
538 
539 //--------------------------------------------------------------------------------------------------
540 /**
541  */
542 //--------------------------------------------------------------------------------------------------
543 #define LE_AVC_POLLING_TIMER_MIN_VAL 0
544 
545 //--------------------------------------------------------------------------------------------------
546 /**
547  * Retry timer value range in minutes. 20160 minutes = 2 weeks.
548  */
549 //--------------------------------------------------------------------------------------------------
550 #define LE_AVC_RETRY_TIMER_MAX_VAL 20160
551 
552 //--------------------------------------------------------------------------------------------------
553 /**
554  */
555 //--------------------------------------------------------------------------------------------------
556 #define LE_AVC_RETRY_TIMER_MIN_VAL 0
557 
558 //--------------------------------------------------------------------------------------------------
559 /**
560  * Default HTTP status.
561  */
562 //--------------------------------------------------------------------------------------------------
563 #define LE_AVC_HTTP_STATUS_INVALID 65535
564 
565 //--------------------------------------------------------------------------------------------------
566 /**
567  * Status of session or update
568  *
569  * If an update is pending, it must first be downloaded and then installed.
570  */
571 //--------------------------------------------------------------------------------------------------
572 typedef enum
573 {
575  ///< No updates pending
577  ///< Update pending download
579  ///< Download in progress
581  ///< Download has completed
583  ///< An error occurred downloading the update
585  ///< Install is pending (implies download complete)
587  ///< Install in progress
589  ///< Update has been successfully installed
591  ///< An error occurred installing the update
593  ///< Uninstall is pending
595  ///< Uninstall in progress
597  ///< App has been successfully uninstalled
599  ///< An error occurred uninstalling the update
601  ///< Session with AV server started
603  ///< Session with AV server stopped
605  ///< Device reboot is pending
607  ///< Connection to the server is required. This is necessary when
608  ///< firmware package is installed (after a platform reboot). Also
609  ///< necessary after software update if device reboots(or session stops)
610  ///< in the middle of software update.
612  ///< Authentication with AV server started
614  ///< Authentication with AV server failed
616  ///< Package is certified sent by a trusted server
618  ///< Package is not certified sent by a trusted server
619 }
621 
622 
623 //--------------------------------------------------------------------------------------------------
624 /**
625  * Operations which require user agreement
626  */
627 //--------------------------------------------------------------------------------------------------
628 typedef enum
629 {
631  ///< User agreement for connection
633  ///< User agreement for download
635  ///< User agreement for install
637  ///< User agreement for uninstall
639  ///< User agreement for reboot
640 }
642 
643 
644 //--------------------------------------------------------------------------------------------------
645 /**
646  * Request to open or close avms session.
647  */
648 //--------------------------------------------------------------------------------------------------
649 typedef enum
650 {
652  ///< Request by user app to open AV session
654  ///< Request by user app to close AV session
655 }
657 
658 
659 //--------------------------------------------------------------------------------------------------
660 /**
661  * The type of pending update
662  */
663 //--------------------------------------------------------------------------------------------------
664 typedef enum
665 {
666  LE_AVC_UNKNOWN_UPDATE = 0,
667  ///<
668  LE_AVC_FIRMWARE_UPDATE = 1,
669  ///<
670  LE_AVC_FRAMEWORK_UPDATE = 2,
671  ///<
672  LE_AVC_APPLICATION_UPDATE = 3
673  ///<
674 }
676 
677 
678 //--------------------------------------------------------------------------------------------------
679 /**
680  * Error code used to provide diagnostic information after a failure (includes both download and
681  * install failure).
682  *
683  * @note
684  * Additional information may also be available in the target device's system log.
685  */
686 //--------------------------------------------------------------------------------------------------
687 typedef enum
688 {
690  ///< No error.
692  ///< Encountered a bad package.
694  ///< Something failed while doing install/download.
696  ///< Security check failure while installing the package.
697 }
699 
700 
701 //--------------------------------------------------------------------------------------------------
702 /**
703  * Session type indicates whether the device is connected to the bootstrap server or the
704  * device management server.
705  */
706 //--------------------------------------------------------------------------------------------------
707 typedef enum
708 {
710  ///< Bootstrap session.
712  ///< Device Management session.
714  ///< Session type invalid.
715 }
717 
718 
719 //--------------------------------------------------------------------------------------------------
720 /**
721  * Status of the device credentials
722  */
723 //--------------------------------------------------------------------------------------------------
724 typedef enum
725 {
727  ///< Neither Bootstrap nor Device Management
728  ///< credential is provisioned.
730  ///< Bootstrap credential is provisioned but Device
731  ///< Management credential is not provisioned.
733  ///< Device Management credential is provisioned.
734 }
736 
737 
738 //--------------------------------------------------------------------------------------------------
739 /**
740  * Reference type used by Add/Remove functions for EVENT 'le_avc_StatusEvent'
741  */
742 //--------------------------------------------------------------------------------------------------
743 typedef struct le_avc_StatusEventHandler* le_avc_StatusEventHandlerRef_t;
744 
745 
746 //--------------------------------------------------------------------------------------------------
747 /**
748  * Reference type used by Add/Remove functions for EVENT 'le_avc_SessionRequestEvent'
749  */
750 //--------------------------------------------------------------------------------------------------
751 typedef struct le_avc_SessionRequestEventHandler* le_avc_SessionRequestEventHandlerRef_t;
752 
753 
754 //--------------------------------------------------------------------------------------------------
755 /**
756  * Reference returned by BlockInstall function and used by UnblockInstall function
757  */
758 //--------------------------------------------------------------------------------------------------
759 typedef struct le_avc_BlockRequest* le_avc_BlockRequestRef_t;
760 
761 
762 //--------------------------------------------------------------------------------------------------
763 /**
764  * Handler for update availability status
765  */
766 //--------------------------------------------------------------------------------------------------
767 typedef void (*le_avc_StatusHandlerFunc_t)
768 (
769  le_avc_Status_t updateStatus,
770  ///< status of pending update, if available
771  int32_t totalNumBytes,
772  ///< Total number of bytes to be downloaded
773  ///< only valid when updateStatus is one of
774  ///< DOWNLOAD_PENDING, DOWNLOAD_IN_PROGRESS or DOWNLOAD_COMPLETE.
775  ///< returns -1 if value is unknown
776  int32_t dloadProgress,
777  ///< download completion in percentage
778  ///< only valid when updateStatus is one of
779  ///< DOWNLOAD_PENDING, DOWNLOAD_IN_PROGRESS or DOWNLOAD_COMPLETE.
780  ///< returns -1 if value is unknown
781  void* contextPtr
782  ///<
783 );
784 
785 //--------------------------------------------------------------------------------------------------
786 /**
787  * Handler for receiving session open or close request.
788  */
789 //--------------------------------------------------------------------------------------------------
791 (
792  le_avc_SessionRequest_t request,
793  ///< Request to open or close AV session
794  void* contextPtr
795  ///<
796 );
797 
798 //--------------------------------------------------------------------------------------------------
799 /**
800  * Add handler function for EVENT 'le_avc_StatusEvent'
801  *
802  * This event provides information on update availability status
803  */
804 //--------------------------------------------------------------------------------------------------
806 (
807  le_avc_StatusHandlerFunc_t handlerPtr,
808  ///< [IN]
809  void* contextPtr
810  ///< [IN]
811 );
812 
813 //--------------------------------------------------------------------------------------------------
814 /**
815  * Remove handler function for EVENT 'le_avc_StatusEvent'
816  */
817 //--------------------------------------------------------------------------------------------------
819 (
821  ///< [IN]
822 );
823 
824 //--------------------------------------------------------------------------------------------------
825 /**
826  * Add handler function for EVENT 'le_avc_SessionRequestEvent'
827  *
828  * This event provides information on session open or close request.
829  */
830 //--------------------------------------------------------------------------------------------------
832 (
834  ///< [IN]
835  void* contextPtr
836  ///< [IN]
837 );
838 
839 //--------------------------------------------------------------------------------------------------
840 /**
841  * Remove handler function for EVENT 'le_avc_SessionRequestEvent'
842  */
843 //--------------------------------------------------------------------------------------------------
845 (
847  ///< [IN]
848 );
849 
850 //--------------------------------------------------------------------------------------------------
851 /**
852  * Start a session with the AirVantage server
853  *
854  * This will cause a query to be sent to the server, for pending updates.
855  *
856  * @return
857  * - LE_OK if connection request has been sent.
858  * - LE_FAULT on failure
859  * - LE_DUPLICATE if already connected.
860  */
861 //--------------------------------------------------------------------------------------------------
863 (
864  void
865 );
866 
867 //--------------------------------------------------------------------------------------------------
868 /**
869  * Stop a session with the AirVantage server
870  *
871  * If a download is in progress, then this suspends the download.
872  *
873  * @return
874  * - LE_OK on success
875  * - LE_FAULT on failure
876  */
877 //--------------------------------------------------------------------------------------------------
879 (
880  void
881 );
882 
883 //--------------------------------------------------------------------------------------------------
884 /**
885  * Send a specific message to the server to be sure that the route between the device and the server
886  * is available.
887  * This API needs to be called when any package download is over (successfully or not) and before
888  * sending any notification on asset data to the server.
889  *
890  * @return
891  * - LE_OK when the treatment is launched
892  * - LE_FAULT on failure
893  * - LE_UNSUPPORTED when the API is not supported
894  *
895  */
896 //--------------------------------------------------------------------------------------------------
898 (
899  void
900 );
901 
902 //--------------------------------------------------------------------------------------------------
903 /**
904  * Defer the currently pending connection, for the given number of minutes
905  *
906  * @return
907  * - LE_OK on success
908  * - LE_FAULT on failure
909  */
910 //--------------------------------------------------------------------------------------------------
912 (
913  uint32_t deferMinutes
914  ///< [IN]
915 );
916 
917 //--------------------------------------------------------------------------------------------------
918 /**
919  * Accept the currently pending download
920  *
921  * @return
922  * - LE_OK on success
923  * - LE_FAULT on failure
924  */
925 //--------------------------------------------------------------------------------------------------
927 (
928  void
929 );
930 
931 //--------------------------------------------------------------------------------------------------
932 /**
933  * Defer the currently pending download, for the given number of minutes
934  *
935  * @return
936  * - LE_OK on success
937  * - LE_FAULT on failure
938  */
939 //--------------------------------------------------------------------------------------------------
941 (
942  uint32_t deferMinutes
943  ///< [IN]
944 );
945 
946 //--------------------------------------------------------------------------------------------------
947 /**
948  * Accept the currently pending install
949  *
950  * @return
951  * - LE_OK on success
952  * - LE_FAULT on failure
953  */
954 //--------------------------------------------------------------------------------------------------
956 (
957  void
958 );
959 
960 //--------------------------------------------------------------------------------------------------
961 /**
962  * Defer the currently pending install
963  *
964  * @return
965  * - LE_OK on success
966  * - LE_FAULT on failure
967  */
968 //--------------------------------------------------------------------------------------------------
970 (
971  uint32_t deferMinutes
972  ///< [IN]
973 );
974 
975 //--------------------------------------------------------------------------------------------------
976 /**
977  * Accept the currently pending uninstall
978  *
979  * @return
980  * - LE_OK on success
981  * - LE_FAULT on failure
982  */
983 //--------------------------------------------------------------------------------------------------
985 (
986  void
987 );
988 
989 //--------------------------------------------------------------------------------------------------
990 /**
991  * Defer the currently pending uninstall
992  *
993  * @return
994  * - LE_OK on success
995  * - LE_FAULT on failure
996  */
997 //--------------------------------------------------------------------------------------------------
999 (
1000  uint32_t deferMinutes
1001  ///< [IN]
1002 );
1003 
1004 //--------------------------------------------------------------------------------------------------
1005 /**
1006  * Accept the currently pending reboot
1007  *
1008  * @return
1009  * - LE_OK on success
1010  * - LE_FAULT on failure
1011  */
1012 //--------------------------------------------------------------------------------------------------
1014 (
1015  void
1016 );
1017 
1018 //--------------------------------------------------------------------------------------------------
1019 /**
1020  * Defer the currently pending reboot
1021  *
1022  * @return
1023  * - LE_OK on success
1024  * - LE_FAULT on failure
1025  */
1026 //--------------------------------------------------------------------------------------------------
1028 (
1029  uint32_t deferMinutes
1030  ///< [IN]
1031 );
1032 
1033 //--------------------------------------------------------------------------------------------------
1034 /**
1035  * Get the update type of the currently pending update
1036  *
1037  * @return
1038  * - LE_OK on success
1039  * - LE_FAULT if not available
1040  */
1041 //--------------------------------------------------------------------------------------------------
1043 (
1044  le_avc_UpdateType_t* updateTypePtr
1045  ///< [OUT]
1046 );
1047 
1048 //--------------------------------------------------------------------------------------------------
1049 /**
1050  * Get the name for the currently pending app update
1051  *
1052  * @return
1053  * - LE_OK on success
1054  * - LE_FAULT if not available, or isn't APPL_UPDATE type
1055  */
1056 //--------------------------------------------------------------------------------------------------
1058 (
1059  char* updateName,
1060  ///< [OUT]
1061  size_t updateNameSize
1062  ///< [IN]
1063 );
1064 
1065 //--------------------------------------------------------------------------------------------------
1066 /**
1067  * Prevent any pending updates from being installed.
1068  *
1069  * @return
1070  * - Reference for block update request (to be used later for unblocking updates)
1071  * - NULL if the operation was not successful
1072  */
1073 //--------------------------------------------------------------------------------------------------
1075 (
1076  void
1077 );
1078 
1079 //--------------------------------------------------------------------------------------------------
1080 /**
1081  * Allow any pending updates to be installed
1082  */
1083 //--------------------------------------------------------------------------------------------------
1085 (
1086  le_avc_BlockRequestRef_t blockRef
1087  ///< [IN] block request ref returned by le_avc_BlockInstall
1088 );
1089 
1090 //--------------------------------------------------------------------------------------------------
1091 /**
1092  * Function to get error code when update fails.
1093  *
1094  * @return
1095  * - Error code of encountered error.
1096  * - ERR_NONE if update is in any other state.
1097  */
1098 //--------------------------------------------------------------------------------------------------
1100 (
1101  void
1102 );
1103 
1104 //--------------------------------------------------------------------------------------------------
1105 /**
1106  * Function to read the current session type, or the last session type if there is no
1107  * active session.
1108  *
1109  * @return
1110  * - SessionType
1111  */
1112 //--------------------------------------------------------------------------------------------------
1114 (
1115  void
1116 );
1117 
1118 //--------------------------------------------------------------------------------------------------
1119 /**
1120  * Function to read the http status of the last download.
1121  *
1122  * @return
1123  * - HttpStatus as defined in RFC 7231, Section 6.
1124  */
1125 //--------------------------------------------------------------------------------------------------
1126 uint16_t le_avc_GetHttpStatus
1127 (
1128  void
1129 );
1130 
1131 //--------------------------------------------------------------------------------------------------
1132 /**
1133  * Function to read the polling timer.
1134  *
1135  * @return
1136  * - LE_OK on success
1137  * - LE_FAULT if not available
1138  * - LE_OUT_OF_RANGE if the polling timer value is out of range (0 to 525600).
1139  */
1140 //--------------------------------------------------------------------------------------------------
1142 (
1143  uint32_t* pollingTimerPtr
1144  ///< [OUT] Polling timer
1145 );
1146 
1147 //--------------------------------------------------------------------------------------------------
1148 /**
1149  * Function to read the retry timers.
1150  *
1151  * @return
1152  * - LE_OK on success.
1153  * - LE_FAULT if not able to read the timers.
1154  * - LE_OUT_OF_RANGE if one of the retry timers is out of range (0 to 20160).
1155  */
1156 //--------------------------------------------------------------------------------------------------
1158 (
1159  uint16_t* timerValuePtr,
1160  ///< [OUT] Array of the retry timers.
1161  size_t* timerValueSizePtr
1162  ///< [INOUT]
1163 );
1164 
1165 //--------------------------------------------------------------------------------------------------
1166 /**
1167  * Function to read APN configuration.
1168  *
1169  * @return
1170  * - LE_OK on success.
1171  * - LE_FAULT if there is any error while reading.
1172  * - LE_OVERFLOW if the buffer provided is too small.
1173  */
1174 //--------------------------------------------------------------------------------------------------
1176 (
1177  char* apnName,
1178  ///< [OUT]
1179  size_t apnNameSize,
1180  ///< [IN]
1181  char* userName,
1182  ///< [OUT]
1183  size_t userNameSize,
1184  ///< [IN]
1185  char* userPwd,
1186  ///< [OUT]
1187  size_t userPwdSize
1188  ///< [IN]
1189 );
1190 
1191 //--------------------------------------------------------------------------------------------------
1192 /**
1193  * Function to write APN configuration.
1194  *
1195  * @return
1196  * - LE_OK on success.
1197  * - LE_OVERFLOW if one of the input strings is too long.
1198  */
1199 //--------------------------------------------------------------------------------------------------
1201 (
1202  const char* LE_NONNULL apnName,
1203  ///< [IN]
1204  const char* LE_NONNULL userName,
1205  ///< [IN]
1206  const char* LE_NONNULL userPwd
1207  ///< [IN]
1208 );
1209 
1210 //--------------------------------------------------------------------------------------------------
1211 /**
1212  * Function to set the polling timer.
1213  *
1214  * @return
1215  * - LE_OK on success.
1216  * - LE_OUT_OF_RANGE if the polling timer value is out of range (0 to 525600).
1217  */
1218 //--------------------------------------------------------------------------------------------------
1220 (
1221  uint32_t pollingTimer
1222  ///< [IN] Polling timer
1223 );
1224 
1225 //--------------------------------------------------------------------------------------------------
1226 /**
1227  * Function to set the retry timers.
1228  *
1229  * @return
1230  * - LE_OK on success.
1231  * - LE_FAULT if not able to set the timers.
1232  * - LE_OUT_OF_RANGE if one of the retry timers is out of range (0 to 20160).
1233  */
1234 //--------------------------------------------------------------------------------------------------
1236 (
1237  const uint16_t* timerValuePtr,
1238  ///< [IN] Array of 8 retry timers.
1239  size_t timerValueSize
1240  ///< [IN]
1241 );
1242 
1243 //--------------------------------------------------------------------------------------------------
1244 /**
1245  * Function to retrieve status of the credentials provisioned on the device.
1246  *
1247  * @return
1248  * LE_AVC_NO_CREDENTIAL_PROVISIONED
1249  * - If neither Bootstrap nor Device Management credential is provisioned.
1250  * LE_AVC_BS_CREDENTIAL_PROVISIONED
1251  * - If Bootstrap credential is provisioned but Device Management credential is
1252  * not provisioned.
1253  * LE_AVC_DM_CREDENTIAL_PROVISIONED
1254  * - If Device management key is provisioned.
1255  */
1256 //--------------------------------------------------------------------------------------------------
1258 (
1259  void
1260 );
1261 
1262 //--------------------------------------------------------------------------------------------------
1263 /**
1264  * Function to set user agreements for download, install, reboot, connection and uninstall.
1265  *
1266  * @return
1267  * - LE_OK on success.
1268  * - LE_FAULT if failed to configure user agreement.
1269  */
1270 //--------------------------------------------------------------------------------------------------
1272 (
1273  le_avc_UserAgreement_t updateStatus,
1274  ///< [IN] Operation for which user agreements has to be set.
1275  bool enable
1276  ///< [IN] true = enable, false = disable.
1277 );
1278 
1279 //--------------------------------------------------------------------------------------------------
1280 /**
1281  * Function to get user agreements for download, install, reboot, connection and uninstall.
1282  *
1283  * @return
1284  * - LE_OK on success.
1285  * - LE_FAULT if failed to read user agreement state.
1286  */
1287 //--------------------------------------------------------------------------------------------------
1289 (
1290  le_avc_UserAgreement_t updateStatus,
1291  ///< [IN] Operation for which user agreements has to be read.
1292  bool* enablePtr
1293  ///< [OUT] true = enable, false = disable.
1294 );
1295 
1296 #endif // LE_AVC_INTERFACE_H_INCLUDE_GUARD
void le_avc_RemoveSessionRequestEventHandler(le_avc_SessionRequestEventHandlerRef_t handlerRef)
le_result_t le_avc_GetPollingTimer(uint32_t *pollingTimerPtr)
Uninstall in progress.
Definition: le_avc_interface.h:594
void(* le_avc_StatusHandlerFunc_t)(le_avc_Status_t updateStatus, int32_t totalNumBytes, int32_t dloadProgress, void *contextPtr)
Definition: le_avc_interface.h:768
Uninstall is pending.
Definition: le_avc_interface.h:592
Request by user app to close AV session.
Definition: le_avc_interface.h:653
User agreement for reboot.
Definition: le_avc_interface.h:638
User agreement for connection.
Definition: le_avc_interface.h:630
An error occurred installing the update.
Definition: le_avc_interface.h:590
le_result_t le_avc_DeferReboot(uint32_t deferMinutes)
le_result_t le_avc_SetRetryTimers(const uint16_t *timerValuePtr, size_t timerValueSize)
le_avc_SessionRequestEventHandlerRef_t le_avc_AddSessionRequestEventHandler(le_avc_SessionRequestHandlerFunc_t handlerPtr, void *contextPtr)
le_result_t le_avc_SetApnConfig(const char *LE_NONNULL apnName, const char *LE_NONNULL userName, const char *LE_NONNULL userPwd)
le_result_t le_avc_DeferConnect(uint32_t deferMinutes)
le_result_t
Definition: le_basics.h:35
Package is certified sent by a trusted server.
Definition: le_avc_interface.h:615
void(* le_avc_SessionRequestHandlerFunc_t)(le_avc_SessionRequest_t request, void *contextPtr)
Definition: le_avc_interface.h:791
le_result_t le_avc_AcceptReboot(void)
An error occurred uninstalling the update.
Definition: le_avc_interface.h:598
Install in progress.
Definition: le_avc_interface.h:586
void le_avc_UnblockInstall(le_avc_BlockRequestRef_t blockRef)
Package is not certified sent by a trusted server.
Definition: le_avc_interface.h:617
void le_avc_SetServerDisconnectHandler(le_avc_DisconnectHandler_t disconnectHandler, void *contextPtr)
le_avc_StatusEventHandlerRef_t le_avc_AddStatusEventHandler(le_avc_StatusHandlerFunc_t handlerPtr, void *contextPtr)
struct le_avc_SessionRequestEventHandler * le_avc_SessionRequestEventHandlerRef_t
Definition: le_avc_interface.h:751
le_avc_SessionRequest_t
Definition: le_avc_interface.h:649
An error occurred downloading the update.
Definition: le_avc_interface.h:582
le_avc_UserAgreement_t
Definition: le_avc_interface.h:628
le_result_t le_avc_DeferUninstall(uint32_t deferMinutes)
Install is pending (implies download complete)
Definition: le_avc_interface.h:584
le_result_t le_avc_AcceptUninstall(void)
le_result_t le_avc_GetUpdateType(le_avc_UpdateType_t *updateTypePtr)
void(* le_avc_DisconnectHandler_t)(void *)
Definition: le_avc_interface.h:406
Session with AV server stopped.
Definition: le_avc_interface.h:602
Session with AV server started.
Definition: le_avc_interface.h:600
le_avc_SessionType_t
Definition: le_avc_interface.h:707
Download in progress.
Definition: le_avc_interface.h:578
Definition: le_avc_interface.h:726
Device reboot is pending.
Definition: le_avc_interface.h:604
Session type invalid.
Definition: le_avc_interface.h:713
le_result_t le_avc_StartSession(void)
le_result_t le_avc_StopSession(void)
void le_avc_RemoveStatusEventHandler(le_avc_StatusEventHandlerRef_t handlerRef)
Authentication with AV server started.
Definition: le_avc_interface.h:611
le_result_t le_avc_GetUserAgreement(le_avc_UserAgreement_t updateStatus, bool *enablePtr)
Update pending download.
Definition: le_avc_interface.h:576
User agreement for uninstall.
Definition: le_avc_interface.h:636
le_result_t le_avc_AcceptDownload(void)
le_result_t le_avc_TryConnectService(void)
le_result_t le_avc_CheckRoute(void)
le_result_t le_avc_DeferInstall(uint32_t deferMinutes)
Update has been successfully installed.
Definition: le_avc_interface.h:588
User agreement for install.
Definition: le_avc_interface.h:634
le_result_t le_avc_AcceptInstall(void)
Something failed while doing install/download.
Definition: le_avc_interface.h:693
User agreement for download.
Definition: le_avc_interface.h:632
Bootstrap session.
Definition: le_avc_interface.h:709
struct le_avc_BlockRequest * le_avc_BlockRequestRef_t
Definition: le_avc_interface.h:759
le_avc_BlockRequestRef_t le_avc_BlockInstall(void)
void le_avc_DisconnectService(void)
le_avc_SessionType_t le_avc_GetSessionType(void)
Device Management session.
Definition: le_avc_interface.h:711
No error.
Definition: le_avc_interface.h:689
le_result_t le_avc_SetUserAgreement(le_avc_UserAgreement_t updateStatus, bool enable)
Definition: le_avc_interface.h:729
Definition: le_avc_interface.h:606
le_result_t le_avc_GetApnConfig(char *apnName, size_t apnNameSize, char *userName, size_t userNameSize, char *userPwd, size_t userPwdSize)
le_avc_UpdateType_t
Definition: le_avc_interface.h:664
le_avc_CredentialStatus_t le_avc_GetCredentialStatus(void)
le_result_t le_avc_DeferDownload(uint32_t deferMinutes)
le_result_t le_avc_SetPollingTimer(uint32_t pollingTimer)
Security check failure while installing the package.
Definition: le_avc_interface.h:695
Request by user app to open AV session.
Definition: le_avc_interface.h:651
le_result_t le_avc_GetAppUpdateName(char *updateName, size_t updateNameSize)
le_avc_ErrorCode_t
Definition: le_avc_interface.h:687
Download has completed.
Definition: le_avc_interface.h:580
le_result_t le_avc_GetRetryTimers(uint16_t *timerValuePtr, size_t *timerValueSizePtr)
No updates pending.
Definition: le_avc_interface.h:574
le_avc_CredentialStatus_t
Definition: le_avc_interface.h:724
uint16_t le_avc_GetHttpStatus(void)
struct le_avc_StatusEventHandler * le_avc_StatusEventHandlerRef_t
Definition: le_avc_interface.h:743
Encountered a bad package.
Definition: le_avc_interface.h:691
le_avc_Status_t
Definition: le_avc_interface.h:572
App has been successfully uninstalled.
Definition: le_avc_interface.h:596
Device Management credential is provisioned.
Definition: le_avc_interface.h:732
Authentication with AV server failed.
Definition: le_avc_interface.h:613
le_avc_ErrorCode_t le_avc_GetErrorCode(void)
void le_avc_ConnectService(void)