Esempio n. 1
0
/*************************************************************************//**
*****************************************************************************/
void PHY_DataReq(uint8_t *data)
{
	phyTrxSetState(TRX_CMD_TX_ARET_ON);

	TRX_FRAME_BUFFER(0) = data[0] + PHY_CRC_SIZE;
	for (uint8_t i = 0; i < data[0]; i++) {
		TRX_FRAME_BUFFER(i + 1) = data[i + 1];
	}

	phyState = PHY_STATE_TX_WAIT_END;
	TRX_STATE_REG = TRX_CMD_TX_START;
}
Esempio n. 2
0
/*************************************************************************//**
*****************************************************************************/
void PHY_DataReq(uint8_t *data, uint8_t size)
{
  phyTrxSetState(TRX_CMD_TX_ARET_ON);

  IRQ_STATUS_REG = IRQ_CLEAR_VALUE;

  TRX_FRAME_BUFFER(0) = size + PHY_CRC_SIZE;
  for (uint8_t i = 0; i < size; i++)
    TRX_FRAME_BUFFER(i+1) = data[i];

  phyState = PHY_STATE_TX_WAIT_END;
  TRX_STATE_REG = TRX_CMD_TX_START;
}
Esempio n. 3
0
/*************************************************************************//**
*****************************************************************************/
void PHY_TaskHandler(void)
{
	if (PHY_STATE_SLEEP == phyState) {
		return;
	}

	if (IRQ_STATUS_REG_s.rxEnd) {
		PHY_DataInd_t ind;
		uint8_t size = TST_RX_LENGTH_REG;

		for (uint8_t i = 0; i < size + 1 /*lqi*/; i++) {
			phyRxBuffer[i] = TRX_FRAME_BUFFER(i);
		}

		ind.data = phyRxBuffer;
		ind.size = size - PHY_CRC_SIZE;
		ind.lqi  = phyRxBuffer[size];
		ind.rssi = (int8_t)PHY_ED_LEVEL_REG + PHY_RSSI_BASE_VAL;
		PHY_DataInd(&ind);

		while (TRX_STATUS_RX_AACK_ON != TRX_STATUS_REG_s.trxStatus) {
		}

		IRQ_STATUS_REG_s.rxEnd = 1;
		TRX_CTRL_2_REG_s.rxSafeMode = 0;
		TRX_CTRL_2_REG_s.rxSafeMode = 1;
	} else if (IRQ_STATUS_REG_s.txEnd) {
		if (TRX_STATUS_TX_ARET_ON == TRX_STATUS_REG_s.trxStatus) {
			uint8_t status = TRX_STATE_REG_s.tracStatus;

			if (TRAC_STATUS_SUCCESS == status) {
				status = PHY_STATUS_SUCCESS;
			} else if (TRAC_STATUS_CHANNEL_ACCESS_FAILURE ==
					status) {
				status = PHY_STATUS_CHANNEL_ACCESS_FAILURE;
			} else if (TRAC_STATUS_NO_ACK == status) {
				status = PHY_STATUS_NO_ACK;
			} else {
				status = PHY_STATUS_ERROR;
			}

			phySetRxState();
			phyState = PHY_STATE_IDLE;

			PHY_DataConf(status);
		}

		IRQ_STATUS_REG_s.txEnd = 1;
	}
}