From 634ac556df2f0956128e52777391145c6256b960 Mon Sep 17 00:00:00 2001 From: skarg Date: Sat, 15 Dec 2012 21:55:40 +0000 Subject: [PATCH] removed static variables to enable multithreading. --- bacnet-stack/src/mstp.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/bacnet-stack/src/mstp.c b/bacnet-stack/src/mstp.c index fe5a7ab2..b2be65dc 100644 --- a/bacnet-stack/src/mstp.c +++ b/bacnet-stack/src/mstp.c @@ -250,7 +250,7 @@ void MSTP_Create_And_Send_Frame( void MSTP_Receive_Frame_FSM( volatile struct mstp_port_struct_t *mstp_port) { - static MSTP_RECEIVE_STATE receive_state = MSTP_RECEIVE_STATE_IDLE; + MSTP_RECEIVE_STATE receive_state = mstp_port->receive_state; printf_receive ("MSTP Rx: State=%s Data=%02X hCRC=%02X Index=%u EC=%u DateLen=%u Silence=%u\n", mstptext_receive_state(mstp_port->receive_state), @@ -551,7 +551,6 @@ void MSTP_Receive_Frame_FSM( printf_receive_data("\n"); fflush(stderr); } - receive_state = mstp_port->receive_state; return; } @@ -566,7 +565,7 @@ bool MSTP_Master_Node_FSM( uint16_t my_timeout = 10, ns_timeout = 0, mm_timeout = 0; /* transition immediately to the next state */ bool transition_now = false; - static MSTP_MASTER_STATE master_state = MSTP_MASTER_STATE_INITIALIZE; + MSTP_MASTER_STATE master_state = mstp_port->master_state; /* some calculations that several states need */ next_poll_station = @@ -575,16 +574,6 @@ bool MSTP_Master_Node_FSM( (mstp_port->This_Station + 1) % (mstp_port->Nmax_master + 1); next_next_station = (mstp_port->Next_Station + 1) % (mstp_port->Nmax_master + 1); - if (mstp_port->master_state != master_state) { - master_state = mstp_port->master_state; - printf_master - ("MSTP: TS=%02X[%02X] NS=%02X[%02X] PS=%02X[%02X] EC=%u TC=%u ST=%u %s\n", - mstp_port->This_Station, next_this_station, - mstp_port->Next_Station, next_next_station, - mstp_port->Poll_Station, next_poll_station, mstp_port->EventCount, - mstp_port->TokenCount, mstp_port->SilenceTimer((void*)mstp_port), - mstptext_master_state(mstp_port->master_state)); - } switch (mstp_port->master_state) { case MSTP_MASTER_STATE_INITIALIZE: /* DoneInitializing */ @@ -1091,6 +1080,16 @@ bool MSTP_Master_Node_FSM( mstp_port->master_state = MSTP_MASTER_STATE_IDLE; break; } + if (mstp_port->master_state != master_state) { + /* change of state detected - so print the details for debugging */ + printf_master + ("MSTP: TS=%02X[%02X] NS=%02X[%02X] PS=%02X[%02X] EC=%u TC=%u ST=%u %s\n", + mstp_port->This_Station, next_this_station, + mstp_port->Next_Station, next_next_station, + mstp_port->Poll_Station, next_poll_station, mstp_port->EventCount, + mstp_port->TokenCount, mstp_port->SilenceTimer((void*)mstp_port), + mstptext_master_state(mstp_port->master_state)); + } return transition_now; }