

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de la versión 1 a la versión 3 para aplicaciones OTA
<a name="porting-migration-ota"></a>

Esta guía le ayudará a migrar su aplicación de la versión 1 a la versión 3 de la biblioteca OTA. 

**nota**  
La versión 2 APIs de OTA es la misma que la versión 3 de OTA APIs, por lo que si su aplicación utiliza la versión 2 de la APIs , no es necesario realizar cambios en las llamadas a la API, pero le recomendamos que integre la versión 3 de la biblioteca. 

Las demostraciones de la versión 3 de OTA están disponibles aquí:
+ [ 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).

## Resumen de cambios de API
<a name="porting-migration-ota-summary"></a>


**Resumen de los cambios de API entre la versión 1 y la versión 3 de la biblioteca OTA**  

|  API de versión 1 de OTA  |  API de versión 3 de OTA  |  Descripción de los cambios  | 
| --- | --- | --- | 
|  OTA\$1 AgentInit  |  OTA\$1Init  |  Los parámetros de entrada cambian, así como el valor devuelto por la función, debido a cambios en la implementación de OTA v3. Consulte la sección correspondiente a OTA\$1init que aparece a continuación para obtener más información.  | 
|  OTA\$1 AgentShutdown  |  OTA\$1Shutdown  |  Cambio en los parámetros de entrada, incluido un parámetro adicional para cancelar la suscripción opcional a los temas de MQTT. Consulte la sección correspondiente a OTA\$1Shutdown que aparece a continuación para obtener más información.  | 
|  OTA\$1 GetAgentState  |  OTA\$1 GetState  |  El nombre de la API se cambia sin cambios en el parámetro de entrada. El valor devuelto es el mismo, pero se cambia el nombre de la enumeración y de los miembros. Consulte la sección correspondiente a OTA\$1 GetState que aparece a continuación para obtener más información.   | 
|  n/a  |  OTA\$1 GetStatistics  |  Se agregó una nueva API que reemplaza a la APIs OTA\$1GetPacketsReceived, OTA\$1, GetPacketsQueued OTA\$1. GetPacketsProcessed GetPacketsDropped Consulte la sección relativa a la OTA\$1 que aparece a continuación para obtener más información. GetStatistics   | 
|  OTA\$1 GetPacketsReceived  |  n/a  |  Esta API se ha eliminado de la versión 3 y se ha sustituido por OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsQueued  |  n/a  |  Esta API se ha eliminado de la versión 3 y se ha sustituido por OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsProcessed  |  n/a  |  Esta API se ha eliminado de la versión 3 y se ha sustituido por OTA\$1. GetStatistics  | 
|  OTA\$1 GetPacketsDropped  |  n/a  |  Esta API se ha eliminado de la versión 3 y se ha sustituido por OTA\$1. GetStatistics  | 
|  OTA\$1 ActivateNewImage  |  OTA\$1 ActivateNewImage  |  Los parámetros de entrada son los mismos, pero se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. Consulte la sección de ActivateNewImage OTA\$1 para obtener más información.  | 
|  OTA\$1 SetImageState  |  OTA\$1 SetImageState  |  Los parámetros de entrada son los mismos y se les ha cambiado el nombre, pero se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. Consulte la sección de SetImageState OTA\$1 para obtener más información.  | 
|  OTA\$1 GetImageState  |  OTA\$1 GetImageState  |  Los parámetros de entrada son los mismos, la enumeración de retorno cambia de nombre en la versión 3 de la biblioteca OTA. Consulte la sección de GetImageState OTA\$1 para obtener más información.  | 
|  OTA\$1Suspend  |  OTA\$1Suspend  |  Los parámetros de entrada son los mismos, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. Consulte la sección correspondiente a OTA\$1Suspend para obtener más información.  | 
|  OTA\$1Resume  |  OTA\$1Resume  |  El parámetro de entrada para la conexión se elimina a medida que se gestiona la conexión en la demostración/aplicación OTA, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. Consulte la sección correspondiente a OTA\$1Resume para obtener más información.  | 
|  OTA\$1 CheckForUpdate  |  OTA\$1 CheckForUpdate  |  Los parámetros de entrada son los mismos, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. Consulte la sección de CheckForUpdate OTA\$1 para obtener más información.  | 
|  n/a  |  OTA\$1 EventProcessingTask  |  Se ha añadido una nueva API que es el bucle de eventos principal para gestionar los eventos de la actualización OTA a la que debe llamar la tarea de la aplicación. Consulte la sección de EventProcessingTask OTA\$1 para obtener más información.  | 
|  n/a  |  OTA\$1 SignalEvent  |  Se ha añadido una nueva API que añade el evento al final de la cola de eventos OTA y que se utiliza en los módulos OTA internos para indicar la tarea del agente. Consulte la sección de SignalEvent OTA\$1 para obtener más información.  | 
|  n/a  |  OTA\$1Err\$1strerror  |  Nueva API para la conversión de código de error a cadena en caso de errores de OTA.  | 
|  n/a  |  OTA\$1 \$1strerror JobParse  |  Nueva API para la conversión de código de error a cadena en caso de errores de análisis de trabajos.  | 
|  n/a  |  OTA\$1 OsStatus \$1strerror  |  Nueva API para la conversión de código de estado a cadena para obtener el estado del puerto OS OTA.  | 
|  n/a  |  OTA\$1 PalStatus \$1strerror  |  Nueva API para la conversión de código de estado a cadena para obtener el estado del puerto PAL OTA.  | 

## Descripción de los cambios necesarios
<a name="porting-migration-ota-description"></a>

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

Al inicializar el agente OTA en la versión 1, se utiliza la API `OTA_AgentInit`, que toma como entrada los parámetros del contexto de la conexión, el nombre del objeto, la devolución de llamada completa y el tiempo de espera.

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

Esta API ahora ha cambiado a `OTA_Init` con los parámetros de los búferes necesarios para OTA, las interfaces OTA, el nombre del objeto y la devolución de llamada de la aplicación. 

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

**Parámetros de entrada eliminados - **    
**pvConnectionContext - **  
El contexto de conexión se elimina porque la versión 3 de la biblioteca OTA no requiere que se le pase el contexto de conexión y MQTT/HTTP las operaciones las gestionan sus respectivas interfaces en la demo/aplicación OTA.   
**xTicksToEspera: **  
El parámetro ticks to wait también se elimina cuando la tarea se crea en la OTA demo/application antes de llamar a OTA\$1init. 

**Parámetros de entrada con nombre cambiado -**    
**xFunc - **  
Se cambia el nombre del parámetro a OtaAppCallback \$1t y su tipo. OtaAppCallback

**Parámetros de entrada nuevos - **    
**pOtaBuffer**  
La aplicación debe asignar los búferes y pasarlos a la biblioteca OTA mediante la estructura OtaAppBuffer \$1t durante la inicialización. Los búferes necesarios varían ligeramente según el protocolo utilizado para descargar el archivo. Para el protocolo MQTT, se requieren los búferes para el nombre de la secuencia y para el protocolo HTTP, los búferes para la URL prefirmada y el esquema de autorización.  
Los búferes necesarios cuando se utiliza MQTT para la descarga de archivos -  

```
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
};
```
Los búferes necesarios cuando se utiliza HTTP para la descarga de archivos -  

```
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
};
```
Donde -   

```
    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 **  
El segundo parámetro de entrada de OTA\$1init es una referencia a las interfaces OTA del tipo \$1t. OtaInterfaces Este conjunto de interfaces debe transferirse a la biblioteca OTA e incluye en la interfaz del sistema operativo la interfaz MQTT, la interfaz HTTP y la interfaz de capa de abstracción de la plataforma.     
**Interfaz SO OTA **  
La interfaz funcional del sistema operativo OTA es un conjunto APIs que debe implementarse para que el dispositivo utilice la biblioteca OTA. Las implementaciones de funciones de esta interfaz se proporcionan a la biblioteca OTA de la aplicación de usuario. La biblioteca OTA llama a las implementaciones de funciones para realizar funcionalidades que normalmente proporciona un sistema operativo. Esto incluye la gestión de eventos, temporizadores y asignación de memoria. Las implementaciones de FreeRTOS y POSIX se proporcionan con la biblioteca OTA.  
Ejemplo para FreeRTOS con el puerto FreeRTOS proporcionado -  

```
    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;
```
Ejemplo para Linux con el puerto POSIX proporcionado -  

```
  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;
```  
**Interfaz MQTT **  
La interfaz OTA MQTT es un conjunto APIs que debe implementarse en una biblioteca para permitir que la biblioteca OTA descargue un bloque de archivos del servicio de streaming.  
Ejemplo de uso del agente CoreMQTT de la demostración [OTA APIs ](https://github.com/aws/amazon-freertos/blob/main/demos/ota/ota_demo_core_mqtt/ota_demo_core_mqtt.c) sobre MQTT -   

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.mqtt.subscribe = prvMqttSubscribe;
  otaInterfaces.mqtt.publish = prvMqttPublish;
  otaInterfaces.mqtt.unsubscribe = prvMqttUnSubscribe;
```  
**Interfaz HTTP**  
La interfaz HTTP OTA es un conjunto APIs que debe implementarse en una biblioteca para que la biblioteca OTA pueda descargar un bloque de archivos conectándose a una URL prefirmada y buscando bloques de datos. Es opcional, a menos que configure la biblioteca OTA para que descargue desde una URL prefirmada en lugar de hacerlo desde un servicio de streaming.  
Ejemplo de uso del CoreHTTP APIs de la demostración [OTA sobre](https://github.com/aws/amazon-freertos/blob/main/demos/ota/ota_demo_core_http/ota_demo_core_http.c) HTTP:   

```
  OtaInterfaces_t otaInterfaces;
  otaInterfaces.http.init = httpInit;
  otaInterfaces.http.request = httpRequest;
  otaInterfaces.http.deinit = httpDeinit;
```  
**Interfaz PAL OTA**  
La interfaz PAL OTA es un conjunto APIs que debe implementarse para que el dispositivo utilice la biblioteca OTA. La implementación específica del dispositivo para PAL OTA se proporciona a la biblioteca de la aplicación de usuario. La biblioteca utiliza estas funciones para almacenar, gestionar y autenticar las descargas.  

```
    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;
```  
**Cambios en la devolución -**  
La devolución cambia del estado de agente OTA al código de error OTA. Consulte la [AWS IoT Over-the-air actualización 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>

En la versión 1 de la biblioteca OTA, la API utilizada para cerrar el agente OTA era OTA\$1, AgentShutdown que ahora se ha cambiado a OTA\$1Shutdown junto con los cambios en los parámetros de entrada.

**OTA Agent Shutdown (versión 1)**  

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

**OTA Agent Shutdown (versión 3) **  

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

**ticksToWait - **  
El número de tics que hay que esperar para que el agente OTA complete el proceso de cierre. Si se establece en cero, la función volverá inmediatamente sin esperar. El estado real se devuelve a la persona que llama. El agente no está inactivo durante este tiempo, sino que lo utiliza para el bucle ocupado.

**Nuevo parámetro de entrada - **  
unsubscribeFlag -   
Indicador para señalar si las operaciones de cancelación de suscripción deben realizarse desde los temas del trabajo cuando se llama al cierre. Si el indicador es 0, no se realizarán operaciones de cancelación de suscripción para los temas de trabajo. Si se debe cancelar la suscripción de la aplicación a los temas de trabajo, este indicador debe estar establecido en 1 al llamar a OTA\$1Shutdown. 

**Cambios en la devolución -**  
OtaState\$1t -   
Se cambia el nombre de la enumeración del estado del agente OTA y sus miembros. Consulte la [AWS IoT Over-the-air actualización 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>

El nombre de la API se cambia de OTA\$1 a OTA\$1AgentGetState . GetState

**OTA Agent Shutdown (versión 1)**  

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

**OTA Agent Shutdown (versión 3)**  

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

**Cambios en la devolución -**  
OtaState\$1t -   
Se cambia el nombre de la enumeración del estado del agente OTA y sus miembros. Consulte la [AWS IoT Over-the-air actualización 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>

Se ha añadido una nueva API única para las estadísticas. Sustituye a la APIs OTA\$1GetPacketsReceived, OTA\$1, GetPacketsQueued OTA\$1. GetPacketsProcessed GetPacketsDropped Además, en la versión 3 de la biblioteca OTA, los números de las estadísticas están relacionados únicamente con el trabajo actual.

**Versión 1 de la biblioteca OTA**  

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

**Versión 3 de la biblioteca OTA**  

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

**pStatistics - **  
Parámetro de entrada/salida para datos estadísticos como paquetes recibidos, descartados, puestos en cola y procesados para el trabajo actual.

**Parámetro de salida - **  
Código de error de OTA.

**Ejemplo 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>

Los parámetros de entrada son los mismos, pero se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA.

**Versión 1 de la biblioteca OTA**  

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

**Versión 3 de la biblioteca OTA**  

```
OtaErr_t OTA_ActivateNewImage( void );
```
Se cambia la enumeración del código de error OTA devuelto y se añaden nuevos códigos de error. Consulte la [AWS IoT Over-the-air actualización 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

**Ejemplo de uso - **  

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

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

Los parámetros de entrada son los mismos y se les ha cambiado el nombre, pero se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA.

**Versión 1 de la biblioteca OTA **  

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

**Versión 3 de la biblioteca OTA**  

```
OtaErr_t OTA_SetImageState( OtaImageState_t state ); 
```
El nombre del parámetro de entrada pasa a OtaImageState ser \$1t. Consulte la [AWS IoT Over-the-air actualización 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).  
Se cambia la enumeración del código de error OTA devuelto y se añaden nuevos códigos de error. Consulte la [AWS IoT Over-the-air actualización 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

**Ejemplo de uso - **  

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

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

Los parámetros de entrada son los mismos, se cambia el nombre de la enumeración de retorno en la versión 3 de la biblioteca OTA. 

**Versión 1 de la biblioteca OTA **  

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

**Versión 3 de la biblioteca OTA**  

```
OtaImageState_t OTA_GetImageState( void ); 
```
El nombre de la enumeración de retorno pasa a ser \$1t. OtaImageState Consulte la [AWS IoT Over-the-air actualización 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

**Ejemplo de uso - **  

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

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

Los parámetros de entrada son los mismos, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA. 

**Versión 1 de la biblioteca OTA **  

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

**Versión 3 de la biblioteca OTA**  

```
OtaErr_t OTA_Suspend( void ); 
```
Se cambia la enumeración del código de error OTA devuelto y se añaden nuevos códigos de error. Consulte la [AWS IoT Over-the-air actualización 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 

**Ejemplo de uso - **  

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

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

El parámetro de entrada para la conexión se elimina a medida que se gestiona la conexión en la demo/aplicación OTA, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA.

**Versión 1 de la biblioteca OTA **  

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

**Versión 3 de la biblioteca OTA**  

```
OtaErr_t OTA_Resume( void ); 
```
Se cambia la enumeración del código de error OTA devuelto y se añaden nuevos códigos de error. Consulte la [AWS IoT Over-the-air actualización 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

**Ejemplo de uso - **  

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

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

Los parámetros de entrada son los mismos, se cambia el nombre del código de error OTA devuelto y se añaden nuevos códigos de error en la versión 3 de la biblioteca OTA.

**Versión 1 de la biblioteca OTA **  

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

**Versión 3 de la biblioteca OTA**  

```
OtaErr_t OTA_CheckForUpdate( void ) 
```
Se cambia la enumeración del código de error OTA devuelto y se añaden nuevos códigos de error. Consulte la [AWS IoT Over-the-air actualización 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>

Se trata de una API nueva que es el bucle de eventos principal para gestionar los eventos de las actualizaciones OTA. Debe llamarla la tarea de la aplicación. Este bucle seguirá gestionando y ejecutando los eventos recibidos para la actualización OTA hasta que la aplicación finalice esta tarea.

**Versión 3 de la biblioteca OTA **  

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

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

**Ejemplo 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>

Se trata de una nueva API que añade el evento al final de la cola de eventos y que se utiliza en los módulos OTA internos para indicar la tarea del agente.

**Versión 3 de la biblioteca OTA**  

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

**Ejemplo de uso - **  

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

## Integración de la biblioteca OTA como un submódulo en su aplicación
<a name="porting-migration-ota-integrating"></a>

Si desea integrar la biblioteca OTA en su propia aplicación, puede usar el comando del submódulo de Git. Los submódulos de Git le permiten mantener un repositorio de Git como un subdirectorio de otro repositorio de Git. La versión 3 de la biblioteca OTA se mantiene en el repositorio [ 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 obtener más información, consulte [ Integración del agente OTA en su aplicación](https://docs.aws.amazon.com/freertos/latest/userguide/integrate-ota-agent.html) en la *Guía del usuario de FreeRTOS*.

## Referencias
<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).