Beispiel #1
0
/**
 * \brief Starts software-controlled CSMA.
 */
static void csma_start(void)
{
	/* Initialize CSMA variables */
	NB = 0;
	BE = tal_pib.MinBE;

	/* Start backoff timer to trigger CCA */
	start_backoff();
}
Beispiel #2
0
/**
 * @brief Continues CSMA; handles next CSMA retry.
 *
 * @param trx_id Transceiver identifier
 */
void csma_continue(trx_id_t trx_id)
{
	NB[trx_id]++;
	if (NB[trx_id] > tal_pib[trx_id].MaxCSMABackoffs) {
		tx_done_handling(trx_id, MAC_CHANNEL_ACCESS_FAILURE);
	} else {
		BE[trx_id]++;
		if (BE[trx_id] > tal_pib[trx_id].MaxBE) {
			BE[trx_id] = tal_pib[trx_id].MaxBE;
		}

		/* Start backoff timer to trigger CCA */
		start_backoff(trx_id);
	}
}
Beispiel #3
0
/*
 * \brief Continues CSMA; handles next CSMA retry.
 */
void csma_continue(void)
{
	NB++;
	if (NB > tal_pib.MaxCSMABackoffs) {
		trx_trac_status = TRAC_CHANNEL_ACCESS_FAILURE;
		tal_state = TAL_TX_DONE;
		set_trx_state(CMD_RX_AACK_ON);
	} else {
		BE++;
		if (BE > tal_pib.MaxBE) {
			BE = tal_pib.MaxBE;
		}

		/* Start backoff timer to trigger CCA */
		start_backoff();
	}
}
Beispiel #4
0
/**
 * @brief Starts software-controlled CSMA.
 *
 * @param trx_id Transceiver identifier
 */
void csma_start(trx_id_t trx_id)
{
	/* Initialize CSMA variables */
	NB[trx_id] = 0;
	BE[trx_id] = tal_pib[trx_id].MinBE;

	if (BE[trx_id] == 0) {
		/* Collision avoidance is disabled during first iteration */
#ifdef SUPPORT_MODE_SWITCH
		if (tal_pib[trx_id].ModeSwitchEnabled) {
			tx_ms_ppdu(trx_id);
		} else
#endif
		{
			transmit_frame(trx_id, NO_CCA);
		}
	} else {
		/* Start backoff timer to trigger CCA */
		start_backoff(trx_id);
	}
}