mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-19 10:31:53 +02:00
atrf-txrx: set CRC and transmit power depending on chip (AT86RF230/231)
- atrf-txrx.c (tx_pwr, tx_pwr_230, tx_pwr_231, set_power): table of power values depends on chip - atrf-txrx.c (set_power): location of TX_AUTO_CRC_ON and use of REG_PHY_TX_PWR depends on chip
This commit is contained in:
parent
a9321cea7c
commit
02e394a706
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* atrf-txrx/atrf-txrx.c - ben-wpan AT86RF230 TX/RX
|
* atrf-txrx/atrf-txrx.c - ben-wpan AT86RF230 TX/RX
|
||||||
*
|
*
|
||||||
* Written 2010 by Werner Almesberger
|
* Written 2010-2011 by Werner Almesberger
|
||||||
* Copyright 2010 Werner Almesberger
|
* Copyright 2010-2011 Werner Almesberger
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -41,7 +41,7 @@
|
|||||||
#define DEFAULT_POWER -3.2 /* transmit power, dBm */
|
#define DEFAULT_POWER -3.2 /* transmit power, dBm */
|
||||||
|
|
||||||
|
|
||||||
static double tx_pwr[] = {
|
static double tx_pwr_230[] = {
|
||||||
3.0, 2.6, 2.1, 1.6,
|
3.0, 2.6, 2.1, 1.6,
|
||||||
1.1, 0.5, -0.2, -1.2,
|
1.1, 0.5, -0.2, -1.2,
|
||||||
-2.2, -3.2, -4.2, -5.2,
|
-2.2, -3.2, -4.2, -5.2,
|
||||||
@ -49,6 +49,14 @@ static double tx_pwr[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static double tx_pwr_231[] = {
|
||||||
|
3.0, 2.8, 2.3, 1.8,
|
||||||
|
1.3, 0.7, 0.0, -1,
|
||||||
|
-2, -3, -4, -5,
|
||||||
|
-7, -9, -12, -17
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static volatile int run = 1;
|
static volatile int run = 1;
|
||||||
|
|
||||||
|
|
||||||
@ -84,14 +92,42 @@ static void set_channel(struct atrf_dsc *dsc, int channel)
|
|||||||
|
|
||||||
static void set_power(struct atrf_dsc *dsc, double power, int crc)
|
static void set_power(struct atrf_dsc *dsc, double power, int crc)
|
||||||
{
|
{
|
||||||
|
const double *tx_pwr;
|
||||||
int n;
|
int n;
|
||||||
|
uint8_t tmp;
|
||||||
|
|
||||||
for (n = 0; n != sizeof(tx_pwr)/sizeof(*tx_pwr)-1; n++)
|
switch (atrf_identify(dsc)) {
|
||||||
|
case artf_at86rf230:
|
||||||
|
tx_pwr = tx_pwr_230;
|
||||||
|
break;
|
||||||
|
case artf_at86rf231:
|
||||||
|
tx_pwr = tx_pwr_231;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (n = 0; n != sizeof(tx_pwr_230)/sizeof(*tx_pwr_230)-1; n++)
|
||||||
if (tx_pwr[n] <= power)
|
if (tx_pwr[n] <= power)
|
||||||
break;
|
break;
|
||||||
if (fabs(tx_pwr[n]-power) > 0.01)
|
if (fabs(tx_pwr[n]-power) > 0.01)
|
||||||
fprintf(stderr, "TX power %.1f dBm\n", tx_pwr[n]);
|
fprintf(stderr, "TX power %.1f dBm\n", tx_pwr[n]);
|
||||||
atrf_reg_write(dsc, REG_PHY_TX_PWR, (crc ? TX_AUTO_CRC_ON : 0) | n);
|
|
||||||
|
switch (atrf_identify(dsc)) {
|
||||||
|
case artf_at86rf230:
|
||||||
|
atrf_reg_write(dsc, REG_PHY_TX_PWR,
|
||||||
|
(crc ? TX_AUTO_CRC_ON : 0) | n);
|
||||||
|
break;
|
||||||
|
case artf_at86rf231:
|
||||||
|
tmp = atrf_reg_read(dsc, REG_PHY_TX_PWR);
|
||||||
|
tmp = (tmp & ~TX_PWR_MASK) | n;
|
||||||
|
atrf_reg_write(dsc, REG_PHY_TX_PWR, tmp);
|
||||||
|
atrf_reg_write(dsc, REG_TRX_CTRL_1,
|
||||||
|
crc ? TX_AUTO_CRC_ON_231 : 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user