

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Migrazione dalla versione 1 alla versione 3 per le applicazioni OTA
<a name="porting-migration-ota"></a>

Questa guida ti aiuterà a migrare la tua applicazione dalla versione 1 alla versione 3 della libreria OTA. 

**Nota**  
La versione OTA 2 APIs è la stessa di OTA v3 APIs, quindi se la tua applicazione utilizza la versione 2 della APIs , non sono necessarie modifiche per le chiamate API, ma ti consigliamo di integrare la versione 3 della libreria. 

Le demo per OTA versione 3 sono disponibili qui:
+ [ota\$1demo\$1core\$1mqtt](https://github.com/aws/amazon-freertos/tree/main/demos/ota/ota_demo_core_mqtt).
+ [ota\$1demo\$1core\$1http](https://github.com/aws/amazon-freertos/tree/main/demos/ota/ota_demo_core_http).
+ [ota\$1blau](https://github.com/aws/amazon-freertos/tree/main/demos/ble/ota_ble).

## Riepilogo delle modifiche alle API
<a name="porting-migration-ota-summary"></a>


**Riepilogo delle modifiche alle API tra la versione 1 e la versione 3 di OTA Library**  

|  API OTA versione 1  |  API OTA versione 3  |  Descrizione delle modifiche  | 
| --- | --- | --- | 
|  OTA\$1 AgentInit  |  OTA\$1init  |  I parametri di input vengono modificati così come il valore restituito dalla funzione a causa di modifiche nell'implementazione in OTA v3. Per i dettagli, consulta la sezione dedicata a OTA\$1Init riportata di seguito.  | 
|  OTA\$1 AgentShutdown  |  OTA\$1Shutdown  |  Modifica dei parametri di input, incluso un parametro aggiuntivo per l'annullamento opzionale dell'iscrizione agli argomenti MQTT. Per ulteriori informazioni, consultate la sezione dedicata a OTA\$1Shutdown riportata di seguito.  | 
|  OTA\$1 GetAgentState  |  OTA\$1 GetState  |  Il nome dell'API viene modificato senza modifiche al parametro di input. Il valore restituito è lo stesso ma l'enum e i membri vengono rinominati. Per maggiori dettagli, consulta la sezione dedicata a OTA\$1 GetState riportata di seguito.   | 
|  N/A  |  OTA\$1 GetStatistics  |  Aggiunta una nuova API che sostituisce OTA\$1, OTA\$1, APIs OTA\$1GetPacketsReceived, GetPacketsQueued OTA\$1. GetPacketsProcessed GetPacketsDropped Per maggiori dettagli, consulta la sezione dedicata a OTA\$1 riportata di seguito. GetStatistics   | 
|  OTA\$1 GetPacketsReceived  |  N/A  |  Questa API è stata rimossa dalla versione 3 e sostituita da OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsQueued  |  N/A  |  Questa API è stata rimossa dalla versione 3 e sostituita da OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsProcessed  |  N/A  |  Questa API è stata rimossa dalla versione 3 e sostituita da OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsDropped  |  N/A  |  Questa API è stata rimossa dalla versione 3 e sostituita da OTA\$1. GetStatistics  | 
|  OTA\$1 ActivateNewImage  |  OTA\$1 ActivateNewImage  |  I parametri di input sono gli stessi ma il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. Consulta la sezione relativa a OTA\$1 ActivateNewImage per i dettagli.  | 
|  OTA\$1 SetImageState  |  OTA\$1 SetImageState  |  I parametri di input sono gli stessi e rinominati, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. Consulta la sezione relativa a OTA\$1 per i dettagliSetImageState .  | 
|  OTA\$1 GetImageState  |  OTA\$1 GetImageState  |  I parametri di input sono gli stessi, l'enum restituito viene rinominato nella versione 3 della libreria OTA. Consulta la sezione relativa a OTA\$1 per i dettagliGetImageState .  | 
|  OTA\$1Suspend  |  OTA\$1sospendere  |  I parametri di input sono gli stessi, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. Per i dettagli, consulta la sezione relativa a OTA\$1Suspend.  | 
|  OTA\$1Resume  |  OTA\$1curriculum  |  Il parametro di input per la connessione viene rimosso quando la connessione viene gestita nella demo/applicazione OTA, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. Per i dettagli, consulta la sezione relativa a OTA\$1Resume.  | 
|  OTA\$1 CheckForUpdate  |  OTA\$1 CheckForUpdate  |  I parametri di input sono gli stessi, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. Consulta la sezione relativa a OTA\$1 CheckForUpdate per i dettagli.  | 
|  N/A  |  OTA\$1 EventProcessingTask  |  È stata aggiunta una nuova API ed è il ciclo di eventi principale per gestire gli eventi per l'aggiornamento OTA e deve essere richiamato dall'attività dell'applicazione. Consulta la sezione dedicata a OTA\$1 EventProcessingTask per i dettagli.  | 
|  N/A  |  OTA\$1 SignalEvent  |  È stata aggiunta una nuova API che aggiunge l'evento in fondo alla coda degli eventi OTA e viene utilizzata dai moduli OTA interni per segnalare l'attività dell'agente. Consulta la sezione dedicata a OTA\$1 SignalEvent per i dettagli.  | 
|  N/A  |  OTA\$1ERR\$1STRError  |  Nuova API per la conversione del codice di errore in stringa per gli errori OTA.  | 
|  N/A  |  OTA\$1 \$1strerror JobParse  |  Nuova API per la conversione del codice di errore in stringa per gli errori di Job Parsing.  | 
|  N/A  |  OTA\$1 \$1strerror OsStatus  |  Nuova API per la conversione del codice di stato in stringa per lo stato della porta del sistema operativo OTA.  | 
|  N/A  |  OTA\$1 \$1strerror PalStatus  |  Nuova API per la conversione del codice di stato in stringa per lo stato della porta OTA PAL.  | 

## Descrizione delle modifiche richieste
<a name="porting-migration-ota-description"></a>

### OTA\$1Init
<a name="porting-migration-ota-init"></a>

Quando si inizializza l'agente OTA nella versione 1, viene utilizzata l'`OTA_AgentInit`API che accetta come input i parametri per il contesto di connessione, il nome dell'oggetto, il callback completo e il timeout.

```
OTA_State_t OTA_AgentInit( void * pvConnectionContext,
                           const uint8_t * pucThingName,
                           pxOTACompleteCallback_t xFunc,
                           TickType_t xTicksToWait );
```

Questa API è ora modificata `OTA_Init` con i parametri per i buffer necessari per le interfacce ota, ota, il nome dell'oggetto e il callback dell'applicazione. 

```
OtaErr_t OTA_Init( OtaAppBuffer_t * pOtaBuffer,
                   OtaInterfaces_t * pOtaInterfaces,
                   const uint8_t * pThingName,
                   OtaAppCallback OtaAppCallback );
```

**Parametri di input rimossi - **    
**pvConnectionContext - **  
Il contesto di connessione viene rimosso perché la versione 3 della libreria OTA non richiede il passaggio del contesto di connessione e le MQTT/HTTP operazioni sono gestite dalle rispettive interfacce nella demo/applicazione OTA.   
**xTicksToAttendi - **  
Anche il parametro ticks to wait viene rimosso quando l'attività viene creata nell'OTA demo/application prima di chiamare OTA\$1Init. 

**Parametri di input rinominati -**    
**xFunc - **  
Il parametro viene rinominato in OtaAppCallback e il suo tipo viene modificato in \$1t. OtaAppCallback

**Nuovi parametri di input - **    
**pOtaBuffer**  
L'applicazione deve allocare i buffer e passarli alla libreria OTA utilizzando la struttura OtaAppBuffer \$1t durante l'inizializzazione. I buffer richiesti differiscono leggermente a seconda del protocollo utilizzato per scaricare il file. Per il protocollo MQTT sono necessari i buffer per il nome dello stream e per il protocollo HTTP sono necessari i buffer per l'URL e lo schema di autorizzazione prefirmati.  
I buffer sono necessari quando si utilizza MQTT per il download di file -  

```
static OtaAppBuffer_t otaBuffer =
{
    .pUpdateFilePath    = updateFilePath,
    .updateFilePathsize = otaexampleMAX_FILE_PATH_SIZE,
    .pCertFilePath      = certFilePath,
    .certFilePathSize   = otaexampleMAX_FILE_PATH_SIZE,
    .pStreamName        = streamName,
    .streamNameSize     = otaexampleMAX_STREAM_NAME_SIZE,
    .pDecodeMemory      = decodeMem,
    .decodeMemorySize   = ( 1U << otaconfigLOG2_FILE_BLOCK_SIZE ),
    .pFileBitmap        = bitmap,
    .fileBitmapSize     = OTA_MAX_BLOCK_BITMAP_SIZE
};
```
Buffer richiesti quando si utilizza HTTP per il download di file -  

```
static OtaAppBuffer_t otaBuffer =
{
    .pUpdateFilePath    = updateFilePath,
    .updateFilePathsize = otaexampleMAX_FILE_PATH_SIZE,
    .pCertFilePath      = certFilePath,
    .certFilePathSize   = otaexampleMAX_FILE_PATH_SIZE,
    .pDecodeMemory      = decodeMem,
    .decodeMemorySize   = ( 1U << otaconfigLOG2_FILE_BLOCK_SIZE ),
    .pFileBitmap        = bitmap,
    .fileBitmapSize     = OTA_MAX_BLOCK_BITMAP_SIZE,
    .pUrl               = updateUrl,
    .urlSize            = OTA_MAX_URL_SIZE,
    .pAuthScheme        = authScheme,
    .authSchemeSize     = OTA_MAX_AUTH_SCHEME_SIZE
};
```
Dove -   

```
    pUpdateFilePath    Path to store the files. 
    updateFilePathsize Maximum size of the file path.
    pCertFilePath      Path to certificate file. 
    certFilePathSize   Maximum size of the certificate file path.
    pStreamName        Name of stream to download the files.
    streamNameSize     Maximum size of the stream name.
    pDecodeMemory      Place to store the decoded files.
    decodeMemorySize   Maximum size of the decoded files buffer.
    pFileBitmap        Bitmap of the parameters received.
    fileBitmapSize     Maximum size of the bitmap.
    pUrl               Presigned url to download files from S3.
    urlSize            Maximum size of the URL.
    pAuthScheme        Authentication scheme used to validate download.
    authSchemeSize     Maximum size of the auth scheme.
```  
**pOtaInterfaces **  
Il secondo parametro di input di OTA\$1Init è un riferimento alle interfacce OTA per il tipo \$1t. OtaInterfaces Questo set di interfacce deve essere passato alla libreria OTA e include nell'interfaccia del sistema operativo l'interfaccia MQTT, l'interfaccia HTTP e l'interfaccia a livello di astrazione della piattaforma.     
**Interfaccia del sistema operativo OTA **  
L'interfaccia funzionale del sistema operativo OTA è un insieme APIs che deve essere implementato affinché il dispositivo possa utilizzare la libreria OTA. Le implementazioni delle funzioni per questa interfaccia vengono fornite alla libreria OTA nell'applicazione utente. La libreria OTA richiama le implementazioni delle funzioni per eseguire funzionalità tipicamente fornite da un sistema operativo. Ciò include la gestione di eventi, timer e allocazione della memoria. Le implementazioni per FreerTOS e POSIX sono fornite con la libreria OTA.  
Esempio di FreerTOS che utilizza la porta FreeRTOS fornita -  

```
    OtaInterfaces_t otaInterfaces;
    otaInterfaces.os.event.init   = OtaInitEvent_FreeRTOS;
    otaInterfaces.os.event.send   = OtaSendEvent_FreeRTOS;
    otaInterfaces.os.event.recv   = OtaReceiveEvent_FreeRTOS;
    otaInterfaces.os.event.deinit = OtaDeinitEvent_FreeRTOS;
    otaInterfaces.os.timer.start  = OtaStartTimer_FreeRTOS;
    otaInterfaces.os.timer.stop   = OtaStopTimer_FreeRTOS;
    otaInterfaces.os.timer.delete = OtaDeleteTimer_FreeRTOS;
    otaInterfaces.os.mem.malloc   = Malloc_FreeRTOS;
    otaInterfaces.os.mem.free     = Free_FreeRTOS;
```
Esempio per Linux che utilizza la porta POSIX fornita -  

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.os.event.init    = Posix_OtaInitEvent;
  otaInterfaces.os.event.send    = Posix_OtaSendEvent;
  otaInterfaces.os.event.recv    = Posix_OtaReceiveEvent;
  otaInterfaces.os.event.deinit  = Posix_OtaDeinitEvent;
  otaInterfaces.os.timer.start   = Posix_OtaStartTimer;
  otaInterfaces.os.timer.stop    = Posix_OtaStopTimer;
  otaInterfaces.os.timer.delete  = Posix_OtaDeleteTimer;
  otaInterfaces.os.mem.malloc    = STDC_Malloc;
  otaInterfaces.os.mem.free      = STDC_Free;
```  
**Interfaccia MQTT **  
L'interfaccia OTA MQTT è un insieme APIs che deve essere implementato in una libreria per consentire alla libreria OTA di scaricare un blocco di file dal servizio di streaming.  
Esempio di utilizzo dell'agente APIs CoreMQTT della demo [OTA](https://github.com/aws/amazon-freertos/blob/main/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c) su MQTT -   

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.mqtt.subscribe = prvMqttSubscribe;
  otaInterfaces.mqtt.publish = prvMqttPublish;
  otaInterfaces.mqtt.unsubscribe = prvMqttUnSubscribe;
```  
**Interfaccia HTTP**  
L'interfaccia HTTP OTA è un insieme APIs che deve essere implementato in una libreria per consentire alla libreria OTA di scaricare un blocco di file collegandosi a un URL prefirmato e recuperando blocchi di dati. È facoltativo a meno che non si configuri la libreria OTA per il download da un URL prefirmato anziché da un servizio di streaming.  
Esempio di utilizzo di CoreHTTP APIs dalla demo [OTA su HTTP](https://github.com/aws/amazon-freertos/blob/main/demos/ota/ota_demo_core_http/ota_demo_core_http.c) -   

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.http.init = httpInit;
  otaInterfaces.http.request = httpRequest;
  otaInterfaces.http.deinit = httpDeinit;
```  
**Interfaccia OTA PAL**  
L'interfaccia OTA PAL è un set APIs che deve essere implementato affinché il dispositivo possa utilizzare la libreria OTA. L'implementazione specifica del dispositivo per OTA PAL viene fornita alla libreria nell'applicazione utente. Queste funzioni vengono utilizzate dalla libreria per archiviare, gestire e autenticare i download.  

```
    OtaInterfaces_t otaInterfaces;
    otaInterfaces.pal.getPlatformImageState = otaPal_GetPlatformImageState;
    otaInterfaces.pal.setPlatformImageState = otaPal_SetPlatformImageState;
    otaInterfaces.pal.writeBlock = otaPal_WriteBlock;
    otaInterfaces.pal.activate = otaPal_ActivateNewImage;
    otaInterfaces.pal.closeFile = otaPal_CloseFile;
    otaInterfaces.pal.reset = otaPal_ResetDevice;
    otaInterfaces.pal.abort = otaPal_Abort;
    otaInterfaces.pal.createFile = otaPal_CreateFileForRx;
```  
**Modifiche in cambio -**  
Il reso viene modificato dallo stato dell'agente OTA al codice di errore OTA. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d): \$1t. OtaErr

### OTA\$1Shutdown
<a name="porting-migration-ota-shutdown"></a>

Nella versione 1 della libreria OTA, l'API utilizzata per spegnere l'agente OTA era OTA\$1, AgentShutdown che ora viene modificata in OTA\$1Shutdown insieme alle modifiche ai parametri di input.

**OTA Agent Shutdown (versione 1)**  

```
OTA_State_t OTA_AgentShutdown( TickType_t xTicksToWait );
```

**OTA Agent Shutdown (versione 3) **  

```
OtaState_t OTA_Shutdown( uint32_t ticksToWait,
                         uint8_t unsubscribeFlag );
```

**ticksToWait - **  
Il numero di tick necessari per attendere che l'agente OTA completi il processo di spegnimento. Se questo valore è impostato su zero, la funzione tornerà immediatamente senza attendere. Lo stato attuale viene restituito al chiamante. L'agente non dorme per questo periodo, ma viene utilizzato per i loop più frequenti.

**Nuovo parametro di input - **  
UnsubscribeFlag -   
Contrassegno per indicare se le operazioni di annullamento dell'iscrizione devono essere eseguite dagli argomenti del lavoro quando viene chiamato lo shutdown. Se il flag è 0, le operazioni di annullamento dell'iscrizione non vengono eseguite per gli argomenti relativi al lavoro. Se l'applicazione deve essere annullata dagli argomenti del lavoro, questo flag deve essere impostato su 1 quando si chiama OTA\$1Shutdown. 

**Modifiche in cambio -**  
OtaState\$1t -   
L'enum per lo stato dell'agente OTA e i suoi membri vengono rinominati. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga1cb476a5e0ee81fa486f605e64419dcc).

### OTA\$1 GetState
<a name="porting-migration-ota-get-state"></a>

Il nome dell'API viene modificato da OTA\$1 a OTA\$1AgentGetState . GetState

**OTA Agent Shutdown (versione 1)**  

```
OTA_State_t OTA_GetAgentState( void );
```

**OTA Agent Shutdown (versione 3)**  

```
OtaState_t OTA_GetState( void );
```

**Modifiche in cambio -**  
OtaState\$1t -   
L'enum per lo stato dell'agente OTA e i suoi membri vengono rinominati. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga1cb476a5e0ee81fa486f605e64419dcc).

### OTA\$1 GetStatistics
<a name="porting-migration-ota-get-stats"></a>

Nuova API singola aggiunta per le statistiche. Sostituisce OTA\$1, APIs OTA\$1GetPacketsReceived, OTA\$1, OTA\$1GetPacketsQueued. GetPacketsProcessed GetPacketsDropped Inoltre, nella versione 3 della libreria OTA, i numeri delle statistiche sono relativi solo al lavoro corrente.

**OTA Library versione 1**  

```
uint32_t OTA_GetPacketsReceived( void );
uint32_t OTA_GetPacketsQueued( void );
uint32_t OTA_GetPacketsProcessed( void );
uint32_t OTA_GetPacketsDropped( void );
```

**OTA Library versione 3**  

```
OtaErr_t OTA_GetStatistics( OtaAgentStatistics_t * pStatistics );
```

**Statistiche - **  
Parametro di input/output per dati statistici come pacchetti ricevuti, eliminati, messi in coda ed elaborati per il lavoro corrente.

**Parametro di output - **  
Codice di errore OTA.

**Esempio di utilizzo - **  

```
OtaAgentStatistics_t otaStatistics = { 0 };
OTA_GetStatistics( &otaStatistics );
LogInfo( ( " Received: %u   Queued: %u   Processed: %u   Dropped: %u",
                           otaStatistics.otaPacketsReceived,
                           otaStatistics.otaPacketsQueued,
                           otaStatistics.otaPacketsProcessed,
                           otaStatistics.otaPacketsDropped ) );
```

### OTA\$1 ActivateNewImage
<a name="porting-migration-ota-activate"></a>

I parametri di input sono gli stessi ma il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA.

**OTA Library versione 1**  

```
OTA_Err_t OTA_ActivateNewImage( void ); 
```

**OTA Library versione 3**  

```
OtaErr_t OTA_ActivateNewImage( void );
```
L'enum del codice di errore OTA di ritorno viene modificato e vengono aggiunti nuovi codici di errore. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d): \$1t. OtaErr

**Esempio di utilizzo - **  

```
 OtaErr_t otaErr = OtaErrNone;
 otaErr = OTA_ActivateNewImage();
 /* Handle error */
```

### OTA\$1 SetImageState
<a name="porting-migration-ota-set-image"></a>

I parametri di input sono gli stessi e rinominati, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA.

**OTA Library versione 1 **  

```
OTA_Err_t OTA_SetImageState( OTA_ImageState_t eState ); 
```

**OTA Library versione 3**  

```
OtaErr_t OTA_SetImageState( OtaImageState_t state ); 
```
Il parametro di input viene rinominato in OtaImageState \$1t. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#gad4909faa8b9c8672e7f7bef1bc6b5b84).  
L'enum del codice di errore OTA di ritorno viene modificato e vengono aggiunti nuovi codici di errore. Fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d)/\$1t. OtaErr

**Esempio di utilizzo - **  

```
  OtaErr_t otaErr = OtaErrNone;
  otaErr = OTA_SetImageState( OtaImageStateAccepted );
  /* Handle error */
```

### OTA\$1 GetImageState
<a name="porting-migration-ota-get-image"></a>

I parametri di input sono gli stessi, l'enum di ritorno viene rinominato nella versione 3 della libreria OTA. 

**OTA Library versione 1 **  

```
OTA_ImageState_t OTA_GetImageState( void ); 
```

**OTA Library versione 3**  

```
OtaImageState_t OTA_GetImageState( void ); 
```
L'enum restituito viene rinominato in \$1t. OtaImageState Fate riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#gad4909faa8b9c8672e7f7bef1bc6b5b84): \$1t. OtaImageState

**Esempio di utilizzo - **  

```
 OtaImageState_t imageState;
 imageState = OTA_GetImageState();
```

### OTA\$1Suspend
<a name="porting-migration-ota-suspend"></a>

I parametri di input sono gli stessi, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA. 

**OTA Library versione 1 **  

```
OTA_Err_t OTA_Suspend( void ); 
```

**OTA Library versione 3**  

```
OtaErr_t OTA_Suspend( void ); 
```
L'enum del codice di errore OTA di ritorno viene modificato e vengono aggiunti nuovi codici di errore. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d): \$1t. OtaErr 

**Esempio di utilizzo - **  

```
OtaErr_t xOtaError = OtaErrUninitialized;
xOtaError = OTA_Suspend();
/* Handle error */
```

### OTA\$1Resume
<a name="porting-migration-ota-resume"></a>

Il parametro di input per la connessione viene rimosso quando la connessione viene gestita nella demo/applicazione OTA, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA.

**OTA Library versione 1 **  

```
OTA_Err_t OTA_Resume( void * pxConnection ); 
```

**OTA Library versione 3**  

```
OtaErr_t OTA_Resume( void ); 
```
L'enum del codice di errore OTA di ritorno viene modificato e vengono aggiunti nuovi codici di errore. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d): \$1t. OtaErr

**Esempio di utilizzo - **  

```
OtaErr_t xOtaError = OtaErrUninitialized;
xOtaError = OTA_Resume();
/* Handle error */
```

### OTA\$1 CheckForUpdate
<a name="porting-migration-ota-check"></a>

I parametri di input sono gli stessi, il codice di errore OTA restituito viene rinominato e vengono aggiunti nuovi codici di errore nella versione 3 della libreria OTA.

**OTA Library versione 1 **  

```
OTA_Err_t OTA_CheckForUpdate( void ); 
```

**OTA Library versione 3**  

```
OtaErr_t OTA_CheckForUpdate( void ) 
```
L'enum del codice di errore OTA di ritorno viene modificato e vengono aggiunti nuovi codici di errore. Si prega di fare riferimento all'[AWS IoT Over-the-air aggiornamento v3.0.0](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d): \$1t. OtaErr

### OTA\$1 EventProcessingTask
<a name="porting-migration-ota-event"></a>

Questa è una nuova API ed è il ciclo di eventi principale per gestire gli eventi per gli aggiornamenti OTA. Deve essere chiamato dal task dell'applicazione. Questo ciclo continuerà a gestire ed eseguire gli eventi ricevuti per OTA Update fino a quando questa attività non verrà terminata dall'applicazione.

**OTA Library versione 3 **  

```
void OTA_EventProcessingTask( void * pUnused ); 
```

**Esempio di FreerTOS -**  

```
/* Create FreeRTOS task*/
xTaskCreate( prvOTAAgentTask,
             "OTA Agent Task",
             otaexampleAGENT_TASK_STACK_SIZE,
             NULL,
             otaexampleAGENT_TASK_PRIORITY,
             NULL );
   
/* Call OTA_EventProcessingTask from the task */                        
static void prvOTAAgentTask( void * pParam )
{
    /* Calling OTA agent task. */
    OTA_EventProcessingTask( pParam );
    LogInfo( ( "OTA Agent stopped." ) );

    /* Delete the task as it is no longer required. */
    vTaskDelete( NULL );
}
```

**Esempio per POSIX - **  

```
/* Create posix thread.*/
if( pthread_create( &threadHandle, NULL, otaThread, NULL ) != 0 )
{
    LogError( ( "Failed to create OTA thread: "
                ",errno=%s",
                strerror( errno ) ) );

   /* Handle error. */
}
   
/* Call OTA_EventProcessingTask from the thread.*/                        
static void * otaThread( void * pParam )
{
    /* Calling OTA agent task. */
    OTA_EventProcessingTask( pParam );
    LogInfo( ( "OTA Agent stopped." ) );
    
    return NULL;
}
```

### OTA\$1 SignalEvent
<a name="porting-migration-ota-signal"></a>

Si tratta di una nuova API che aggiunge l'evento in fondo alla coda degli eventi e viene utilizzata anche dai moduli OTA interni per segnalare l'attività dell'agente.

**OTA Library versione 3**  

```
bool OTA_SignalEvent( const OtaEventMsg_t * const pEventMsg ); 
```

**Esempio di utilizzo - **  

```
OtaEventMsg_t xEventMsg = { 0 };
xEventMsg.eventId = OtaAgentEventStart;
( void ) OTA_SignalEvent( &xEventMsg );
```

## Integrazione della libreria OTA come sottomodulo nell'applicazione
<a name="porting-migration-ota-integrating"></a>

Se vuoi integrare la libreria OTA nella tua applicazione puoi usare il comando git submodule. I sottomoduli Git consentono di mantenere un repository Git come sottodirectory di un altro repository Git. [La versione 3 della libreria OTA è gestita nel repository -embedded-sdk. ota-for-aws-iot](https://github.com/aws/ota-for-aws-iot-embedded-sdk)

```
git submodule add https://github.com/aws/ota-for-aws-iot-embedded-sdk.git destination_folder
```

```
git commit -m "Added the OTA Library as submodule to the project."
```

```
git push
```

Per ulteriori informazioni, consulta [Integrazione dell'agente OTA nella tua applicazione nella Guida](https://docs.aws.amazon.com/freertos/latest/userguide/integrate-ota-agent.html) per l'utente di *FreerTOS*.

## Riferimenti
<a name="porting-migration-ota-references"></a>
+ [ OTAv1](https://github.com/aws/amazon-freertos/tree/202012.00/libraries/freertos_plus/aws/ota). 
+ [OTAv3](https://github.com/aws/ota-for-aws-iot-embedded-sdk/tree/v3.0.0).