summaryrefslogtreecommitdiffstats
path: root/ucs2-lib/src/ucs_rsm.c
diff options
context:
space:
mode:
authorRonan Le Martret <ronan.lemartret@iot.bzh>2017-06-12 11:17:04 +0200
committerRonan Le Martret <ronan.lemartret@iot.bzh>2017-06-29 14:40:09 +0200
commitec59d20bafb3acaaff2bbcab185a074825319e20 (patch)
tree2262fa512acadeb1dfa68bad7b2bb5a5c7de2467 /ucs2-lib/src/ucs_rsm.c
parenta57c0b35c05c84f31ec09d3ac46b298555aa0cfb (diff)
Update package
* use sub module for ucs2-lib (tmp fork from IoT.bzh github) * add packaging for native build Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
Diffstat (limited to 'ucs2-lib/src/ucs_rsm.c')
-rw-r--r--ucs2-lib/src/ucs_rsm.c640
1 files changed, 0 insertions, 640 deletions
diff --git a/ucs2-lib/src/ucs_rsm.c b/ucs2-lib/src/ucs_rsm.c
deleted file mode 100644
index bb40743..0000000
--- a/ucs2-lib/src/ucs_rsm.c
+++ /dev/null
@@ -1,640 +0,0 @@
-/*------------------------------------------------------------------------------------------------*/
-/* UNICENS V2.1.0-3491 */
-/* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG. */
-/* */
-/* This program is free software: you can redistribute it and/or modify */
-/* it under the terms of the GNU General Public License as published by */
-/* the Free Software Foundation, either version 2 of the License, or */
-/* (at your option) any later version. */
-/* */
-/* This program is distributed in the hope that it will be useful, */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
-/* GNU General Public License for more details. */
-/* */
-/* You should have received a copy of the GNU General Public License */
-/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
-/* */
-/* You may also obtain this software under a propriety license from Microchip. */
-/* Please contact Microchip for further information. */
-/*------------------------------------------------------------------------------------------------*/
-
-/*!
- * \file
- * \brief Implementation of the Sync Management.
- *
- * \cond UCS_INTERNAL_DOC
- * \addtogroup G_RSM
- * @{
- */
-
-/*------------------------------------------------------------------------------------------------*/
-/* Includes */
-/*------------------------------------------------------------------------------------------------*/
-#include "ucs_rsm.h"
-
-/*------------------------------------------------------------------------------------------------*/
-/* Service parameters */
-/*------------------------------------------------------------------------------------------------*/
-/*! Priority of the RSM service used by scheduler */
-static const uint8_t RSM_SRV_PRIO = 250U; /* parasoft-suppress MISRA2004-8_7 "Value shall be part of the module, not part of a function." */
-/*! \brief Event for processing one of the below tasks */
-static const Srv_Event_t RSM_EVENT_PROCESS_DEV = 0x01U;
-/*! \brief Event for signaling the SyncLost event */
-static const Srv_Event_t RSM_EVENT_SIG_SYNCLOST = 0x02U;
-
-/*------------------------------------------------------------------------------------------------*/
-/* Internal Constants */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Mask for the Network Availability Info */
-static const uint32_t RSM_MASK_NETWORK_AVAILABILITY = 0x0002U;
-/*! \brief Mask for the Network NodeAddress Info */
-static const uint32_t RSM_MASK_NETWORK_NODE_ADDRESS = 0x0010U;
-/*! \brief Mask for the Network MaxPosition Info */
-static const uint32_t RSM_MASK_NETWORK_MAX_POSITION = 0x0040U;
-
-/*! \brief Invalid device node address */
-static const uint16_t RSM_INVALID_NODE_ADDRESS = 0x0000U;
-
-/*------------------------------------------------------------------------------------------------*/
-/* Internal prototypes */
-/*------------------------------------------------------------------------------------------------*/
-static void Rsm_Service (void *self);
-static void Rsm_ProcessJob (CRemoteSyncManagement *self);
-static Ucs_Return_t Rsm_SendSync (CRemoteSyncManagement *self);
-static Ucs_Return_t Rsm_RequestNtfDevId (CRemoteSyncManagement *self);
-static Ucs_Return_t Rsm_ClearLastNtfDevId (CRemoteSyncManagement *self);
-static Ucs_Return_t Rsm_SetNotificationAll (CRemoteSyncManagement * self);
-static Ucs_Return_t Rsm_SetNotificationGpio (CRemoteSyncManagement * self);
-static Ucs_Return_t Rsm_ProcessDeviceJob (CRemoteSyncManagement *self);
-static bool Rsm_IsLocal (CRemoteSyncManagement * self);
-static void Rsm_MnsInitSucceededCb(void *self, void *event_ptr);
-static void Rsm_MnsNwStatusInfosCb(void *self, void *event_ptr);
-static void Rsm_SyncResultCb(void *self, void *result_ptr);
-static void Rsm_MsgObjAvailCb(void *self, void *result_ptr);
-static void Rsm_SignalSyncCompleted (CRemoteSyncManagement * self);
-static void Rsm_SignalSyncError (CRemoteSyncManagement * self);
-static void Rsm_SignalSyncLost (CRemoteSyncManagement * self);
-
-/*------------------------------------------------------------------------------------------------*/
-/* Implementation of class CRemoteSyncManager */
-/*------------------------------------------------------------------------------------------------*/
-
-/*------------------------------------------------------------------------------------------------*/
-/* Initialization Methods */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Constructor of the Remote Sync Manager class.
- * \param self Instance pointer
- * \param init_ptr init data_ptr
- */
-void Rsm_Ctor(CRemoteSyncManagement *self, Rsm_InitData_t *init_ptr)
-{
- MISC_MEM_SET(self, 0, sizeof(CRemoteSyncManagement));
-
- /* Init all instances */
- self->base_ptr = init_ptr->base_ptr;
- self->inic_ptr = init_ptr->inic_ptr;
- self->net_ptr = init_ptr->net_ptr;
-
- /* Init observer */
- Mobs_Ctor(&self->event_param.ucsinit_observer, self, EH_E_INIT_SUCCEEDED, &Rsm_MnsInitSucceededCb);
- Sobs_Ctor(&self->event_param.stdresult_observer, self, &Rsm_SyncResultCb);
- Obs_Ctor(&self->event_param.txavailability_observer, self, &Rsm_MsgObjAvailCb);
-
- /* Init event_param variables */
- self->event_param.own_device_address = RSM_INVALID_NODE_ADDRESS;
-
- /* Initialize Sync Management service */
- Srv_Ctor(&self->rsm_srv, RSM_SRV_PRIO, self, &Rsm_Service);
- /* Add RSM service to scheduler */
- (void)Scd_AddService(&self->base_ptr->scd, &self->rsm_srv);
- /* Add Observer for MNS initialization Result */
- Eh_AddObsrvInternalEvent(&self->base_ptr->eh, &self->event_param.ucsinit_observer);
-}
-
-/*------------------------------------------------------------------------------------------------*/
-/* Service */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Add an observer to the SyncLost Event subject
- * \param self Instance pointer
- * \param obs init data_ptr
- */
-void Rsm_AddObserver(CRemoteSyncManagement * self, CObserver * obs)
-{
- (void)Sub_AddObserver(&self->event_param.subject, obs);
-}
-
-/*! \brief Removes an observer registered by Rsm_AddObserver
- * \param self Instance pointer
- * \param obs_ptr observer to be removed
- */
-void Rsm_DelObserver(CRemoteSyncManagement * self, CObserver * obs_ptr)
-{
- (void)Sub_RemoveObserver(&self->event_param.subject, obs_ptr);
-}
-
-/*! \brief Synchronizes to the given device
- * \param self Instance pointer
- * \param user_data reference to the user data that'll be attached in the sync_complete_fptr callback function
- * \param sync_complete_fptr result callback function to the device to be synchronized
- * \return Possible return values are
- * - \c UCS_RET_ERR_API_LOCKED the API is locked.
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- * - \c UCS_RET_ERR_PARAM parameter exceeds its admissible range
- */
-Ucs_Return_t Rsm_SyncDev(CRemoteSyncManagement * self, void* user_data, Rsm_ResultCb_t sync_complete_fptr)
-{
- Ucs_Return_t result = UCS_RET_ERR_API_LOCKED;
-
- if (self->dev_infos.sync_state != RSM_DEV_SYNCING)
- {
- self->dev_infos.curr_user_data = user_data;
- self->dev_infos.curr_res_cb_fptr = sync_complete_fptr;
- if (self->dev_infos.sync_state == RSM_DEV_SYNCED)
- {
- self->dev_infos.next_st = RSM_ST_SYNC_SUCC;
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_PROCESS_DEV);
- result = UCS_RET_SUCCESS;
- }
- else
- {
- if (Rsm_IsLocal(self))
- {
- self->dev_infos.next_st = RSM_ST_NTF_GPIO;
- }
- else
- {
- self->dev_infos.next_st = RSM_ST_SYNC_REQ;
- }
- result = Rsm_ProcessDeviceJob (self);
- }
- }
-
- return result;
-}
-
-/*! \brief Returns the state (ready or busy) of the given device.
- * \param self Instance pointer.
- * \return state of the given device.
- */
-Rsm_DevSyncState_t Rsm_GetDevState(CRemoteSyncManagement * self)
-{
- return self->dev_infos.sync_state;
-}
-
-/*! \brief Reports SyncLost for the given RSM instance.
- * \param self Reference to the instance ptr
- */
-void Rsm_ReportSyncLost (CRemoteSyncManagement * self)
-{
- self->last_synclost_cause = RSM_SLC_CFGNOTOK;
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_SIG_SYNCLOST);
-}
-
-/*------------------------------------------------------------------------------------------------*/
-/* Private Methods */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Service function of the Sync management.
- * \param self Instance pointer
- */
-static void Rsm_Service (void *self)
-{
- CRemoteSyncManagement *self_ = (CRemoteSyncManagement *)self;
- Srv_Event_t event_mask;
- Srv_GetEvent(&self_->rsm_srv, &event_mask);
-
- /* Handle event to process jobs within devices */
- if((event_mask & RSM_EVENT_PROCESS_DEV) == RSM_EVENT_PROCESS_DEV)
- {
- Srv_ClearEvent(&self_->rsm_srv, RSM_EVENT_PROCESS_DEV);
- Rsm_ProcessJob(self_);
- }
-
- /* Handle event to signal "SyncLost" */
- if((event_mask & RSM_EVENT_SIG_SYNCLOST) == RSM_EVENT_SIG_SYNCLOST)
- {
- Srv_ClearEvent(&self_->rsm_srv, RSM_EVENT_SIG_SYNCLOST);
- Rsm_SignalSyncLost(self_);
- }
-}
-
-/*! \brief Processes the next job, if available, in a device.
- * \param self Instance pointer
- */
-static void Rsm_ProcessJob (CRemoteSyncManagement *self)
-{
- if (self->dev_infos.next_st != RSM_ST_IDLE)
- {
- (void)Rsm_ProcessDeviceJob(self);
- }
-}
-
-/*! \brief Processes the next job for the given device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- * - \c UCS_RET_ERR_API_LOCKED The INIC API is locked
- * - \c UCS_RET_ERR_PARAM parameter exceeds its admissible range
- */
-static Ucs_Return_t Rsm_ProcessDeviceJob (CRemoteSyncManagement *self)
-{
- Ucs_Return_t result = UCS_RET_SUCCESS;
-
- switch (self->dev_infos.next_st)
- {
- case RSM_ST_SYNC_REQ:
- result = Rsm_SendSync (self);
- break;
-
- case RSM_ST_NTF_REQ:
- result = Rsm_RequestNtfDevId (self);
- break;
-
- case RSM_ST_NTF_CLEAR:
- result = Rsm_ClearLastNtfDevId (self);
- break;
-
- case RSM_ST_NTF_ALL:
- result = Rsm_SetNotificationAll (self);
- break;
-
- case RSM_ST_NTF_GPIO:
- result = Rsm_SetNotificationGpio (self);
- break;
-
- case RSM_ST_SYNC_SUCC:
- Rsm_SignalSyncCompleted (self);
- break;
-
- case RSM_ST_SYNC_ERR:
- Rsm_SignalSyncError (self);
- break;
-
- default:
- TR_ERROR((self->base_ptr->ucs_user_ptr, "[RSM]", "Unexpected State Transition: 0x%02X", 1U, (Rsm_StateTransition_t)(self->dev_infos.next_st)));
- break;
- }
-
- return result;
-}
-
-/*! \brief Sends a Sync command to the given device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- */
-static Ucs_Return_t Rsm_SendSync (CRemoteSyncManagement *self)
-{
- Ucs_Return_t result;
-
- result = Inic_DeviceSync (self->inic_ptr,
- &self->event_param.stdresult_observer);
-
- if(result == UCS_RET_SUCCESS)
- {
- self->dev_infos.sync_state = RSM_DEV_SYNCING;
- TR_INFO((self->base_ptr->ucs_user_ptr, "[RSM]", "Start synchronization to remote device", 0U));
- }
- else if(result == UCS_RET_ERR_BUFFER_OVERFLOW)
- {
- Inic_AddObsrvOnTxMsgObjAvail(self->inic_ptr, &self->event_param.txavailability_observer);
- }
-
- return result;
-}
-
-/*! \brief Retrieves the ID of the device that has notified to the INIC.DeviceStatus() FktIDs on the given remote device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- * - \c UCS_RET_ERR_API_LOCKED The INIC API is locked
- */
-static Ucs_Return_t Rsm_RequestNtfDevId (CRemoteSyncManagement *self)
-{
- Ucs_Return_t result;
- uint16_t funcid_devstatus = (uint16_t)0x0220;
-
- result = Inic_Notification_Get(self->inic_ptr, funcid_devstatus, &self->event_param.stdresult_observer);
- if(result == UCS_RET_SUCCESS)
- {
- TR_INFO((self->base_ptr->ucs_user_ptr, "[RSM]", "DeviceId Request for INIC.DeviceStatus() succeeded", 0U));
- }
- else if (result == UCS_RET_ERR_BUFFER_OVERFLOW)
- {
- Inic_AddObsrvOnTxMsgObjAvail(self->inic_ptr, &self->event_param.txavailability_observer);
- }
- else
- {
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_PROCESS_DEV);
- }
-
- return result;
-}
-
-/*! \brief Clears the current DevId of all remote functions on the given remote device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- * - \c UCS_RET_ERR_PARAM parameter exceeds its admissible range
- */
-static Ucs_Return_t Rsm_ClearLastNtfDevId (CRemoteSyncManagement *self)
-{
- Ucs_Return_t result;
- Ucs_Inic_NotificationCtrl_t control = UCS_INIC_NTF_CLEAR_ALL;
- Inic_FktIdList_t rm_fktid_list;
- rm_fktid_list.fktids_ptr = NULL;
- rm_fktid_list.num_fktids = 0U;
-
- result = Inic_Notification_Set(self->inic_ptr, control, self->event_param.own_device_address, rm_fktid_list);
- if(result == UCS_RET_SUCCESS)
- {
- self->dev_infos.next_st = RSM_ST_NTF_ALL;
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_PROCESS_DEV);
- TR_INFO((self->base_ptr->ucs_user_ptr, "[RSM]", "Clear DevId for all Remote functions succeeded", 0U));
- }
- else if (result == UCS_RET_ERR_BUFFER_OVERFLOW)
- {
- Inic_AddObsrvOnTxMsgObjAvail(self->inic_ptr, &self->event_param.txavailability_observer);
- }
-
- return result;
-}
-
-/*! \brief Sets all notification for the given remote device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- * - \c UCS_RET_ERR_PARAM parameter exceeds its admissible range
- */
-static Ucs_Return_t Rsm_SetNotificationAll (CRemoteSyncManagement * self)
-{
- Ucs_Return_t result;
- Ucs_Inic_NotificationCtrl_t control = UCS_INIC_NTF_SET_FUNC;
-
- uint16_t funcid_list[2] = {0x0705U, 0x0802U};
- Inic_FktIdList_t rm_fktid_list;
- rm_fktid_list.fktids_ptr = &funcid_list[0];
- rm_fktid_list.num_fktids = 2U;
-
- result = Inic_Notification_Set(self->inic_ptr, control, self->event_param.own_device_address, rm_fktid_list);
- if(result == UCS_RET_SUCCESS)
- {
- self->dev_infos.next_st = RSM_ST_SYNC_SUCC;
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_PROCESS_DEV);
- TR_INFO((self->base_ptr->ucs_user_ptr, "[RSM]", "Set Notification for All Remote functions succeeded", 0U));
- }
- else if (result == UCS_RET_ERR_BUFFER_OVERFLOW)
- {
- Inic_AddObsrvOnTxMsgObjAvail(self->inic_ptr, &self->event_param.txavailability_observer);
- }
-
- return result;
-}
-
-/*! \brief Sets Gpio notification for the local device.
- * \param self Instance pointer
- * \return Possible return values are
- * - \c UCS_RET_SUCCESS if the transmission was started successfully
- * - \c UCS_RET_ERR_BUFFER_OVERFLOW if no TxHandles available
- */
-static Ucs_Return_t Rsm_SetNotificationGpio (CRemoteSyncManagement * self)
-{
- Ucs_Return_t result;
- /*! \brief GPIO TriggerEvent function id */
- uint16_t RSM_GPIOTREVENT_FUNCID = 0x0705U;
- /*! \brief Local EHC address */
- uint16_t RSM_EHC_ADDRESS = 0x0002U;
-
- Ucs_Inic_NotificationCtrl_t control = UCS_INIC_NTF_SET_FUNC;
- uint16_t funcid_resmonitor = RSM_GPIOTREVENT_FUNCID;
- Inic_FktIdList_t rm_fktid_list;
- rm_fktid_list.fktids_ptr = &funcid_resmonitor;
- rm_fktid_list.num_fktids = 1U;
-
- result = Inic_Notification_Set(self->inic_ptr, control, RSM_EHC_ADDRESS, rm_fktid_list);
- if(result == UCS_RET_SUCCESS)
- {
- self->dev_infos.next_st = RSM_ST_SYNC_SUCC;
- Srv_SetEvent(&self->rsm_srv, RSM_EVENT_PROCESS_DEV);
- }
- else if (result == UCS_RET_ERR_BUFFER_OVERFLOW)
- {
- Inic_AddObsrvOnTxMsgObjAvail(self->inic_ptr, &self->event_param.txavailability_observer);
- }
-
- return result;
-}
-
-/*! \brief Check whether the given device is local or remote.
- * \param self Instance pointer
- * \return Returns \c true if the device is local, otherwise \c false.
- */
-static bool Rsm_IsLocal (CRemoteSyncManagement *self)
-{
- return (Inic_GetTargetAddress(self->inic_ptr) == UCS_ADDR_LOCAL_DEV);
-}
-
-/*------------------------------------------------------------------------------------------------*/
-/* Callback Functions */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Called if MNS initialization has been succeeded.
- * \param self Instance pointer
- * \param event_ptr Reference to reported event
- */
-static void Rsm_MnsInitSucceededCb(void *self, void *event_ptr)
-{
- CRemoteSyncManagement *self_ = (CRemoteSyncManagement *)self;
- MISC_UNUSED(event_ptr);
-
- /* Remove ucsinit_observer */
- Eh_DelObsrvInternalEvent(&self_->base_ptr->eh, &self_->event_param.ucsinit_observer);
-
- /* Add network status observer */
- Mobs_Ctor(&self_->event_param.nwstatus_observer, self, RSM_MASK_NETWORK_NODE_ADDRESS, &Rsm_MnsNwStatusInfosCb);
- Net_AddObserverNetworkStatus(self_->net_ptr, &self_->event_param.nwstatus_observer);
-}
-
-/*! \brief Result callback for the "Sync Request".
- * \param self Instance pointer
- * \param result_ptr Reference to the result.
- */
-static void Rsm_SyncResultCb(void *self, void *result_ptr)
-{
- CRemoteSyncManagement *self_ = (CRemoteSyncManagement *)self;
- Inic_StdResult_t *result_ptr_ = (Inic_StdResult_t *)result_ptr;
- Inic_NotificationResult_t * res_inf = NULL;
-
- if(result_ptr_->result.code == UCS_RES_SUCCESS)
- {
- if (self_->dev_infos.sync_state == RSM_DEV_SYNCING)
- {
- switch (self_->dev_infos.next_st)
- {
- case RSM_ST_SYNC_REQ:
- self_->dev_infos.next_st = RSM_ST_NTF_REQ;
- TR_INFO((self_->base_ptr->ucs_user_ptr, "[RSM]", "Remote DeviceSync has been successfully created.", 0U));
- break;
-
- case RSM_ST_NTF_REQ:
- res_inf = (Inic_NotificationResult_t *)result_ptr_->data_info;
- if (res_inf != NULL)
- {
- if (res_inf->device_id == RSM_INVALID_NODE_ADDRESS)
- {
- self_->dev_infos.next_st = RSM_ST_NTF_ALL;
- }
- else
- {
- self_->dev_infos.next_st = RSM_ST_NTF_CLEAR;
- }
- }
- break;
-
- default:
- break;
- }
- Srv_SetEvent(&self_->rsm_srv, RSM_EVENT_PROCESS_DEV);
- }
- }
- else
- {
- self_->dev_infos.next_st = RSM_ST_SYNC_ERR;
- self_->dev_infos.curr_result.code = RSM_RES_ERR_SYNC;
- self_->dev_infos.curr_result.details.inic_result = result_ptr_->result;
- if (result_ptr_->result.code == UCS_RES_ERR_TRANSMISSION)
- {
- self_->dev_infos.curr_result.details.tx_result = *(Ucs_MsgTxStatus_t *)(result_ptr_->data_info);
- }
- else
- {
- self_->dev_infos.curr_result.details.tx_result = UCS_MSG_STAT_OK;
- }
-
- Srv_SetEvent(&self_->rsm_srv, RSM_EVENT_PROCESS_DEV);
- TR_ERROR((self_->base_ptr->ucs_user_ptr, "[RSM]", "Synchronization to the remote device failed. Result code: 0x%02X", 1U, result_ptr_->result.code));
- if (result_ptr_->result.info_ptr != NULL)
- {
- TR_ERROR_INIC_RESULT(self_->base_ptr->ucs_user_ptr, "[RSM]", result_ptr_->result.info_ptr, result_ptr_->result.info_size);
- }
- }
-}
-
-/*! \brief Event Callback function for the network status.
- * \param self Instance pointer
- * \param event_ptr Reference to the events
- */
-static void Rsm_MnsNwStatusInfosCb(void *self, void *event_ptr)
-{
- CRemoteSyncManagement *self_ = (CRemoteSyncManagement *)self;
- Net_NetworkStatusParam_t *result_ptr_ = (Net_NetworkStatusParam_t *)event_ptr;
- bool signal_synclost = false;
-
- if ((RSM_MASK_NETWORK_NODE_ADDRESS & result_ptr_->change_mask) == RSM_MASK_NETWORK_NODE_ADDRESS)
- {
- if (result_ptr_->node_address != 0xFFFFU)
- {
- if ((self_->event_param.own_device_address != RSM_INVALID_NODE_ADDRESS) &&
- (result_ptr_->node_address != self_->event_param.own_device_address))
- {
- self_->last_synclost_cause = RSM_SLC_SYSMODIF;
- signal_synclost = true;
- }
-
- self_->event_param.own_device_address = result_ptr_->node_address;
- }
- }
-
- if (signal_synclost)
- {
- Srv_SetEvent(&self_->rsm_srv, RSM_EVENT_SIG_SYNCLOST);
- }
-}
-
-/*! \brief Event Callback function that signals that a TxMsgObj is now available.
- * \param self Instance pointer
- * \param result_ptr Reference to the results
- */
-static void Rsm_MsgObjAvailCb(void *self, void *result_ptr)
-{
- CRemoteSyncManagement *self_ = (CRemoteSyncManagement *)self;
- MISC_UNUSED(result_ptr);
-
- Srv_SetEvent(&self_->rsm_srv, RSM_EVENT_PROCESS_DEV);
-
- /* delete observer */
- Inic_DelObsrvOnTxMsgObjAvail(self_->inic_ptr, &self_->event_param.txavailability_observer);
-}
-
-/*------------------------------------------------------------------------------------------------*/
-/* Notification Functions */
-/*------------------------------------------------------------------------------------------------*/
-/*! \brief Signals the successful synchronization to a remote device.
- * \param self Instance pointer
- */
-static void Rsm_SignalSyncCompleted (CRemoteSyncManagement * self)
-{
- Rsm_ResultCb_t tmp_res_cb = self->dev_infos.curr_res_cb_fptr;
- void * data = self->dev_infos.curr_user_data;
- Rsm_Result_t res = {RSM_RES_SUCCESS, {UCS_MSG_STAT_OK, {UCS_RES_SUCCESS, NULL, 0}}};
-
- self->dev_infos.sync_state = RSM_DEV_SYNCED;
- self->dev_infos.next_st = RSM_ST_IDLE;
- self->dev_infos.curr_res_cb_fptr = NULL;
- self->dev_infos.curr_user_data = NULL;
-
- if (tmp_res_cb != NULL)
- {
- tmp_res_cb(data, res);
- }
-}
-
-/*! \brief Signals that the synchronization to a remote device failed.
- * \param self Instance pointer
- */
-static void Rsm_SignalSyncError (CRemoteSyncManagement * self)
-{
- Rsm_ResultCb_t tmp_res_cb = self->dev_infos.curr_res_cb_fptr;
- void * data = self->dev_infos.curr_user_data;
-
- self->dev_infos.sync_state = RSM_DEV_UNSYNCED;
- self->dev_infos.next_st = RSM_ST_IDLE;
- self->dev_infos.curr_res_cb_fptr = NULL;
- self->dev_infos.curr_user_data = NULL;
-
- if (tmp_res_cb != NULL)
- {
- tmp_res_cb(data, self->dev_infos.curr_result);
- }
-}
-
-/*! \brief Signals that the synchronization to a remote device has been lost.
- * \param self Instance pointer
- */
-static void Rsm_SignalSyncLost (CRemoteSyncManagement * self)
-{
- if ((self->dev_infos.sync_state == RSM_DEV_SYNCED) &&
- (!Rsm_IsLocal(self)))
- {
- self->dev_infos.sync_state = RSM_DEV_UNSYNCED;
- if(Sub_GetNumObservers(&self->event_param.subject) > 0U)
- {
- Sub_Notify(&self->event_param.subject, &self->last_synclost_cause);
- }
- }
-}
-
-/*!
- * @}
- * \endcond
- */
-
-/*------------------------------------------------------------------------------------------------*/
-/* End of file */
-/*------------------------------------------------------------------------------------------------*/
-