private StateChanges PassToken()
{
BacnetMstpFrameTypes frame_type;
byte destination_address;
byte source_address;
int msg_length;
for (int i = 0; i <= m_retry_token; i++)
{
//send
SendFrame(BacnetMstpFrameTypes.FRAME_TYPE_TOKEN, m_NS);
//wait for it to be used
GetMessageStatus status = GetNextMessage(T_USAGE_TIMEOUT, out frame_type, out destination_address, out source_address, out msg_length);
if (status == GetMessageStatus.Good || status == GetMessageStatus.DecodeError)
return StateChanges.SawTokenUser; //don't remove current message
}
//give up
m_PS = (byte)((m_NS + 1) % (m_max_master + 1));
m_NS = (byte)m_TS;
m_token_count = 0;
return StateChanges.FindNewSuccessor;
}