From 6cfc2b805f26e0af010a11a075fa0688108c0f27 Mon Sep 17 00:00:00 2001 From: skarg Date: Fri, 11 Sep 2009 23:13:45 +0000 Subject: [PATCH] Added MS/TP debugging to serial port test. --- bacnet-stack/ports/bdk-atxx4-mstp/device.c | 4 +- bacnet-stack/ports/bdk-atxx4-mstp/dlmstp.c | 46 ++++++++++++++++++++++ bacnet-stack/ports/bdk-atxx4-mstp/main.c | 30 ++++++++++++-- 3 files changed, 75 insertions(+), 5 deletions(-) diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/device.c b/bacnet-stack/ports/bdk-atxx4-mstp/device.c index 5d0acf0d..e77d5b38 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/device.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/device.c @@ -49,7 +49,7 @@ The properties that are constant can be hard coded into the read-property encoding. */ static uint32_t Object_Instance_Number; -static uint8_t Object_Name[NV_EEPROM_DEVICE_NAME_SIZE]; +static char Object_Name[NV_EEPROM_DEVICE_NAME_SIZE]; static uint8_t Object_Name_Encoding; static uint8_t Object_Name_Length; static BACNET_DEVICE_STATUS System_Status = STATUS_OPERATIONAL; @@ -506,7 +506,7 @@ int Device_Encode_Property_APDU( break; case 9600: apdu_len = encode_application_unsigned(&apdu[0], - rs485_baud_rate()); + rs485_baud_rate()); break; default: *error_class = ERROR_CLASS_PROPERTY; diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/dlmstp.c b/bacnet-stack/ports/bdk-atxx4-mstp/dlmstp.c index 7608d94a..597ac54e 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/dlmstp.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/dlmstp.c @@ -1341,3 +1341,49 @@ void dlmstp_get_broadcast_address( return; } + +char *dlmstp_receive_state_text(void) +{ + switch (Receive_State) { + case MSTP_RECEIVE_STATE_IDLE: + return "idle"; + case MSTP_RECEIVE_STATE_PREAMBLE: + return "preamble"; + case MSTP_RECEIVE_STATE_HEADER: + return "header"; + case MSTP_RECEIVE_STATE_DATA: + return "data"; + default: + break; + } + + return "unknown"; +} + +char *dlmstp_master_state_text(void) +{ + switch (Master_State) { + case MSTP_MASTER_STATE_INITIALIZE: + return "init"; + case MSTP_MASTER_STATE_IDLE: + return "idle"; + case MSTP_MASTER_STATE_USE_TOKEN: + return "use-token"; + case MSTP_MASTER_STATE_WAIT_FOR_REPLY: + return "wait-for-reply"; + case MSTP_MASTER_STATE_DONE_WITH_TOKEN: + return "done-with-token"; + case MSTP_MASTER_STATE_PASS_TOKEN: + return "pass-token"; + case MSTP_MASTER_STATE_NO_TOKEN: + return "no-token"; + case MSTP_MASTER_STATE_POLL_FOR_MASTER: + return "poll-for-master"; + case MSTP_MASTER_STATE_ANSWER_DATA_REQUEST: + return "answer-data-request"; + default: + break; + } + + return "unknown"; +} diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/main.c b/bacnet-stack/ports/bdk-atxx4-mstp/main.c index 793cd740..54e459fa 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/main.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/main.c @@ -25,6 +25,7 @@ #include #include +#include #include "hardware.h" #include "init.h" #include "stack.h" @@ -173,10 +174,12 @@ void test_init( void test_task( void) { - uint8_t buffer[32] = "BACnet: 0000000\r\n"; + char buffer[32] = "BACnet: 0000000\r\n"; uint8_t nbytes = 17; + uint8_t *pBuffer = NULL; uint8_t data_register = 0; + pBuffer = &buffer[0]; if (timer_elapsed_seconds(TIMER_TEST, 1)) { timer_reset(TIMER_TEST); buffer[8] = (MSTP_MAC_Address & BIT0) ? '1' : '0'; @@ -186,9 +189,11 @@ void test_task( buffer[12] = (MSTP_MAC_Address & BIT4) ? '1' : '0'; buffer[13] = (MSTP_MAC_Address & BIT5) ? '1' : '0'; buffer[14] = (MSTP_MAC_Address & BIT6) ? '1' : '0'; - serial_bytes_send(buffer, nbytes); + serial_bytes_send(pBuffer, nbytes); } if (serial_byte_get(&data_register)) { + /* echo the character */ + serial_byte_send(data_register); if (data_register == '0') { Binary_Output_Level_Set(0, 1, BINARY_INACTIVE); Binary_Output_Level_Sync(0); @@ -207,7 +212,26 @@ void test_task( Binary_Output_Level_Set(1, 1, BINARY_NULL); Binary_Output_Level_Sync(1); } - serial_byte_send(data_register); + if (data_register == 'm') { + sprintf(buffer, "->Master State: "); + pBuffer = &buffer[0]; + nbytes = strlen(pBuffer); + serial_bytes_send(pBuffer, nbytes); + extern char *dlmstp_master_state_text(void); + pBuffer = dlmstp_master_state_text(); + nbytes = strlen(pBuffer); + serial_bytes_send(pBuffer, nbytes); + } + if (data_register == 'r') { + sprintf(buffer, "->Receive State: "); + pBuffer = &buffer[0]; + nbytes = strlen(pBuffer); + serial_bytes_send(pBuffer, nbytes); + extern char *dlmstp_receive_state_text(void); + pBuffer = dlmstp_receive_state_text(); + nbytes = strlen(pBuffer); + serial_bytes_send(pBuffer, nbytes); + } serial_byte_send('\r'); serial_byte_send('\n'); serial_byte_transmit_complete();