private StateChanges DoneWithToken()
{
if (m_frame_count < m_max_info_frames)
{
/* SendAnotherFrame */
return StateChanges.SendAnotherFrame;
}
else if (!m_sole_master && m_NS == m_TS)
{
/* NextStationUnknown */
m_PS = (byte)((m_TS + 1) % (m_max_master + 1));
return StateChanges.NextStationUnknown;
}
else if (m_token_count < (m_max_poll - 1))
{
m_token_count++;
if (m_sole_master && m_NS != ((m_TS+1)%(m_max_master+1)))
{
/* SoleMaster */
m_frame_count = 0;
return StateChanges.SoleMaster;
}
else
{
/* SendToken */
return StateChanges.SendToken;
}
}
else if ((m_PS + 1) % (m_max_master + 1) == m_NS)
{
if (!m_sole_master)
{
/* ResetMaintenancePFM */
m_PS = (byte)m_TS;
m_token_count = 1;
return StateChanges.ResetMaintenancePFM;
}
else
{
/* SoleMasterRestartMaintenancePFM */
m_PS = (byte)((m_NS + 1) % (m_max_master + 1));
m_NS = (byte)m_TS;
m_token_count = 1;
return StateChanges.SoleMasterRestartMaintenancePFM;
}
}
else
{
/* SendMaintenancePFM */
m_PS = (byte)((m_PS + 1) % (m_max_master + 1));
return StateChanges.SendMaintenancePFM;
}
}