コード例 #1
0
ファイル: tal_pib.c プロジェクト: thegeek82000/asf
/**
 * \brief Limit the phyTransmitPower to the trx limits
 *
 * \param phyTransmitPower phyTransmitPower value
 *
 * \return limited tal_pib_TransmitPower
 */
static uint8_t limit_tx_pwr(uint8_t curr_transmit_power)
{
	uint8_t ret_val = curr_transmit_power;
	int8_t dbm_value;

	dbm_value = CONV_phyTransmitPower_TO_DBM(curr_transmit_power);
	if (dbm_value > (int8_t)PGM_READ_BYTE(&tx_pwr_table[0])) {
		dbm_value = (int8_t)PGM_READ_BYTE(&tx_pwr_table[0]);
		ret_val = CONV_DBM_TO_phyTransmitPower(dbm_value);
	} else if (dbm_value <
			(int8_t)PGM_READ_BYTE(&tx_pwr_table[sizeof(tx_pwr_table)
			- 1])) {
		dbm_value
			= (int8_t)PGM_READ_BYTE(&tx_pwr_table[sizeof(
					tx_pwr_table)
				- 1]);
		ret_val = CONV_DBM_TO_phyTransmitPower(dbm_value);
	}

	return (ret_val | TX_PWR_TOLERANCE);
}
コード例 #2
0
ファイル: tal_pib.c プロジェクト: AndreyMostovov/asf
/**
 * \brief Limit the phyTransmitPower to the trx limits
 *
 * \param phyTransmitPower phyTransmitPower value
 *
 */
static void limit_tx_pwr(void)
{
	int8_t dbm_value;

	dbm_value = CONV_phyTransmitPower_TO_DBM(tal_pib.TransmitPower);

	/* Limit to the transceiver's absolute maximum/minimum. */
	if (dbm_value <= MIN_TX_PWR) {
		dbm_value = MIN_TX_PWR;
	} else if (dbm_value > MAX_TX_PWR) {
		dbm_value = MAX_TX_PWR;
	}

	tal_pib.TransmitPower = TX_PWR_TOLERANCE | CONV_DBM_TO_phyTransmitPower(
			dbm_value);
}
コード例 #3
0
ファイル: tal_pib.c プロジェクト: mknapik/avr-MAC
/**
 * @brief Limit the phyTransmitPower to the trx limits
 *
 * @param phyTransmitPower phyTransmitPower value
 *
 */
static void limit_tx_pwr(void)
{
    int8_t dbm_value;

    dbm_value = CONV_phyTransmitPower_TO_DBM(tal_pib_TransmitPower);

    /* Limit to the transceiver's absolute maximum/minimum. */
    if (dbm_value <= MIN_TX_PWR)
    {
        dbm_value = MIN_TX_PWR;
    }
    else
    {
        /* Upper Tx power limits depend on the currently used channel and channel page */
        switch (tal_pib_CurrentPage)
        {
            case 0: /* BPSK */
                if (tal_pib_CurrentChannel == 0)
                {
                    if (dbm_value > MAX_TX_PWR_BPSK_20)
                    {
                        dbm_value = MAX_TX_PWR_BPSK_20;
                    }
                }
                else    /* channels 1-10 */
                {
                    if (dbm_value > MAX_TX_PWR)
                    {
                        dbm_value = MAX_TX_PWR;
                    }
                }
                break;
            case 2: /* O-QPSK */
                if (tal_pib_CurrentChannel == 0)
                {
                    if (dbm_value > MAX_TX_PWR_OQPSK_100)
                    {
                        dbm_value = MAX_TX_PWR_OQPSK_100;
                    }
                }
                else    /* channels 1-10 */
                {
                    if (dbm_value > MAX_TX_PWR)
                    {
                        dbm_value = MAX_TX_PWR;
                    }
                }
                break;
            case 5: /* China, O-QPSK */
#ifdef HIGH_DATA_RATE_SUPPORT
            case 18: /* Chinese O-QPSK 500 */
            case 19: /* Chinese O-QPSK 1000 */
#endif
                if (dbm_value > MAX_TX_PWR_CHINA)
                {
                    dbm_value = MAX_TX_PWR_CHINA;
                }
                break;
#ifdef HIGH_DATA_RATE_SUPPORT
            case 16: /* O-QPSK 200, 500 */
                if (tal_pib_CurrentChannel == 0)
                {
                    if (dbm_value > MAX_TX_PWR_OQPSK_200)
                    {
                        dbm_value = MAX_TX_PWR_OQPSK_200;
                    }
                }
                else    /* channels 1-10 */
                {
                    if (dbm_value > MAX_TX_PWR_OQPSK_500)
                    {
                        dbm_value = MAX_TX_PWR_OQPSK_500;
                    }
                }
                break;
            case 17: /* O-QPSK 400, 1000 */
                if (tal_pib_CurrentChannel == 0)
                {
                    if (dbm_value > MAX_TX_PWR_OQPSK_400)
                    {
                        dbm_value = MAX_TX_PWR_OQPSK_400;
                    }
                }
                else    /* channels 1-10 */
                {
                    if (dbm_value > MAX_TX_PWR_OQPSK_1000)
                    {
                        dbm_value = MAX_TX_PWR_OQPSK_1000;
                    }
                }
                break;
#endif  /* #ifdef HIGH_DATA_RATE_SUPPORT */
        }
    }

    tal_pib_TransmitPower = TX_PWR_TOLERANCE | CONV_DBM_TO_phyTransmitPower(dbm_value);
}