Migration de version 1 vers la version 3 pour les applications OTA - FreeRTOS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migration de version 1 vers la version 3 pour les applications OTA

Ce guide vous aidera à migrer votre application de la version 1 à la version 3 de la bibliothèque OTA.

Note

Les API OTA version 2 sont identiques aux API OTA v3. Par conséquent, si votre application utilise la version 2 des API, aucune modification n'est requise pour les appels d'API, mais nous vous recommandons d'intégrer la version 3 de la bibliothèque.

Les démos de la version 3 d'OTA sont disponibles ici :

Résumé des modifications d'API

Résumé des modifications de l'API entre la version 1 et la version 3 de la bibliothèque OTA

Version 1 vers l'API

Version 3 vers l'API d'OTA

Description des modifications

OTA_AgentInit

OTA_Init

Les paramètres d'entrée sont modifiés ainsi que la valeur renvoyée par la fonction en raison de modifications apportées à l'implémentation dans OTA v3. Reportez-vous à la section OTA_Init ci-dessous pour plus de détails.

OTA_AgentShutdown

OTA_Shutdown

Modification des paramètres d'entrée, y compris un paramètre supplémentaire pour une désinscription facultative des rubriques MQTT. Reportez-vous à la section OTA_Shutdown ci-dessous pour plus de détails.

OTA_GetAgentState

OTA_GetState

Le nom de l'API est modifié sans modification du paramètre d'entrée. La valeur renvoyée est la même, mais l'énumération et les membres sont renommés. Reportez-vous à la section OTA_GetState ci-dessous pour plus de détails.

N/A

OTA_GetStatistics

Nouvelle API ajoutée qui remplace les API OTA_GetPacketsReceived, OTA_GetPacketsQueued, OTA_GetPacketsProcessed, OTA_GetPacketsDropped. Reportez-vous à la section OTA_GetStatistics ci-dessous pour plus de détails.

OTA_GetPacketsReceived

N/A

Cette API est supprimée de la version 3 et remplacée par OTA_GetStatistics.

OTA_GetPacketsQueued

N/A

Cette API est supprimée de la version 3 et remplacée par OTA_GetStatistics.

OTA_GetPacketsProcessed

N/A

Cette API est supprimée de la version 3 et remplacée par OTA_GetStatistics.

OTA_GetPacketsDropped

N/A

Cette API est supprimée de la version 3 et remplacée par OTA_GetStatistics.

OTA_ActivateNewImage

OTA_ActivateNewImage

Les paramètres d'entrée sont les mêmes, mais le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_ActivateNewImage pour plus de détails.

OTA_SetImageState

OTA_SetImageState

Les paramètres d'entrée sont identiques et renommés, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_SetImageState pour plus de détails.

OTA_GetImageState

OTA_GetImageState

Les paramètres d'entrée sont les mêmes, l'énumération de retour est renommée dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_GetImageState pour plus de détails.

OTA_Suspendre

OTA_Suspendre

Les paramètres d'entrée sont les mêmes, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_Suspend pour plus de détails.

OTA_CV

OTA_CV

Le paramètre d'entrée pour la connexion est supprimé lorsque la connexion est gérée dans la démo/l'application OTA, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_Resume pour plus de détails.

OTA_CheckForUpdate

OTA_CheckForUpdate

Les paramètres d'entrée sont les mêmes, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA. Consultez la section relative à OTA_CheckForUpdate pour plus de détails.

N/A

OTA_EventProcessingTask

Nouvelle API ajoutée. Il s'agit de la boucle d'événements principale permettant de gérer les événements pour la mise à jour OTA et doit être appelée par la tâche de l'application. Consultez la section relative à OTA_EventProcessingTask pour plus de détails.

N/A

OTA_SignalEvent

Une nouvelle API a été ajoutée. Elle ajoute l'événement à la fin de la file d'événements OTA et est utilisée par les modules OTA internes pour signaler la tâche de l'agent. Consultez la section relative à OTA_SignalEvent pour plus de détails.

N/A

Erreur OTA_ERR_STRR

Nouvelle API pour la conversion du code d'erreur en chaîne pour les erreurs OTA.

N/A

JobParseErreur OTA_ _strr

Nouvelle API pour la conversion du code d'erreur en chaîne pour les erreurs d'analyse des tâches.

N/A

OsStatusErreur OTA_ _strr

Nouvelle API pour la conversion du code d'état en chaîne pour l'état du port OTA OS.

N/A

PalStatusErreur OTA_ _strr

Nouvelle API pour la conversion du code d'état en chaîne pour l'état du port OTA PAL.

Description des modifications requises

OTA_Init

Lors de l'initialisation de l'agent OTA dans la version 1, l'OTA_AgentInitAPI est utilisée. Elle prend en entrée des paramètres tels que le contexte de connexion, le nom de l'objet, le rappel complet et le délai d'expiration.

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

Cette API est désormais remplacéeOTA_Init par des paramètres pour les buffers requis pour l'ota, les interfaces ota, le nom de l'objet et le rappel de l'application.

OtaErr_t OTA_Init( OtaAppBuffer_t * pOtaBuffer, OtaInterfaces_t * pOtaInterfaces, const uint8_t * pThingName, OtaAppCallback OtaAppCallback );
Paramètres d'entrée supprimés -
pvConnectionContext -

Le contexte de connexion est supprimé car la version 3 de la bibliothèque OTA ne nécessite pas que le contexte de connexion lui soit transmis et que les opérations MQTT/HTTP sont gérées par leurs interfaces respectives dans la démo/application OTA.

xTicksToAttendez -

Le paramètre ticks to wait est également supprimé car la tâche est créée dans la démo/l'application OTA avant d'appeler OTA_Init.

Paramètres d'entrée renommés -
Fonction X -

Le paramètre est renommé OtaAppCallback et son type est changé en OtaAppCallback _t.

Nouveaux paramètres d'entrée -
pOtaBuffer

L'application doit allouer les buffers et les transmettre à la bibliothèque OTA à l'aide de la structure OtaAppBuffer _t lors de l'initialisation. Les buffers requis varient légèrement en fonction du protocole utilisé pour télécharger le fichier. Pour le protocole MQTT, les buffers pour le nom du flux sont requis et pour le protocole HTTP, les buffers pour l'URL pré-signée et le schéma d'autorisation sont requis.

Buffers requis lors de l'utilisation de MQTT pour le téléchargement de fichiers -

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 requis lors de l'utilisation du protocole HTTP pour le téléchargement de fichiers -

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

Où -

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

Le deuxième paramètre d'entrée de OTA_Init est une référence aux interfaces OTA pour le type OtaInterfaces _t. Cet ensemble d'interfaces doit être transmis à la bibliothèque OTA et inclut dans l'interface du système d'exploitation l'interface MQTT, l'interface HTTP et l'interface de la couche d'abstraction de plate-forme.

Interface du système d'exploitation OTA

L'interface fonctionnelle du système d'exploitation OTA est un ensemble d'API qui doivent être implémentées pour que l'appareil puisse utiliser la bibliothèque OTA. Les implémentations des fonctions pour cette interface sont fournies à la bibliothèque OTA de l'application utilisateur. La bibliothèque OTA appelle les implémentations de fonctions pour exécuter des fonctionnalités généralement fournies par un système d'exploitation. Cela inclut la gestion des événements, des minuteries et de l'allocation de mémoire. Les implémentations pour FreeRTOS et POSIX sont fournies avec la bibliothèque OTA.

Exemple pour FreeRTOS utilisant le port FreeRTOS fourni -

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;

Exemple pour Linux utilisant le port POSIX fourni -

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

L'interface OTA MQTT est un ensemble d'API qui doivent être implémentées dans une bibliothèque pour permettre à la bibliothèque OTA de télécharger un bloc de fichiers depuis un service de streaming.

Exemple utilisant les API de l'agent CoreMQTT issues de la démo OTA over MQTT -

OtaInterfaces_t otaInterfaces; otaInterfaces.mqtt.subscribe = prvMqttSubscribe; otaInterfaces.mqtt.publish = prvMqttPublish; otaInterfaces.mqtt.unsubscribe = prvMqttUnSubscribe;
Interface HTTP

L'interface HTTP OTA est un ensemble d'API qui doivent être implémentées dans une bibliothèque pour permettre à la bibliothèque OTA de télécharger un bloc de fichiers en se connectant à une URL pré-signée et en récupérant des blocs de données. Elle est facultative, sauf si vous configurez la bibliothèque OTA pour qu'elle soit téléchargée à partir d'une URL pré-signée au lieu d'un service de streaming.

Exemple utilisant les API CoreHTTP de la démo OTA over HTTP -

OtaInterfaces_t otaInterfaces; otaInterfaces.http.init = httpInit; otaInterfaces.http.request = httpRequest; otaInterfaces.http.deinit = httpDeinit;
Interface OTA/PAL

L'interface PAL OTA est un ensemble d'API qui doivent être implémentées pour que l'appareil puisse utiliser la bibliothèque OTA. L'implémentation spécifique à l'appareil pour l'OTA PAL est fournie à la bibliothèque dans l'application utilisateur. Ces fonctions sont utilisées par la bibliothèque pour stocker, gérer et authentifier les téléchargements.

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;
Changements en retour -

Le retour passe de l'état d'agent OTA au code d'erreur OTA. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaErr _t.

OTA_Shutdown

Dans la version 1 de la bibliothèque OTA, l'API utilisée pour arrêter l'agent OTA était OTA_,AgentShutdown qui est désormais remplacée par OTA_Shutdown en même temps que les modifications des paramètres d'entrée.

Arrêt de l'agent OTA (version 1)
OTA_State_t OTA_AgentShutdown( TickType_t xTicksToWait );
Arrêt de l'agent OTA (version 3)
OtaState_t OTA_Shutdown( uint32_t ticksToWait, uint8_t unsubscribeFlag );
ticksToWait -

Le nombre de clics nécessaires pour attendre que l'agent OTA termine le processus d'arrêt. Si ce paramètre est mis à zéro, la fonction reviendra immédiatement sans attendre. L'état réel est renvoyé à l'appelant. L'agent ne dort pas pendant ce temps, mais est utilisé pour les boucles occupées.

Nouveau paramètre d'entrée -

Drapeau de désabonnement -

Indicateur indiquant si les opérations de désabonnement doivent être effectuées à partir des rubriques des tâches lorsque la fermeture est déclenchée. Si l'indicateur est 0, les opérations de désabonnement ne sont pas demandées pour les sujets de poste. Si l'application doit être désabonnée des rubriques de l'offre d'emploi, cet indicateur doit être défini sur 1 lorsque vous appelez OTA_Shutdown.

Changements en retour -

OtaState_t -

L'énumération de l'état de l'agent OTA et de ses membres est renommée. Reportez-vous à AWS IoTOver-the-air Update v3.0.0.

OTA_GetState

Le nom de l'API passe de OTA_AgentGetState à OTA_GetState.

Arrêt de l'agent OTA (version 1)
OTA_State_t OTA_GetAgentState( void );
Arrêt de l'agent OTA (version 3)
OtaState_t OTA_GetState( void );
Changements en retour -

OtaState_t -

L'énumération de l'état de l'agent OTA et de ses membres est renommée. Reportez-vous à AWS IoTOver-the-air Update v3.0.0.

OTA_GetStatistics

Nouvelle API unique ajoutée pour les statistiques. Elle remplace les API OTA_GetPacketsReceived, OTA_GetPacketsQueued, OTA_GetPacketsProcessed, OTA_GetPacketsDropped. De plus, dans la version 3 de la bibliothèque OTA, les numéros de statistiques ne concernent que la tâche en cours.

Version 1 vers la version 1
uint32_t OTA_GetPacketsReceived( void ); uint32_t OTA_GetPacketsQueued( void ); uint32_t OTA_GetPacketsProcessed( void ); uint32_t OTA_GetPacketsDropped( void );
Version 3 vers la version 3
OtaErr_t OTA_GetStatistics( OtaAgentStatistics_t * pStatistics );
Statistiques -

Paramètre d'entrée/sortie pour les données statistiques telles que les paquets reçus, déposés, mis en file d'attente et traités pour la tâche en cours.

Paramètre de sortie -

Code d'erreur OTA.

Exemple d'utilisation -
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_ActivateNewImage

Les paramètres d'entrée sont les mêmes mais le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_Err_t OTA_ActivateNewImage( void );
Version 3 vers la version 3
OtaErr_t OTA_ActivateNewImage( void );

L'énumération des codes d'erreur OTA renvoyés est modifiée et de nouveaux codes d'erreur sont ajoutés. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaErr _t.

Exemple d'utilisation -
OtaErr_t otaErr = OtaErrNone; otaErr = OTA_ActivateNewImage(); /* Handle error */

OTA_SetImageState

Les paramètres d'entrée sont identiques et renommés, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_Err_t OTA_SetImageState( OTA_ImageState_t eState );
Version 3 vers la version 3
OtaErr_t OTA_SetImageState( OtaImageState_t state );

Le paramètre d'entrée est renommé en OtaImageState _t. Reportez-vous à AWS IoTOver-the-air Update v3.0.0.

L'énumération des codes d'erreur OTA renvoyés est modifiée et de nouveaux codes d'erreur sont ajoutés. Reportez-vous à AWS IoTOver-the-air Update v3.0.0/ OtaErr_t.

Exemple d'utilisation -
OtaErr_t otaErr = OtaErrNone; otaErr = OTA_SetImageState( OtaImageStateAccepted ); /* Handle error */

OTA_GetImageState

Les paramètres d'entrée sont les mêmes, l'énumération de retour est renommée dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_ImageState_t OTA_GetImageState( void );
Version 3 vers la version 3
OtaImageState_t OTA_GetImageState( void );

L'énumération de retour est renommée OtaImageState _t. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaImageState _t.

Exemple d'utilisation -
OtaImageState_t imageState; imageState = OTA_GetImageState();

OTA_Suspendre

Les paramètres d'entrée sont les mêmes, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_Err_t OTA_Suspend( void );
Version 3 vers la version 3
OtaErr_t OTA_Suspend( void );

L'énumération des codes d'erreur OTA renvoyés est modifiée et de nouveaux codes d'erreur sont ajoutés. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaErr _t.

Exemple d'utilisation -
OtaErr_t xOtaError = OtaErrUninitialized; xOtaError = OTA_Suspend(); /* Handle error */

OTA_CV

Le paramètre d'entrée pour la connexion est supprimé lorsque la connexion est gérée dans la démo/l'application OTA, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_Err_t OTA_Resume( void * pxConnection );
Version 3 vers la version 3
OtaErr_t OTA_Resume( void );

L'énumération des codes d'erreur OTA renvoyés est modifiée et de nouveaux codes d'erreur sont ajoutés. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaErr _t.

Exemple d'utilisation -
OtaErr_t xOtaError = OtaErrUninitialized; xOtaError = OTA_Resume(); /* Handle error */

OTA_CheckForUpdate

Les paramètres d'entrée sont les mêmes, le code d'erreur OTA renvoyé est renommé et de nouveaux codes d'erreur sont ajoutés dans la version 3 de la bibliothèque OTA.

Version 1 vers la version 1
OTA_Err_t OTA_CheckForUpdate( void );
Version 3 vers la version 3
OtaErr_t OTA_CheckForUpdate( void )

L'énumération des codes d'erreur OTA renvoyés est modifiée et de nouveaux codes d'erreur sont ajoutés. Reportez-vous à AWS IoTOver-the-air Update v3.0.0 : OtaErr _t.

OTA_EventProcessingTask

Il s'agit d'une nouvelle API et de la boucle d'événements principale permettant de gérer les événements pour les mises à jour OTA. Il doit être appelé par la tâche de l'application. Cette boucle continuera à gérer et à exécuter les événements reçus pour OTA Update jusqu'à ce que cette tâche soit terminée par l'application.

Version 3 vers la version 3
void OTA_EventProcessingTask( void * pUnused );
Exemple pour 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 ); }
Exemple pour 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_SignalEvent

Il s'agit d'une nouvelle API qui ajoute l'événement à la fin de la file d'attente des événements et qui est également utilisée par les modules OTA internes pour signaler la tâche de l'agent.

Version 3 vers la version 3
bool OTA_SignalEvent( const OtaEventMsg_t * const pEventMsg );
Exemple d'utilisation -
OtaEventMsg_t xEventMsg = { 0 }; xEventMsg.eventId = OtaAgentEventStart; ( void ) OTA_SignalEvent( &xEventMsg );

Intégration de la bibliothèque OTA en tant que sous-module dans votre application

Si vous souhaitez intégrer la bibliothèque OTA dans votre propre application, vous pouvez utiliser la commande git submodule. Les sous-modules Git vous permettent de conserver un dépôt Git en tant que sous-répertoire d'un autre dépôt Git. La version 3 de la bibliothèque OTA est conservée dans le référentiel 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

Pour plus d'informations, consultez la section Intégration de l'agent OTA à votre application dans le Guide de l'utilisateur de FreeRTOS.

Références