Added MS/TP statistics counters for BadCRC and Poll-For-Master. (#1081)
This commit is contained in:
+9
-1
@@ -513,6 +513,9 @@ static void *dlmstp_thread(void *pArg)
|
|||||||
}
|
}
|
||||||
if (MSTP_Port.ReceivedValidFrame) {
|
if (MSTP_Port.ReceivedValidFrame) {
|
||||||
DLMSTP_Statistics.receive_valid_frame_counter++;
|
DLMSTP_Statistics.receive_valid_frame_counter++;
|
||||||
|
if (MSTP_Port.FrameType == FRAME_TYPE_POLL_FOR_MASTER) {
|
||||||
|
DLMSTP_Statistics.poll_for_master_counter++;
|
||||||
|
}
|
||||||
if (Valid_Frame_Rx_Callback) {
|
if (Valid_Frame_Rx_Callback) {
|
||||||
Valid_Frame_Rx_Callback(
|
Valid_Frame_Rx_Callback(
|
||||||
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
||||||
@@ -530,8 +533,13 @@ static void *dlmstp_thread(void *pArg)
|
|||||||
}
|
}
|
||||||
run_master = true;
|
run_master = true;
|
||||||
} else if (MSTP_Port.ReceivedInvalidFrame) {
|
} else if (MSTP_Port.ReceivedInvalidFrame) {
|
||||||
|
DLMSTP_Statistics.receive_invalid_frame_counter++;
|
||||||
|
if (MSTP_Port.HeaderCRC != 0x55) {
|
||||||
|
DLMSTP_Statistics.bad_crc_counter++;
|
||||||
|
} else if (MSTP_Port.DataCRC != 0xF0B8) {
|
||||||
|
DLMSTP_Statistics.bad_crc_counter++;
|
||||||
|
}
|
||||||
if (Invalid_Frame_Rx_Callback) {
|
if (Invalid_Frame_Rx_Callback) {
|
||||||
DLMSTP_Statistics.receive_invalid_frame_counter++;
|
|
||||||
Invalid_Frame_Rx_Callback(
|
Invalid_Frame_Rx_Callback(
|
||||||
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
||||||
MSTP_Port.FrameType, MSTP_Port.InputBuffer,
|
MSTP_Port.FrameType, MSTP_Port.InputBuffer,
|
||||||
|
|||||||
@@ -535,6 +535,9 @@ static void *dlmstp_thread(void *pArg)
|
|||||||
}
|
}
|
||||||
if (MSTP_Port.ReceivedValidFrame) {
|
if (MSTP_Port.ReceivedValidFrame) {
|
||||||
DLMSTP_Statistics.receive_valid_frame_counter++;
|
DLMSTP_Statistics.receive_valid_frame_counter++;
|
||||||
|
if (MSTP_Port.FrameType == FRAME_TYPE_POLL_FOR_MASTER) {
|
||||||
|
DLMSTP_Statistics.poll_for_master_counter++;
|
||||||
|
}
|
||||||
if (Valid_Frame_Rx_Callback) {
|
if (Valid_Frame_Rx_Callback) {
|
||||||
Valid_Frame_Rx_Callback(
|
Valid_Frame_Rx_Callback(
|
||||||
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
||||||
|
|||||||
@@ -444,6 +444,9 @@ static void dlmstp_thread(void *pArg)
|
|||||||
}
|
}
|
||||||
if (MSTP_Port.ReceivedValidFrame) {
|
if (MSTP_Port.ReceivedValidFrame) {
|
||||||
DLMSTP_Statistics.receive_valid_frame_counter++;
|
DLMSTP_Statistics.receive_valid_frame_counter++;
|
||||||
|
if (MSTP_Port.FrameType == FRAME_TYPE_POLL_FOR_MASTER) {
|
||||||
|
DLMSTP_Statistics.poll_for_master_counter++;
|
||||||
|
}
|
||||||
if (Valid_Frame_Rx_Callback) {
|
if (Valid_Frame_Rx_Callback) {
|
||||||
Valid_Frame_Rx_Callback(
|
Valid_Frame_Rx_Callback(
|
||||||
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
||||||
@@ -461,8 +464,13 @@ static void dlmstp_thread(void *pArg)
|
|||||||
}
|
}
|
||||||
run_master = true;
|
run_master = true;
|
||||||
} else if (MSTP_Port.ReceivedInvalidFrame) {
|
} else if (MSTP_Port.ReceivedInvalidFrame) {
|
||||||
|
DLMSTP_Statistics.receive_invalid_frame_counter++;
|
||||||
|
if (MSTP_Port.HeaderCRC != 0x55) {
|
||||||
|
DLMSTP_Statistics.bad_crc_counter++;
|
||||||
|
} else if (MSTP_Port.DataCRC != 0xF0B8) {
|
||||||
|
DLMSTP_Statistics.bad_crc_counter++;
|
||||||
|
}
|
||||||
if (Invalid_Frame_Rx_Callback) {
|
if (Invalid_Frame_Rx_Callback) {
|
||||||
DLMSTP_Statistics.receive_invalid_frame_counter++;
|
|
||||||
Invalid_Frame_Rx_Callback(
|
Invalid_Frame_Rx_Callback(
|
||||||
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
MSTP_Port.SourceAddress, MSTP_Port.DestinationAddress,
|
||||||
MSTP_Port.FrameType, MSTP_Port.InputBuffer,
|
MSTP_Port.FrameType, MSTP_Port.InputBuffer,
|
||||||
|
|||||||
@@ -833,14 +833,17 @@ void dlenv_maintenance_timer(uint16_t elapsed_seconds)
|
|||||||
dlmstp_fill_statistics(&statistics);
|
dlmstp_fill_statistics(&statistics);
|
||||||
fprintf(
|
fprintf(
|
||||||
stderr,
|
stderr,
|
||||||
"MSTP: Frames Rx:%u/%u/%u Tx:%u PDU Rx:%u Tx:%u Lost:%u\n",
|
"MSTP: Frames Rx:%u/%u/%u Tx:%u PDU Rx:%u Tx:%u "
|
||||||
|
"Lost:%u BadCRC:%u PFM:%u\n",
|
||||||
statistics.receive_valid_frame_counter,
|
statistics.receive_valid_frame_counter,
|
||||||
statistics.receive_valid_frame_not_for_us_counter,
|
statistics.receive_valid_frame_not_for_us_counter,
|
||||||
statistics.receive_invalid_frame_counter,
|
statistics.receive_invalid_frame_counter,
|
||||||
statistics.transmit_frame_counter,
|
statistics.transmit_frame_counter,
|
||||||
statistics.receive_pdu_counter,
|
statistics.receive_pdu_counter,
|
||||||
statistics.transmit_pdu_counter,
|
statistics.transmit_pdu_counter,
|
||||||
statistics.lost_token_counter);
|
statistics.lost_token_counter, statistics.bad_crc_counter,
|
||||||
|
statistics.poll_for_master_counter);
|
||||||
|
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -400,6 +400,9 @@ uint16_t dlmstp_receive(
|
|||||||
}
|
}
|
||||||
if (MSTP_Port->ReceivedValidFrame) {
|
if (MSTP_Port->ReceivedValidFrame) {
|
||||||
user->Statistics.receive_valid_frame_counter++;
|
user->Statistics.receive_valid_frame_counter++;
|
||||||
|
if (MSTP_Port->FrameType == FRAME_TYPE_POLL_FOR_MASTER) {
|
||||||
|
user->Statistics.poll_for_master_counter++;
|
||||||
|
}
|
||||||
if (user->Valid_Frame_Rx_Callback) {
|
if (user->Valid_Frame_Rx_Callback) {
|
||||||
user->Valid_Frame_Rx_Callback(
|
user->Valid_Frame_Rx_Callback(
|
||||||
MSTP_Port->SourceAddress, MSTP_Port->DestinationAddress,
|
MSTP_Port->SourceAddress, MSTP_Port->DestinationAddress,
|
||||||
@@ -418,6 +421,11 @@ uint16_t dlmstp_receive(
|
|||||||
}
|
}
|
||||||
if (MSTP_Port->ReceivedInvalidFrame) {
|
if (MSTP_Port->ReceivedInvalidFrame) {
|
||||||
user->Statistics.receive_invalid_frame_counter++;
|
user->Statistics.receive_invalid_frame_counter++;
|
||||||
|
if (MSTP_Port->HeaderCRC != 0x55) {
|
||||||
|
user->Statistics.bad_crc_counter++;
|
||||||
|
} else if (MSTP_Port->DataCRC != 0xF0B8) {
|
||||||
|
user->Statistics.bad_crc_counter++;
|
||||||
|
}
|
||||||
if (user->Invalid_Frame_Rx_Callback) {
|
if (user->Invalid_Frame_Rx_Callback) {
|
||||||
user->Invalid_Frame_Rx_Callback(
|
user->Invalid_Frame_Rx_Callback(
|
||||||
MSTP_Port->SourceAddress, MSTP_Port->DestinationAddress,
|
MSTP_Port->SourceAddress, MSTP_Port->DestinationAddress,
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ typedef struct dlmstp_statistics {
|
|||||||
uint32_t transmit_pdu_counter;
|
uint32_t transmit_pdu_counter;
|
||||||
uint32_t receive_pdu_counter;
|
uint32_t receive_pdu_counter;
|
||||||
uint32_t lost_token_counter;
|
uint32_t lost_token_counter;
|
||||||
|
uint32_t bad_crc_counter;
|
||||||
|
uint32_t poll_for_master_counter;
|
||||||
} DLMSTP_STATISTICS;
|
} DLMSTP_STATISTICS;
|
||||||
|
|
||||||
#ifndef DLMSTP_MAX_INFO_FRAMES
|
#ifndef DLMSTP_MAX_INFO_FRAMES
|
||||||
|
|||||||
@@ -128,6 +128,11 @@ static void test_MSTP_Datalink(void)
|
|||||||
zassert_equal(
|
zassert_equal(
|
||||||
test_stats.receive_pdu_counter,
|
test_stats.receive_pdu_counter,
|
||||||
MSTP_User.Statistics.receive_pdu_counter, NULL);
|
MSTP_User.Statistics.receive_pdu_counter, NULL);
|
||||||
|
zassert_equal(
|
||||||
|
test_stats.bad_crc_counter, MSTP_User.Statistics.bad_crc_counter, NULL);
|
||||||
|
zassert_equal(
|
||||||
|
test_stats.poll_for_master_counter,
|
||||||
|
MSTP_User.Statistics.poll_for_master_counter, NULL);
|
||||||
dlmstp_reset_statistics();
|
dlmstp_reset_statistics();
|
||||||
dlmstp_set_frame_rx_complete_callback(NULL);
|
dlmstp_set_frame_rx_complete_callback(NULL);
|
||||||
dlmstp_set_invalid_frame_rx_complete_callback(NULL);
|
dlmstp_set_invalid_frame_rx_complete_callback(NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user