

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Como migrar da versão 1 para a versão 3 para as aplicações OTA
<a name="porting-migration-ota"></a>

Este guia ajudará você a migrar sua aplicação da versão 1 da biblioteca OTA para a versão 3. 

**nota**  
O OTA versão 2 APIs é igual ao OTA v3 APIs, portanto, se seu aplicativo estiver usando a versão 2 do APIs , as alterações não serão necessárias para chamadas de API, mas recomendamos que você integre a versão 3 da biblioteca. 

As demonstrações da versão 3 do OTA estão disponíveis aqui:
+ [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\$1ble](https://github.com/aws/amazon-freertos/tree/main/demos/ble/ota_ble).

## Resumo das alterações da API
<a name="porting-migration-ota-summary"></a>


**Resumo das alterações da API entre a versão 1 e a versão 3 da Biblioteca OTA**  

|  API OTA versão 1  |  API OTA versão 3  |  Descrição das alterações  | 
| --- | --- | --- | 
|  OTA\$1 AgentInit  |  OTA\$1Init  |  Os parâmetros de entrada são alterados, assim como o valor retornado da função devido às mudanças na implementação no OTA v3. Consulte a seção OTA\$1Init abaixo para obter detalhes.  | 
|  OTA\$1 AgentShutdown  |  OTA\$1Shutdown  |  Alteração nos parâmetros de entrada, incluindo um parâmetro adicional para um cancelamento opcional de assinatura dos tópicos do MQTT. Consulte a seção OTA\$1Shutdown abaixo para obter detalhes.  | 
|  OTA\$1 GetAgentState  |  OTA\$1 GetState  |  O nome da API foi alterado sem alterações no parâmetro de entrada. O valor de retorno é o mesmo, mas o enum e os membros são renomeados. Consulte a seção OTA\$1 GetState abaixo para obter detalhes.   | 
|  n/a  |  OTA\$1 GetStatistics  |  Foi adicionada uma nova API que substitui a APIs OTA\$1GetPacketsReceived, OTA\$1, OTA\$1, OTA\$1GetPacketsQueued. GetPacketsProcessed GetPacketsDropped Consulte a seção OTA\$1 GetStatistics abaixo para obter detalhes.  | 
|  OTA\$1 GetPacketsReceived  |  n/a  |  Essa API foi removida da versão 3 e substituída pela OTA\$1GetStatistics.  | 
|  OTA\$1 GetPacketsQueued  |  n/a  |  Essa API foi removida da versão 3 e substituída pela OTA\$1GetStatistics.  | 
|  OTA\$1 GetPacketsProcessed  |  n/a  |  Essa API foi removida da versão 3 e substituída pela OTA\$1GetStatistics.  | 
|  OTA\$1 GetPacketsDropped  |  n/a  |  Essa API foi removida da versão 3 e substituída pela OTA\$1GetStatistics.  | 
|  OTA\$1 ActivateNewImage  |  OTA\$1 ActivateNewImage  |  Os parâmetros de entrada são os mesmos, mas o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. Consulte a seção OTA\$1 ActivateNewImage para obter detalhes.  | 
|  OTA\$1 SetImageState  |  OTA\$1 SetImageState  |  Os parâmetros de entrada são os mesmos e renomeados, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. Consulte a seção OTA\$1 SetImageState para obter detalhes.  | 
|  OTA\$1 GetImageState  |  OTA\$1 GetImageState  |  Os parâmetros de entrada são os mesmos. O enum de retorno é renomeado na versão 3 da biblioteca OTA. Consulte a seção OTA\$1 GetImageState para obter detalhes.  | 
|  OTA\$1Suspend  |  OTA\$1Suspend  |  Os parâmetros de entrada são os mesmos, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. Consulte a seção OTA\$1Suspend para obter detalhes.  | 
|  OTA\$1Resume  |  OTA\$1Resume  |  O parâmetro de entrada para a conexão é removido quando a conexão é tratada na demonstração/aplicação OTA, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. Consulte a seção OTA\$1Resume para obter detalhes.  | 
|  OTA\$1 CheckForUpdate  |  OTA\$1 CheckForUpdate  |  Os parâmetros de entrada são os mesmos, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. Consulte a seção OTA\$1 CheckForUpdate para obter detalhes.  | 
|  n/a  |  OTA\$1 EventProcessingTask  |  Uma nova API foi adicionada e é o principal loop de eventos para lidar com eventos para atualização do OTA e deve ser chamada pela tarefa da aplicação. Consulte a seção OTA\$1 EventProcessingTask para obter detalhes.  | 
|  n/a  |  OTA\$1 SignalEvent  |  Uma nova API foi adicionada e adiciona o evento ao final da fila de eventos OTA e é usada por módulos OTA internos para sinalizar a tarefa do atendente. Consulte a seção OTA\$1 SignalEvent para obter detalhes.  | 
|  n/a  |  OTA\$1Err\$1strerror  |  Nova API para conversão de código de erro em string para erros OTA.  | 
|  n/a  |  OTA\$1 \$1str error JobParse  |  Nova API para conversão de código de erro em string para erros de Job Parsing.  | 
|  n/a  |  OTA\$1 \$1str error OsStatus  |  Nova API para conversão de código de status em string para status de porta do sistema operacional OTA.  | 
|  n/a  |  OTA\$1 \$1str error PalStatus  |  Nova API para conversão de código de status em string para status de porta do sistema operacional PAL OTA.  | 

## Descrição das alterações necessárias
<a name="porting-migration-ota-description"></a>

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

Ao inicializar o atendente OTA na v1, a API `OTA_AgentInit` é usada, que usa parâmetros para contexto de conexão, nome da coisa, retorno de chamada completo e tempo limite como entrada.

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

Essa API agora foi alterada para `OTA_Init` com parâmetros para os buffers necessários para ota, interfaces ota, nome da coisa e retorno de chamada da aplicação. 

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

**Parâmetros de entrada removidos: **    
**pvConnectionContext - **  
O contexto de conexão é removido porque a versão 3 da biblioteca OTA não exige que o contexto de conexão seja passado para ela e as MQTT/HTTP operações são tratadas por suas respectivas interfaces na demonstração/aplicativo OTA.   
**xTicksToEspere - **  
O parâmetro ticks to wait também é removido quando a tarefa é criada no OTA demo/application antes de chamar OTA\$1init. 

**Parâmetros de entrada renomeados: **    
**xFunc: **  
O parâmetro é renomeado para OtaAppCallback e seu tipo é alterado para OtaAppCallback \$1t.

**Novos parâmetros de entrada: **    
**pOtaBuffer**  
O aplicativo deve alocar os buffers e passá-los para a biblioteca OTA usando a estrutura OtaAppBuffer \$1t durante a inicialização. Os buffers necessários diferem um pouco dependendo do protocolo usado para baixar o arquivo. Para o protocolo MQTT, os buffers para o nome do fluxo são necessários e, para o protocolo HTTP, os buffers para URL pré-assinado e esquema de autorização são necessários.  
Buffers necessários ao usar MQTT para baixar arquivos:  

```
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
};
```
Buffers necessários ao usar HTTP para baixar arquivos:  

```
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
};
```
Onde:   

```
    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 **  
O segundo parâmetro de entrada para OTA\$1init é uma referência às interfaces OTA para o tipo \$1t. OtaInterfaces Este conjunto de interfaces deve ser passado para a Biblioteca OTA e inclui na interface do sistema operacional a interface MQTT, a interface HTTP e a interface da camada de abstração da plataforma.     
**Interface do sistema operacional OTA **  
A interface funcional do sistema operacional OTA é um conjunto APIs que deve ser implementado para que o dispositivo use a biblioteca OTA. As implementações de funções para essa interface são fornecidas à biblioteca OTA na aplicação do usuário. A biblioteca OTA chama as implementações de funções para executar funcionalidades que normalmente são fornecidas por um sistema operacional. Isto inclui o gerenciamento de eventos, temporizadores e alocação de memória. As implementações para FreeRTOS e POSIX são fornecidas com a biblioteca OTA.  
Exemplo para FreeRTOS usando a porta FreeRTOS fornecida:  

```
    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;
```
Exemplo para Linux usando a porta POSIX fornecida:  

```
  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;
```  
**Interface MQTT **  
A interface OTA MQTT é um conjunto APIs que deve ser implementado em uma biblioteca para permitir que a biblioteca OTA baixe um bloco de arquivos do serviço de streaming.  
Exemplo de uso do CoreMQTT Agent APIs da demonstração [OTA over](https://github.com/aws/amazon-freertos/blob/main/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c) MQTT -   

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.mqtt.subscribe = prvMqttSubscribe;
  otaInterfaces.mqtt.publish = prvMqttPublish;
  otaInterfaces.mqtt.unsubscribe = prvMqttUnSubscribe;
```  
**Interface HTTP**  
A interface HTTP OTA é um conjunto APIs que deve ser implementado em uma biblioteca para permitir que a biblioteca OTA baixe um bloco de arquivo conectando-se a um URL pré-assinado e buscando blocos de dados. É opcional, a menos que a biblioteca OTA seja configurada para fazer o download de um URL pré-assinado em vez de um serviço de streaming.  
Exemplo usando o CoreHTTP APIs da [demonstração OTA sobre 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;
```  
**Interface PAL OTA**  
A interface OTA PAL é um conjunto APIs que deve ser implementado para que o dispositivo use a biblioteca OTA. A implementação específica do dispositivo para o OTA PAL é fornecida à biblioteca na aplicação do usuário. Estas funções são usadas pela biblioteca para armazenar, gerenciar e autenticar downloads.  

```
    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;
```  
**Alterações em retorno:**  
O retorno é alterado do estado do atendente OTA para o código de erro OTA. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d) \$1t.

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

Na versão 1 da Biblioteca OTA, a API usada para desligar o Agente OTA era OTA\$1, AgentShutdown que agora foi alterada para OTA\$1Shutdown junto com as alterações nos parâmetros de entrada.

**Desligamento do atendente OTA (versão 1)**  

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

**Desligamento do atendente OTA (versão 3) **  

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

**ticksToWait - **  
O número de tiques que aguardam até que o atendente OTA conclua o processo de desligamento. Se for definido como zero, a função retornará imediatamente sem esperar. O estado real é retornado ao chamador. O atendente não fica em repouso nesse tempo, mas é usado para fazer loops ocupados.

**Novo parâmetro de entrada: **  
unsubscribeFlag:   
Sinalize para indicar se as operações de cancelamento de assinatura devem ser realizadas nos tópicos do trabalho quando o encerramento é chamado. Se o sinalizador for 0, as operações de cancelamento de inscrição não serão chamadas para tópicos de trabalho. Se a aplicação precisar cancelar a assinatura dos tópicos do trabalho, esse sinalizador deverá ser definido como 1 ao chamar OTA\$1Shutdown. 

**Alterações em retorno:**  
OtaState\$1t -   
O enum para o estado do atendente OTA e seus membros é renomeado. Consulte a [AWS IoT Over-the-air Atualização 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>

O nome da API foi alterado de OTA\$1 AgentGetState para OTA\$1. GetState

**Desligamento do atendente OTA (versão 1)**  

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

**Desligamento do atendente OTA (versão 3)**  

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

**Alterações em retorno:**  
OtaState\$1t -   
O enum para o estado do atendente OTA e seus membros é renomeado. Consulte a [AWS IoT Over-the-air Atualização 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>

Nova API única adicionada para estatísticas. Ele substitui o APIs OTA\$1GetPacketsReceived, OTA\$1, OTA\$1, OTA\$1GetPacketsQueued. GetPacketsProcessed GetPacketsDropped Além disso, na versão 3 da Biblioteca OTA, os números das estatísticas estão relacionados apenas ao trabalho atual.

**Biblioteca OTA versão 1**  

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

**Biblioteca OTA versão 3**  

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

**pStatistics: **  
O parâmetro de entrada/saída para dados estatísticos, como pacotes recebidos, descartados, colocados em fila e processados para o trabalho atual.

**Parâmetro de saída: **  
Código de erro OTA.

**Exemplo de uso: **  

```
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>

Os parâmetros de entrada são os mesmos, mas o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA.

**Biblioteca OTA versão 1**  

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

**Biblioteca OTA versão 3**  

```
OtaErr_t OTA_ActivateNewImage( void );
```
A enumeração do código de erro OTA de retorno é alterada e novos códigos de erro são adicionados. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d) \$1t.

**Exemplo de uso: **  

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

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

Os parâmetros de entrada são os mesmos e renomeados, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA.

**Biblioteca OTA versão 1 **  

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

**Biblioteca OTA versão 3**  

```
OtaErr_t OTA_SetImageState( OtaImageState_t state ); 
```
O parâmetro de entrada é renomeado para OtaImageState \$1t. Consulte a [AWS IoT Over-the-air Atualização 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).  
A enumeração do código de erro OTA de retorno é alterada e novos códigos de erro são adicionados. Consulte a [AWS IoT Over-the-air Atualização v3.0.0/ OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d)\$1t.

**Exemplo de uso: **  

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

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

Os parâmetros de entrada são os mesmos. O enum de retorno é renomeado na versão 3 da biblioteca OTA. 

**Biblioteca OTA versão 1 **  

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

**Biblioteca OTA versão 3**  

```
OtaImageState_t OTA_GetImageState( void ); 
```
O enum de retorno é renomeado para OtaImageState \$1t. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaImageState](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#gad4909faa8b9c8672e7f7bef1bc6b5b84) \$1t.

**Exemplo de uso: **  

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

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

Os parâmetros de entrada são os mesmos, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA. 

**Biblioteca OTA versão 1 **  

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

**Biblioteca OTA versão 3**  

```
OtaErr_t OTA_Suspend( void ); 
```
A enumeração do código de erro OTA de retorno é alterada e novos códigos de erro são adicionados. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d) \$1t. 

**Exemplo de uso: **  

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

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

O parâmetro de entrada para a conexão é removido quando a conexão é tratada na demonstração/aplicação OTA, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA.

**Biblioteca OTA versão 1 **  

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

**Biblioteca OTA versão 3**  

```
OtaErr_t OTA_Resume( void ); 
```
A enumeração do código de erro OTA de retorno é alterada e novos códigos de erro são adicionados. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d) \$1t.

**Exemplo de uso: **  

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

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

Os parâmetros de entrada são os mesmos, o código de erro OTA de retorno é renomeado e novos códigos de erro são adicionados na versão 3 da biblioteca OTA.

**Biblioteca OTA versão 1 **  

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

**Biblioteca OTA versão 3**  

```
OtaErr_t OTA_CheckForUpdate( void ) 
```
A enumeração do código de erro OTA de retorno é alterada e novos códigos de erro são adicionados. Consulte a [AWS IoT Over-the-air Atualização v3.0.0: OtaErr](https://freertos.org/Documentation/api-ref/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/group__ota__enum__types.html#ga7ab3c74dc057383c56c6cb9aa6bf0b2d) \$1t.

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

Esta é uma nova API e é o principal loop de eventos para lidar com eventos para atualizações do OTA. Ele deve ser chamado pela tarefa da aplicação. Esse loop continuará manipulando e executando eventos recebidos pela atualização OTA até que essa tarefa seja encerrada pela aplicação.

**Biblioteca OTA versão 3 **  

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

**Exemplo para 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 );
}
```

**Exemplo para 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>

Esta é uma nova API que adiciona o evento ao final da fila de eventos e também é usada por módulos OTA internos para sinalizar a tarefa do atendente.

**Biblioteca OTA versão 3**  

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

**Exemplo de uso: **  

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

## Como integrar a biblioteca OTA como um submódulo em sua aplicação
<a name="porting-migration-ota-integrating"></a>

Se você quiser integrar a biblioteca OTA em sua própria aplicação, você pode usar o comando git submodule. Os submódulos Git permitem que você mantenha um repositório Git como um subdiretório de outro repositório Git. A versão 3 da biblioteca OTA é mantida no repositório [ ota-for-aws-iot-embedded-sdk](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
```

Para obter mais informações, consulte [Como integrar o atendente OTA em sua aplicação](https://docs.aws.amazon.com/freertos/latest/userguide/integrate-ota-agent.html) no *Manual do usuário do FreeRTOS*.

## Referências
<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).