summaryrefslogtreecommitdiff
path: root/lcmodule/source/cnh1605205_ldr_network_layer
diff options
context:
space:
mode:
Diffstat (limited to 'lcmodule/source/cnh1605205_ldr_network_layer')
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_header.h4
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_network.h4
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/r_r15_header.h6
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/t_a2_network.h6
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/t_protrom_network.h2
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/include/t_r15_network_layer.h6
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/source/a2_network.c83
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/source/protrom_network.c91
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/source/r15_network_layer.c156
-rw-r--r--lcmodule/source/cnh1605205_ldr_network_layer/source/z_network.c35
10 files changed, 283 insertions, 110 deletions
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_header.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_header.h
index cefb39f..d750063 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_header.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_header.h
@@ -9,7 +9,9 @@
* @{
* @addtogroup a2_family
* @{
- * @addtogroup ldr_header
+ * @addtogroup ldr_header A2 Header
+ * Functionalities for serialization and de-serialization A2 header.
+ *
* @{
*/
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_network.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_network.h
index e97a3e7..fd6efb7 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_network.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_a2_network.h
@@ -9,7 +9,9 @@
* @{
* @addtogroup a2_family
* @{
- * @addtogroup ldr_network_layer
+ * @addtogroup ldr_network_layer A2 Network Layer
+ * A2 network layer support receiving and sending A2 packets.
+ *
* @{
*/
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_r15_header.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_r15_header.h
index fc05539..0011bc3 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/r_r15_header.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/r_r15_header.h
@@ -63,9 +63,9 @@ void R15_SerializeHeader(void *Data_p, const R15_Header_t *Header_p);
/**
* Deserialize the extended header stored in network format to a structure.
*
- * @param [out] Header_p Pointer to the extended header structure where the
- * header data should be placed.
- * @param [in] Data_p Pointer to the buffer with received header.
+ * @param [out] ExtendedHeader_p Pointer to the extended header structure where the
+ * header data should be placed.
+ * @param [in] Data_p Pointer to the buffer with received header.
*
* @return none.
*/
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_a2_network.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_a2_network.h
index cdc71d4..d91b2f0 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_a2_network.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_a2_network.h
@@ -98,7 +98,7 @@ typedef struct A2_PacketMeta {
corresponding buffer used in
the packet. */
A2_Header_t Header; /**< Structure of the header. */
- uint32 Resend; /**< Resend counter. */
+ uint32 Resend; /**< Re-send counter. */
Timer_t *Timer_p; /**< Timer data used for
sending/receiving packet. */
uint8 *Payload_p; /**< Pointer to the payload data
@@ -137,7 +137,7 @@ typedef struct {
A2_Header_t Header;
/** Pointer to meta data for allocated buffer for handling A2 packet.*/
A2_PacketMeta_t *Packet_p;
- /** Number of packets before receiver is stoped. */
+ /** Number of packets before receiver is stopped. */
uint8 PacketsBeforeReceiverStop;
/** Indicator for stopping the receiver. */
boolean StopTransfer;
@@ -148,7 +148,7 @@ typedef struct {
/** A2_Outbound_t*/
/** Structure for handling outgoing A2 packets.*/
typedef struct {
- /**< State of the state machine for handling outgoing A2 packets. */
+ /** State of the state machine for handling outgoing A2 packets. */
A2_OutboundState_t State;
/** Temporary pointer for handling PROTROM packet.*/
A2_PacketMeta_t *Packet_p;
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_protrom_network.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_protrom_network.h
index 955b589..b29a65a 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_protrom_network.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_protrom_network.h
@@ -34,7 +34,7 @@ typedef enum {
PROTROM_RECEIVE_HEADER, /**< State for receiving Header.*/
PROTROM_RECEIVE_PAYLOAD, /**< State for receiving Payload.*/
PROTROM_RECEIVE_ERROR, /**< State for error handling.*/
- PROTROM_RECEIVE_IDLE /**< State for receiver idele.*/
+ PROTROM_RECEIVE_IDLE /**< State for receiver idle.*/
} Protrom_InboundState_t;
/** Defined state of the transmitter */
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_r15_network_layer.h b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_r15_network_layer.h
index 5e78ddd..3d48957 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/include/t_r15_network_layer.h
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/include/t_r15_network_layer.h
@@ -286,13 +286,13 @@ typedef struct {
PacketMeta_t *MetaInfoList[COMMAND_BUFFER_COUNT+BULK_BUFFER_COUNT];
/**< List of meta data for used packets. */
RetransmissionContext_t *RetransmissionList[MAX_SIZE_RETRANSMISSION_LIST];
- /**< List of packet for retransmision */
+ /**< List of packet for retransmission */
uint32 RetransmissionListCount;
- /**< Counter for packets retransmision */
+ /**< Counter for packets retransmission */
R15_Inbound_t Inbound;
/**< Context for receiver. */
R15_Outbound_t Outbound;
- /**< Context for transmiter. */
+ /**< Context for transmitter. */
} R15_NetworkContext_t;
/*
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/source/a2_network.c b/lcmodule/source/cnh1605205_ldr_network_layer/source/a2_network.c
index 886ee46..cfbf592 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/source/a2_network.c
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/source/a2_network.c
@@ -70,7 +70,7 @@ ErrorCode_e A2_Network_Initialize(Communication_t *Communication_p)
memset(A2_NETWORK(Communication_p), 0, sizeof(A2_NetworkContext_t));
/* Simulate a finished read to get the inbound state-machine going. */
- A2_Network_ReadCallback(NULL, 0, Communication_p);
+ A2_Network_ReadCallback(NULL, 0, Communication_p->CommunicationDevice_p);
A2_NETWORK(Communication_p)->Outbound.TxCriticalSection = Do_CriticalSection_Create();
#ifdef CFG_ENABLE_LOADER_TYPE
@@ -123,7 +123,7 @@ ErrorExit:
/*
- * Handler for received packets in A2 protocl family.
+ * Handler for received packets in A2 protocol family.
*
* This callback function handles the received packets.
*
@@ -136,7 +136,7 @@ ErrorExit:
void A2_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
IDENTIFIER_NOT_USED(Data_p);
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
C_(printf("a2_network.c (%d) RecLength(%d) RecBackupData (%d)\n", __LINE__, Length, A2_NETWORK(Communication_p)->Inbound.RecBackupData);)
A2_NETWORK(Communication_p)->Inbound.RecData += Length + A2_NETWORK(Communication_p)->Inbound.RecBackupData;
@@ -186,46 +186,87 @@ void A2_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Para
ErrorCode_e A2_Network_ReceiverHandler(Communication_t *Communication_p)
{
uint32 ReqData;
+ uint32 ReqBufferOffset;
A2_Inbound_t *In_p = &(A2_NETWORK(Communication_p)->Inbound);
if (In_p->ReqData > 0) {
if (Communication_p->BackupCommBufferSize != 0) {
if (Communication_p->BackupCommBufferSize < In_p->ReqData) {
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);
- In_p->RecBackupData = Communication_p->BackupCommBufferSize;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + In_p->ReqBuffOffset + Communication_p->BackupCommBufferSize,
- In_p->ReqData - Communication_p->BackupCommBufferSize,
- A2_Network_ReadCallback, Communication_p);
- C_(printf("a2_network.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, In_p->ReqData, In_p->RecData);)
- C_(printf("a2_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
- In_p->RecData = 0;
+ ReqData = In_p->ReqData;
+ In_p->ReqData = 0;
+ ReqBufferOffset = In_p->ReqBuffOffset;
In_p->ReqBuffOffset = 0;
+ In_p->RecBackupData = Communication_p->BackupCommBufferSize;
Communication_p->BackupCommBufferSize = 0;
- In_p->ReqData = 0;
+ In_p->RecData = 0;
+
+ C_(printf("a2_network.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, ReqData, In_p->RecData);)
+ C_(printf("a2_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, A2_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ Communication_p->BackupCommBufferSize = In_p->RecBackupData;
+ In_p->RecBackupData = 0;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, A2_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+#endif
} else {
+ /* Copy content of backup buffer into receive buffer */
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, In_p->ReqData);
+ /* Move rest of backup data at the beginning of the backup buffer. */
+ memcpy(Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBuffer_p + In_p->ReqData, Communication_p->BackupCommBufferSize - In_p->ReqData);
+ /* Update the size of the backup buffer to handle only unprocessed data. */
Communication_p->BackupCommBufferSize = Communication_p->BackupCommBufferSize - In_p->ReqData;
+
ReqData = In_p->ReqData;
In_p->ReqData = 0;
- A2_Network_ReadCallback(In_p->Target_p + In_p->ReqBuffOffset, ReqData, Communication_p);
+ ReqBufferOffset = In_p->ReqBuffOffset;
+ In_p->ReqBuffOffset = 0;
In_p->RecData = 0;
+ A2_Network_ReadCallback(In_p->Target_p + ReqBufferOffset, ReqData, Communication_p->CommunicationDevice_p);
}
} else {
ReqData = In_p->ReqData;
In_p->ReqData = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + In_p->ReqBuffOffset, ReqData, A2_Network_ReadCallback, Communication_p);
- C_(printf("a2_network.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, In_p->ReqData, In_p->RecData);)
- C_(printf("a2_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
- In_p->RecData = 0;
+ ReqBufferOffset = In_p->ReqBuffOffset;
In_p->ReqBuffOffset = 0;
+ In_p->RecData = 0;
+
+ C_(printf("a2_network.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, ReqData, In_p->RecData);)
+ C_(printf("a2_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, A2_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, A2_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+#endif
}
}
- /* check for receiver sinhronization */
+ /* check for receiver synchronization */
if (In_p->State == A2_RECEIVE_ERROR) {
A2_RESET_INBOUND(In_p, A2_RECEIVE_HEADER);
A2_SYNC_HEADER(In_p, A2_HEADER_LENGTH, In_p->Scratch);
- //(void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, A2_HEADER_LENGTH, A2_Network_ReadCallback, Communication_p);
+ //(void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, A2_HEADER_LENGTH, A2_Network_ReadCallback, Communication_p->CommunicationDevice_p);
}
return A2_NETWORK(Communication_p)->Inbound.LCM_Error;
@@ -369,7 +410,7 @@ void A2_Network_WriteCallback(const void *Data_p, const uint32 Length, void *Par
{
IDENTIFIER_NOT_USED(Data_p);
IDENTIFIER_NOT_USED(Length);
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
A2_Outbound_t *Out_p = &(A2_NETWORK(Communication_p)->Outbound);
if (A2_SENDING_PAYLOAD == Out_p->State) {
@@ -512,7 +553,7 @@ ErrorCode_e A2_Network_TransmiterHandler(Communication_t *Communication_p)
}
if (E_SUCCESS == Communication_p->CommunicationDevice_p->Write((Out_p->Packet_p->Buffer_p),
- A2_HEADER_LENGTH, A2_Network_WriteCallback, Communication_p)) {
+ A2_HEADER_LENGTH, A2_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
C_(printf("a2_network.c (%d) Header Sent to comm device! \n", __LINE__);)
} else {
Out_p->State = A2_SEND_HEADER;
@@ -529,7 +570,7 @@ ErrorCode_e A2_Network_TransmiterHandler(Communication_t *Communication_p)
if (E_SUCCESS == Communication_p->CommunicationDevice_p->Write(
(Out_p->Packet_p->Buffer_p + A2_HEADER_LENGTH),
Out_p->Packet_p->Header.DataLength + A2_CRC_LENGTH,
- A2_Network_WriteCallback, Communication_p)) {
+ A2_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
C_(printf("a2_network.c (%d) Payload Sent to comm device! \n", __LINE__);)
} else {
Out_p->State = A2_SEND_PAYLOAD;
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/source/protrom_network.c b/lcmodule/source/cnh1605205_ldr_network_layer/source/protrom_network.c
index 0e52519..7b264e1 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/source/protrom_network.c
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/source/protrom_network.c
@@ -67,7 +67,7 @@ ErrorCode_e Protrom_Network_Initialize(Communication_t *Communication_p)
PROTROM_NETWORK(Communication_p)->Outbound.TxCriticalSection = Do_CriticalSection_Create();
/* Simulate a finished read to get the inbound state-machine going. */
- Protrom_Network_ReadCallback(NULL, 0, Communication_p);
+ Protrom_Network_ReadCallback(NULL, 0, Communication_p->CommunicationDevice_p);
(void)QUEUE(Communication_p, Fifo_SetCallback_Fn)(OBJECT_QUEUE(Communication_p), Communication_p->Outbound_p, QUEUE_NONEMPTY, Protrom_QueueCallback, Communication_p);
return E_SUCCESS;
@@ -109,13 +109,13 @@ ErrorCode_e Protrom_Network_Shutdown(const Communication_t *const Communication_
*
* @param [in] Data_p Pointer to the received data.
* @param [in] Length Length of the received data.
- * @param [in] Param_p Extra parameteres.
+ * @param [in] Param_p Extra parameters.
*
* @return none.
*/
void Protrom_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
A_(printf("protrom_family.c (%d) RecLength(%d) RecBackupData (%d)\n", __LINE__, Length, PROTROM_NETWORK(Communication_p)->Inbound.RecBackupData);)
PROTROM_NETWORK(Communication_p)->Inbound.RecData = Length + PROTROM_NETWORK(Communication_p)->Inbound.RecBackupData;
@@ -175,6 +175,7 @@ void Protrom_Network_ReadCallback(const void *Data_p, const uint32 Length, void
void Protrom_Network_ReceiverHandler(Communication_t *Communication_p)
{
uint32 ReqData;
+ uint32 ReqBufferOffset;
Protrom_Inbound_t *In_p = &(PROTROM_NETWORK(Communication_p)->Inbound);
/* new data for receiving ? */
@@ -182,42 +183,91 @@ void Protrom_Network_ReceiverHandler(Communication_t *Communication_p)
if (Communication_p->BackupCommBufferSize != 0) {
if (Communication_p->BackupCommBufferSize < In_p->ReqData) {
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);
- In_p->RecBackupData = Communication_p->BackupCommBufferSize;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + In_p->ReqBuffOffset + Communication_p->BackupCommBufferSize,
- In_p->ReqData - Communication_p->BackupCommBufferSize,
- Protrom_Network_ReadCallback, Communication_p);
- C_(printf("protrom_network.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, In_p->ReqData, In_p->RecData);)
- C_(printf("protrom_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
- In_p->RecData = 0;
+ ReqData = In_p->ReqData;
+ In_p->ReqData = 0;
+ ReqBufferOffset = In_p->ReqBuffOffset;
In_p->ReqBuffOffset = 0;
+ In_p->RecBackupData = Communication_p->BackupCommBufferSize;
Communication_p->BackupCommBufferSize = 0;
- In_p->ReqData = 0;
+ In_p->RecData = 0;
+
+ C_(printf("protrom_network.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, ReqData, In_p->RecData);)
+ C_(printf("protrom_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ Communication_p->BackupCommBufferSize = In_p->RecBackupData;
+ In_p->RecBackupData = 0;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+#endif
} else {
+ /* Copy content of backup buffer into receive buffer */
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, In_p->ReqData);
+ /* Move rest of backup data at the beginning of the backup buffer */
+ memcpy(Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBuffer_p + In_p->ReqData, Communication_p->BackupCommBufferSize - In_p->ReqData);
+ /* Update the size of the backup buffer */
Communication_p->BackupCommBufferSize = Communication_p->BackupCommBufferSize - In_p->ReqData;
+
ReqData = In_p->ReqData;
In_p->ReqData = 0;
- Protrom_Network_ReadCallback(In_p->Target_p + In_p->ReqBuffOffset, ReqData, Communication_p);
+ ReqBufferOffset = In_p->ReqBuffOffset;
+ In_p->ReqBuffOffset = 0;
In_p->RecData = 0;
+ Protrom_Network_ReadCallback(In_p->Target_p + ReqBufferOffset, ReqData, Communication_p->CommunicationDevice_p);
}
} else {
ReqData = In_p->ReqData;
In_p->ReqData = 0;
+ ReqBufferOffset = In_p->ReqBuffOffset;
+ In_p->ReqBuffOffset = 0;
In_p->RecData = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + In_p->ReqBuffOffset, ReqData, Protrom_Network_ReadCallback, Communication_p);
- C_(printf("protrom_network.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, In_p->ReqData, In_p->RecData);)
+ C_(printf("protrom_network.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, ReqData, In_p->RecData);)
C_(printf("protrom_network.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
- In_p->ReqBuffOffset = 0;
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+#endif
}
}
- /* check for receiver sinhronization */
+ /* check for receiver synchronization */
if (In_p->State == PROTROM_RECEIVE_ERROR) {
In_p->ReqData = 0;
In_p->RecData = 0;
In_p->ReqBuffOffset = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, PROTROM_HEADER_LENGTH, Protrom_Network_ReadCallback, Communication_p);
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS == Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ PROTROM_HEADER_LENGTH, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ In_p->State = PROTROM_RECEIVE_HEADER;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ PROTROM_HEADER_LENGTH, Protrom_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
In_p->State = PROTROM_RECEIVE_HEADER;
+#endif
}
}
@@ -236,7 +286,7 @@ void Protrom_Network_ReceiverHandler(Communication_t *Communication_p)
*/
void Protrom_Network_WriteCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
Protrom_Outbound_t *Out_p = &(PROTROM_NETWORK(Communication_p)->Outbound);
if (Out_p->State == PROTROM_SENDING_PAYLOAD) {
if (NULL != Out_p->Packet_p) {
@@ -341,12 +391,11 @@ static ErrorCode_e Protrom_Network_TransmiterHandler(Communication_t *Communicat
}
/* FALLTHROUGH */
-
case PROTROM_SEND_HEADER:
Out_p->State = PROTROM_SENDING_HEADER;
if (E_SUCCESS != Communication_p->CommunicationDevice_p->Write(Out_p->Packet_p->Buffer_p,
- PROTROM_HEADER_LENGTH, Protrom_Network_WriteCallback, Communication_p)) {
+ PROTROM_HEADER_LENGTH, Protrom_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
Out_p->State = PROTROM_SEND_HEADER;
break;
}
@@ -357,7 +406,7 @@ static ErrorCode_e Protrom_Network_TransmiterHandler(Communication_t *Communicat
Out_p->State = PROTROM_SENDING_PAYLOAD;
if (E_SUCCESS != Communication_p->CommunicationDevice_p->Write(Out_p->Packet_p->Buffer_p + PROTROM_HEADER_LENGTH,
Out_p->Packet_p->Header.PayloadLength + PROTROM_CRC_LENGTH,
- Protrom_Network_WriteCallback, Communication_p)) {
+ Protrom_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
Out_p->State = PROTROM_SEND_PAYLOAD;
break;
}
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/source/r15_network_layer.c b/lcmodule/source/cnh1605205_ldr_network_layer/source/r15_network_layer.c
index 85be0a2..1ae4d2e 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/source/r15_network_layer.c
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/source/r15_network_layer.c
@@ -23,7 +23,6 @@
#include "c_system.h"
#include "r_r15_transport_layer.h"
#include "r_r15_family.h"
-#include "r_communication_service.h"
#include "r_r15_header.h"
#include "r_bulk_protocol.h"
#include "r_command_protocol.h"
@@ -41,7 +40,7 @@
extern Measurement_t *Measurement_p;
#endif
-static PacketMeta_t PacketMetaInfo[COMMAND_BUFFER_COUNT + BULK_BUFFER_COUNT] ; /* Packet Meta Info vector*/
+static PacketMeta_t PacketMetaInfo[COMMAND_BUFFER_COUNT + BULK_BUFFER_COUNT] = {{0}}; /* Packet Meta Info vector*/
/*******************************************************************************
* Declaration of file local functions
@@ -86,7 +85,7 @@ ErrorCode_e R15_Network_Initialize(Communication_t *Communication_p)
R15_NETWORK(Communication_p)->Outbound.TxCriticalSection = Do_CriticalSection_Create();
/* Simulate a finished read to get the inbound state-machine going. */
- R15_Network_ReadCallback(NULL, 0, Communication_p);
+ R15_Network_ReadCallback(NULL, 0, Communication_p->CommunicationDevice_p);
#ifdef CFG_ENABLE_LOADER_TYPE
(void)QUEUE(Communication_p, Fifo_SetCallback_Fn)(OBJECT_QUEUE(Communication_p), Communication_p->Outbound_p, QUEUE_NONEMPTY, R15_QueueOutCallback, Communication_p);
(void)QUEUE(Communication_p, Fifo_SetCallback_Fn)(OBJECT_QUEUE(Communication_p), Communication_p->Inbound_p, QUEUE_NONEMPTY, R15_QueueInCallback, Communication_p);
@@ -98,7 +97,7 @@ ErrorCode_e R15_Network_Initialize(Communication_t *Communication_p)
}
/*
- * Shut down the r15 network layer.
+ * Shutdown the R15 Network layer.
*
* @param [in,out] Communication_p Communication module context.
*
@@ -152,7 +151,7 @@ ErrorExit:
*/
void R15_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
C_(printf("r15_network_layer.c (%d) RecLength(%d) RecBackupData (%d)\n", __LINE__, Length, R15_NETWORK(Communication_p)->Inbound.RecBackupData);)
R15_NETWORK(Communication_p)->Inbound.RecData = Length + R15_NETWORK(Communication_p)->Inbound.RecBackupData;
@@ -208,7 +207,7 @@ void R15_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Par
ErrorCode_e R15_Network_ReceiverHandler(Communication_t *Communication_p)
{
uint32 ReqData;
- uint32 ReqBuffOffset = 0;
+ uint32 ReqBufferOffset;
R15_Inbound_t *In_p = &(R15_NETWORK(Communication_p)->Inbound);
/* new data for receiving ? */
@@ -216,43 +215,93 @@ ErrorCode_e R15_Network_ReceiverHandler(Communication_t *Communication_p)
if (Communication_p->BackupCommBufferSize != 0) {
if (Communication_p->BackupCommBufferSize < In_p->ReqData) {
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBufferSize);
- In_p->RecBackupData = Communication_p->BackupCommBufferSize;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + In_p->ReqBuffOffset + Communication_p->BackupCommBufferSize,
- In_p->ReqData - Communication_p->BackupCommBufferSize,
- R15_Network_ReadCallback, Communication_p);
- C_(printf("r15_network_layer.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, In_p->ReqData, In_p->RecData);)
- C_(printf("r15_network_layer.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
- In_p->RecData = 0;
+ ReqData = In_p->ReqData;
+ In_p->ReqData = 0;
+ ReqBufferOffset = In_p->ReqBuffOffset;
In_p->ReqBuffOffset = 0;
+ In_p->RecBackupData = Communication_p->BackupCommBufferSize;
Communication_p->BackupCommBufferSize = 0;
- In_p->ReqData = 0;
+ In_p->RecData = 0;
+
+ C_(printf("r15_network_layer.c (%d) ReqData(%d) RecData(%d)\n", __LINE__, ReqData, In_p->RecData);)
+ C_(printf("r15_network_layer.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ Communication_p->BackupCommBufferSize = In_p->RecBackupData;
+ In_p->RecBackupData = 0;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset + In_p->RecBackupData,
+ ReqData - In_p->RecBackupData, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+
+#endif
} else {
+ /* Copy content of backup buffer into receive buffer */
memcpy(In_p->Target_p + In_p->ReqBuffOffset, Communication_p->BackupCommBuffer_p, In_p->ReqData);
+ /* Move rest of backup data at the beginning of the backup buffer */
+ memcpy(Communication_p->BackupCommBuffer_p, Communication_p->BackupCommBuffer_p + In_p->ReqData, Communication_p->BackupCommBufferSize - In_p->ReqData);
+ /* Update the size of the backup buffer */
Communication_p->BackupCommBufferSize = Communication_p->BackupCommBufferSize - In_p->ReqData;
+
ReqData = In_p->ReqData;
In_p->ReqData = 0;
- R15_Network_ReadCallback(In_p->Target_p + In_p->ReqBuffOffset, ReqData, Communication_p);
+ ReqBufferOffset = In_p->ReqBuffOffset;
+ In_p->ReqBuffOffset = 0;
In_p->RecData = 0;
+ R15_Network_ReadCallback(In_p->Target_p + ReqBufferOffset, ReqData, Communication_p->CommunicationDevice_p);
}
} else {
ReqData = In_p->ReqData;
- ReqBuffOffset = (uint32)(In_p->ReqBuffOffset);
- In_p->ReqBuffOffset = 0;
In_p->ReqData = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p + ReqBuffOffset, ReqData, R15_Network_ReadCallback, Communication_p);
- C_(printf("r15_network_layer.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, In_p->ReqData, In_p->RecData);)
- C_(printf("r15_network_layer.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+ ReqBufferOffset = In_p->ReqBuffOffset;
+ In_p->ReqBuffOffset = 0;
In_p->RecData = 0;
+
+ C_(printf("r15_network_layer.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, ReqData, In_p->RecData);)
+ C_(printf("r15_network_layer.c (%d) Communication_p->BackupCommBufferSize(%d) RecBackupData (%d)\n", __LINE__, Communication_p->BackupCommBufferSize, In_p->RecBackupData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ In_p->ReqBuffOffset = ReqBufferOffset;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(
+ In_p->Target_p + ReqBufferOffset, ReqData, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+#endif
}
}
- /* check for receiver sinhronization */
+ /* check for receiver synchronization */
if (In_p->State == RECEIVE_ERROR) {
In_p->ReqData = 0;
In_p->RecData = 0;
In_p->ReqBuffOffset = 0;
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS == Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ ALIGNED_HEADER_LENGTH, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)){
+ In_p->State = RECEIVE_HEADER;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ ALIGNED_HEADER_LENGTH, R15_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
In_p->State = RECEIVE_HEADER;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, ALIGNED_HEADER_LENGTH, R15_Network_ReadCallback, Communication_p);
+#endif
}
return R15_NETWORK(Communication_p)->Inbound.LCM_Error;
@@ -323,7 +372,7 @@ ErrorCode_e R15_Network_TransmiterHandler(Communication_t *Communication_p)
if (E_SUCCESS == Communication_p->CommunicationDevice_p->Write((Out_p->Packet_p->Buffer_p + HEADER_OFFSET_IN_BUFFER),
ContinuousBufferLength,
- R15_Network_WriteCallback, Communication_p)) {
+ R15_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
C_(printf("r15_network_layer.c (%d) Header Sent to comm device! \n", __LINE__);)
} else {
Out_p->State = SEND_HEADER;
@@ -342,7 +391,7 @@ ErrorCode_e R15_Network_TransmiterHandler(Communication_t *Communication_p)
if (E_SUCCESS == Communication_p->CommunicationDevice_p->Write(Out_p->Packet_p->Payload_p,
Aligned_Length,
- R15_Network_WriteCallback, Communication_p)) {
+ R15_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
RegisterRetransmission = TRUE;
C_(printf("r15_network_layer.c (%d) Payload Sent to comm device! \n", __LINE__);)
} else {
@@ -421,7 +470,7 @@ ErrorCode_e R15_Network_CancelRetransmission(const Communication_t *const Commun
* combination of protocol type, session number and command.
*
* @param [in] Packet_p Pointer to the packet.
- * @param [in] ExternalKey External key for marking the packet for retransmision.
+ * @param [in] ExternalKey External key for marking the packet for retransmission.
*
* @return Unique key.
*/
@@ -473,7 +522,6 @@ PacketMeta_t *R15_Network_PacketAllocate(const Communication_t *const Communicat
/* packet meta info setup */
C_(
-
if (BULK_BUFFER_SIZE > BufferSize)
printf("CmdBuffGet:%x\n", Buffer_p);
else {
@@ -562,7 +610,7 @@ ErrorExit:
*/
void R15_Network_WriteCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
R15_Outbound_t *Out_p = &(R15_NETWORK(Communication_p)->Outbound);
BulkExtendedHeader_t ExtendedHeader = {0};
B_(printf("r15_network_layer.c (%d): Device write finished!! \n", __LINE__);)
@@ -605,12 +653,14 @@ static ErrorCode_e R15_Network_ReceiveHeader(const Communication_t *const Commun
if (In_p->RecData == 0) {
In_p->ReqData = ALIGNED_HEADER_LENGTH;
In_p->Target_p = In_p->Scratch;
+ In_p->ReqBuffOffset = 0;
} else {
if (R15_IsReceivedHeader(In_p)) {
if (R15_IsValidHeader(In_p->Scratch)) {
R15_DeserializeHeader(&In_p->Header, In_p->Scratch);
In_p->Target_p += ALIGNED_HEADER_LENGTH;
+
if (In_p->Header.ExtendedHeaderLength == COMMAND_EXTENDED_HEADER_LENGTH) {
SET_INBOUND(In_p, RECEIVE_EXTENDED_HEADER, ALIGNED_COMMAND_EXTENDED_HEADER_LENGTH);
} else {
@@ -625,14 +675,16 @@ static ErrorCode_e R15_Network_ReceiveHeader(const Communication_t *const Commun
}
else
{
- uint32 Counter = 0;
-
- A_(printf("Invalid header! ");)
- for (Counter = 0; Counter < 16; Counter++)
- {
- A_(printf(" %02X", In_p->Scratch[Counter]);)
- }
- A_(printf("\n\n");)
+ A_(
+ uint32 Counter = 0;
+
+ printf("Invalid header! ");
+ for (Counter = 0; Counter < 16; Counter++)
+ {
+ printf(" %02X", In_p->Scratch[Counter]);
+ }
+ printf("\n\n");
+ )
}
}
@@ -669,11 +721,13 @@ static ErrorCode_e R15_Network_ReceiveExtendedHeader(Communication_t *Communicat
In_p->Packet_p->Header = R15Header;
In_p->Packet_p->ExtendedHeader_p = In_p->Packet_p->Buffer_p + HEADER_OFFSET_IN_BUFFER + ALIGNED_HEADER_LENGTH;
SET_PACKET_FLAGS(In_p->Packet_p, PACKET_RX_STATE_MASK, BUF_HDR_CRC_OK);
+
if (In_p->Packet_p->Header.ExtendedHeaderLength == COMMAND_EXTENDED_HEADER_LENGTH) {
In_p->Packet_p->Payload_p = In_p->Packet_p->ExtendedHeader_p + ALIGNED_COMMAND_EXTENDED_HEADER_LENGTH;
} else {
In_p->Packet_p->Payload_p = In_p->Packet_p->ExtendedHeader_p + ALIGNED_BULK_EXTENDED_HEADER_LENGTH;
}
+
memcpy(In_p->Packet_p->Buffer_p + HEADER_OFFSET_IN_BUFFER, &In_p->Packet_p->Header, HEADER_LENGTH);
memcpy(In_p->Packet_p->ExtendedHeader_p, In_p->Target_p, In_p->Header.ExtendedHeaderLength);
@@ -731,14 +785,16 @@ static ErrorCode_e R15_Network_ReceivePayload(Communication_t *Communication_p)
if (HASH_NONE != Packet_p->Header.Flags) {
#ifdef CFG_ENABLE_MEASUREMENT_TOOL
- if(In_p->Packet_p->Header.Protocol == BULK_PROTOCOL){
- BulkExtendedHeader_t ExtendedHeader = {0};
- R15_DeserializeBulkExtendedHeader(&ExtendedHeader, Packet_p->ExtendedHeader_p);
- if ((ExtendedHeader.TypeFlags & MASK_BULK_COMMAND_SELECT) == CMD_BULK_DATA){
- (void)MP(Measurement_p, ExtendedHeader.AcksChunk, START_HASHINGCHUNK_TIME);
- }
- }
+ if (In_p->Packet_p->Header.Protocol == BULK_PROTOCOL) {
+ BulkExtendedHeader_t ExtendedHeader = {0};
+ R15_DeserializeBulkExtendedHeader(&ExtendedHeader, Packet_p->ExtendedHeader_p);
+
+ if ((ExtendedHeader.TypeFlags & MASK_BULK_COMMAND_SELECT) == CMD_BULK_DATA) {
+ (void)MP(Measurement_p, ExtendedHeader.AcksChunk, START_HASHINGCHUNK_TIME);
+ }
+ }
+
#endif
Communication_p->HashDevice_p->Calculate(OBJECT_HASH(Communication_p),
Communication_p->CurrentFamilyHash,
@@ -807,7 +863,7 @@ static ErrorCode_e R15_Network_RegisterRetransmission(Communication_t *Communica
}
} while (Index < MAX_SIZE_RETRANSMISSION_LIST);
} else {
- A_(printf("r15_network_layer.c (%d) ** Err: Retransmision List is full! ** \n", __LINE__);)
+ A_(printf("r15_network_layer.c (%d) ** Err: Retransmission List is full! ** \n", __LINE__);)
}
return ReturnValue;
@@ -845,14 +901,16 @@ static void R15_InHashCallback(const void *const Data_p, uint32 Length, const ui
PacketMeta_t *Packet_p = (PacketMeta_t *)Param_p;
#ifdef CFG_ENABLE_MEASUREMENT_TOOL
- if(Packet_p->Header.Protocol == BULK_PROTOCOL){
- BulkExtendedHeader_t ExtendedHeader = {0};
- R15_DeserializeBulkExtendedHeader(&ExtendedHeader, Packet_p->ExtendedHeader_p);
- if ((ExtendedHeader.TypeFlags & MASK_BULK_COMMAND_SELECT) == CMD_BULK_DATA){
- (void)MP(Measurement_p, ExtendedHeader.AcksChunk, END_HASHINGCHUNK_TIME);
- }
+ if (Packet_p->Header.Protocol == BULK_PROTOCOL) {
+ BulkExtendedHeader_t ExtendedHeader = {0};
+ R15_DeserializeBulkExtendedHeader(&ExtendedHeader, Packet_p->ExtendedHeader_p);
+
+ if ((ExtendedHeader.TypeFlags & MASK_BULK_COMMAND_SELECT) == CMD_BULK_DATA) {
+ (void)MP(Measurement_p, ExtendedHeader.AcksChunk, END_HASHINGCHUNK_TIME);
+ }
}
+
#endif
if (memcmp(Hash_p, &Packet_p->Header.PayloadChecksum, 4) == 0) {
diff --git a/lcmodule/source/cnh1605205_ldr_network_layer/source/z_network.c b/lcmodule/source/cnh1605205_ldr_network_layer/source/z_network.c
index 8d7ef09..99551f5 100644
--- a/lcmodule/source/cnh1605205_ldr_network_layer/source/z_network.c
+++ b/lcmodule/source/cnh1605205_ldr_network_layer/source/z_network.c
@@ -56,7 +56,7 @@ ErrorCode_e Z_Network_Initialize(Communication_t *Communication_p)
Z_NETWORK(Communication_p)->Outbound.TxCriticalSection = Do_CriticalSection_Create();
/* Simulate a finished read to get the inbound state-machine going. */
- Z_Network_ReadCallback(NULL, 0, Communication_p);
+ Z_Network_ReadCallback(NULL, 0, Communication_p->CommunicationDevice_p);
return E_SUCCESS;
}
@@ -70,7 +70,7 @@ ErrorCode_e Z_Network_Shutdown(const Communication_t *const Communication_p)
void Z_Network_ReadCallback(const void *Data_p, const uint32 Length, void *Param_p)
{
- Communication_t *Communication_p = (Communication_t *)Param_p;
+ Communication_t *Communication_p = (Communication_t*)(((CommunicationDevice_t*)Param_p)->Object_p);
CommandData_t CmdData;
Z_NETWORK(Communication_p)->Inbound.RecData += Length;
@@ -100,15 +100,36 @@ void Z_Network_ReceiverHandler(Communication_t *Communication_p)
ReqData = In_p->ReqData;
In_p->ReqData = 0;
In_p->RecData = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, ReqData, Z_Network_ReadCallback, Communication_p);
C_(printf("z_network.c (%d) ReqData(%d) RecData(%d) \n", __LINE__, ReqData, In_p->RecData);)
+
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (E_SUCCESS != Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ ReqData, Z_Network_ReadCallback, Communication_p->CommunicationDevice_p)) {
+ /* Read failed! Return to previous state. */
+ In_p->ReqData = ReqData;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ ReqData, Z_Network_ReadCallback, Communication_p->CommunicationDevice_p);
+#endif
}
- /* check for receiver sinhronization */
+ /* check for receiver synchronization */
if (In_p->State == Z_RECEIVE_ERROR) {
In_p->ReqData = 0;
In_p->RecData = 0;
- (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p, Z_HEADER_LENGTH, Z_Network_ReadCallback, Communication_p);
+#ifdef CFG_ENABLE_LOADER_TYPE
+ if (TRUE == Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ Z_HEADER_LENGTH, Z_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p)) {
+ In_p->State = Z_RECEIVE_HEADER;
+ }
+#else
+ (void)Communication_p->CommunicationDevice_p->Read(In_p->Target_p,
+ Z_HEADER_LENGTH, Z_Network_ReadCallback,
+ Communication_p->CommunicationDevice_p);
+ In_p->State = Z_RECEIVE_HEADER;
+#endif
}
}
@@ -130,7 +151,7 @@ ErrorCode_e Z_Network_TransmiterHandler(Communication_t *Communication_p, Z_Send
switch (Out_p->State) {
case Z_SEND_IDLE:
- /* get next packet for transmiting */
+ /* get next packet for transmitting */
Out_p->State = Z_SEND_PACKET;
/* FALLTHROUGH */
@@ -138,7 +159,7 @@ ErrorCode_e Z_Network_TransmiterHandler(Communication_t *Communication_p, Z_Send
if (E_SUCCESS == Communication_p->CommunicationDevice_p->Write(Data_p,
Size,
- Z_Network_WriteCallback, Communication_p)) {
+ Z_Network_WriteCallback, Communication_p->CommunicationDevice_p)) {
Out_p->State = Z_SENDING_PACKET;
} else {
/* error state ?*/