summaryrefslogtreecommitdiff
path: root/lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c
diff options
context:
space:
mode:
Diffstat (limited to 'lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c')
-rw-r--r--lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c b/lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c
new file mode 100644
index 0000000..baf1d7a
--- /dev/null
+++ b/lcmodule/source/cnh1606344_ldr_communication_module/source/r15_family.c
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (C) ST-Ericsson SA 2011
+ * License terms: 3-clause BSD license
+ ******************************************************************************/
+/**
+ * @addtogroup ldr_communication_serv
+ * @{
+ */
+
+/*******************************************************************************
+ * Includes
+ ******************************************************************************/
+#include "r_r15_family.h"
+#include "r_r15_transport_layer.h"
+#include "r_r15_network_layer.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "r_debug_macro.h"
+/*******************************************************************************
+ * File scope types, constants and variables
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Definition of external functions
+ ******************************************************************************/
+
+/*
+ * R15 family protocols initialization.
+ *
+ * @param [in] Communication_p Communication module context.
+ *
+ * @retval E_SUCCESS After successful execution.
+ * @retval E_INVALID_INPUT_PARAMETERS Invalid input parameter.
+ */
+ErrorCode_e R15_Family_Init(Communication_t *Communication_p)
+{
+ ErrorCode_e ReturnValue = E_INVALID_INPUT_PARAMETERS;
+
+ VERIFY(NULL != Communication_p, E_INVALID_INPUT_PARAMETERS);
+
+ Communication_p->FamilyContext_p = malloc(sizeof(R15_FamilyContext_t));
+ VERIFY(NULL != Communication_p->FamilyContext_p, E_ALLOCATE_FAILED);
+
+#ifndef CFG_ENABLE_LOADER_TYPE
+ Communication_p->CurrentFamilyHash = HASH_NONE;
+#else
+#ifdef DISABLE_SECURITY
+ Communication_p->CurrentFamilyHash = HASH_NONE;
+#else
+ Communication_p->CurrentFamilyHash = HASH_SHA256;
+#endif
+#endif
+
+ R15_NETWORK(Communication_p)->Inbound.StopTransfer = FALSE;
+
+ if (NULL != Communication_p->BackupCommBuffer_p) {
+ if (Communication_p->BackupCommBufferSize <= HEADER_LENGTH) {
+ memcpy(R15_NETWORK(Communication_p)->Inbound.Scratch, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);
+ R15_NETWORK(Communication_p)->Inbound.ReqData = HEADER_LENGTH - Communication_p->BackupCommBufferSize;
+ R15_NETWORK(Communication_p)->Inbound.ReqBuffOffset = Communication_p->BackupCommBufferSize;
+ R15_NETWORK(Communication_p)->Inbound.RecBackupData = Communication_p->BackupCommBufferSize;
+ Communication_p->BackupCommBufferSize = 0;
+ } else {
+ memcpy(R15_NETWORK(Communication_p)->Inbound.Scratch, Communication_p->BackupCommBuffer_p, HEADER_LENGTH);
+ Communication_p->BackupCommBufferSize = Communication_p->BackupCommBufferSize - HEADER_LENGTH;
+ R15_NETWORK(Communication_p)->Inbound.RecBackupData = HEADER_LENGTH;
+ }
+
+ C_(printf("r15_family.c(%d) BackupBuffer=0x%x Size=%d\n", __LINE__, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);)
+ R15_NETWORK(Communication_p)->Inbound.State = RECEIVE_HEADER;
+ R15_NETWORK(Communication_p)->Inbound.Target_p = R15_NETWORK(Communication_p)->Inbound.Scratch;
+ R15_NETWORK(Communication_p)->Inbound.LCM_Error = E_SUCCESS;
+ } else {
+ Communication_p->BackupCommBufferSize = 0;
+ }
+
+ ReturnValue = R15_Transport_Initialize(Communication_p);
+ VERIFY(E_SUCCESS == ReturnValue, ReturnValue);
+
+ ReturnValue = R15_Network_Initialize(Communication_p);
+
+ErrorExit:
+ A_(printf("r15_family.c(%d) ErrorCode=%d\n", __LINE__, ReturnValue);)
+ return ReturnValue;
+}
+
+
+/*
+ * R15 family protocols sutdown.
+ *
+ * @param [in] Communication_p Communication module context.
+ *
+ * @retval E_SUCCESS After successful execution.
+ * @retval E_INVALID_INPUT_PARAMETERS Invalid input parameter.
+ */
+ErrorCode_e R15_Family_Shutdown(Communication_t *Communication_p)
+{
+ ErrorCode_e ReturnValue = E_INVALID_INPUT_PARAMETERS;
+
+ VERIFY(NULL != Communication_p, E_INVALID_INPUT_PARAMETERS);
+
+ if (NULL != Communication_p->BackupCommBuffer_p) {
+ free(Communication_p->BackupCommBuffer_p);
+ Communication_p->BackupCommBuffer_p = NULL;
+ }
+
+ Communication_p->BackupCommBuffer_p = (uint8 *)malloc(HEADER_LENGTH + BULK_EXTENDED_HEADER_LENGTH);
+ VERIFY(NULL != Communication_p->BackupCommBuffer_p, E_ALLOCATE_FAILED);
+ memcpy(Communication_p->BackupCommBuffer_p, R15_NETWORK(Communication_p)->Inbound.Scratch, HEADER_LENGTH + BULK_EXTENDED_HEADER_LENGTH);
+ Communication_p->BackupCommBufferSize = HEADER_LENGTH + BULK_EXTENDED_HEADER_LENGTH;
+ C_(printf("r15_family.c(%d) BackupBuffer=0x%x, Size=%d \n", __LINE__, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);)
+
+ Communication_p->CurrentFamilyHash = HASH_NONE;
+
+ ReturnValue = R15_Transport_Shutdown(Communication_p);
+ VERIFY(E_SUCCESS == ReturnValue, ReturnValue);
+
+ ReturnValue = R15_Network_Shutdown(Communication_p);
+ VERIFY(E_SUCCESS == ReturnValue, ReturnValue);
+
+ErrorExit:
+
+ if (NULL != Communication_p) {
+ if (NULL != Communication_p->FamilyContext_p) {
+ free(Communication_p->FamilyContext_p);
+ Communication_p->FamilyContext_p = NULL;
+ }
+ }
+
+ A_(printf("r15_family.c(%d) ErrorCode=%d\n", __LINE__, ReturnValue);)
+
+ return ReturnValue;
+}
+
+/*
+ * R15 Cancel Transmition.
+ *
+ * @param [in] Communication_p Communication module context.
+ * @param [in] PacketsBeforeTransferStop Number of packets that will be transmited before stopping the transmition.
+ *
+ * @retval E_SUCCESS After successful execution.
+ * @retval E_INVALID_INPUT_PARAMETERS Invalid input parameter.
+ */
+ErrorCode_e R15_CancelReceiver(Communication_t *Communication_p, uint8 PacketsBeforeReceiverStop)
+{
+ ErrorCode_e ReturnValue = E_SUCCESS;
+
+ VERIFY(NULL != Communication_p, E_INVALID_INPUT_PARAMETERS);
+
+ R15_NETWORK(Communication_p)->Inbound.PacketsBeforeReceiverStop = PacketsBeforeReceiverStop;
+ R15_NETWORK(Communication_p)->Inbound.StopTransfer = TRUE;
+
+ErrorExit:
+ A_(printf("protrom_family.c(%d) ErrorCode=%d\n", __LINE__, ReturnValue);)
+ return ReturnValue;
+}
+
+/** @} */