mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-29 10:01:53 +02:00
libatrf: further modularized transmit power setting and exported conversion
- lib/misctxrx.c (tx_pwr_230, tx_pwr_231): declare tables as "const" - lib/misctxrx.c (POWER_TABLE_SIZE, set_power_dBm): don't open-code the table size calculation - lib/misctxrx.c (tx_power_table, set_power_dBm): moved transmit power table selection out of set_power_dBm - include/misctxrx.h (tx_power_dBm2step, tx_power_step2dBm), lib/misctxrx.c (tx_power_dBm2step, tx_power_step2dBm, set_power_dBm): moved conversion functions out of set_power_dBm and made them globally available
This commit is contained in:
parent
8934c062a9
commit
1618868f9f
@ -21,6 +21,9 @@
|
|||||||
uint8_t wait_for_interrupt(struct atrf_dsc *dsc, uint8_t wait_for,
|
uint8_t wait_for_interrupt(struct atrf_dsc *dsc, uint8_t wait_for,
|
||||||
uint8_t ignore, int sleep_us, int timeout);
|
uint8_t ignore, int sleep_us, int timeout);
|
||||||
|
|
||||||
|
int tx_power_dBm2step(struct atrf_dsc *dsc, double power);
|
||||||
|
double tx_power_step2dBm(struct atrf_dsc *dsc, int step);
|
||||||
|
|
||||||
void set_power_step(struct atrf_dsc *dsc, int power, int crc);
|
void set_power_step(struct atrf_dsc *dsc, int power, int crc);
|
||||||
void set_power_dBm(struct atrf_dsc *dsc, double power, int crc);
|
void set_power_dBm(struct atrf_dsc *dsc, double power, int crc);
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ out:
|
|||||||
/* ----- Transmit power ---------------------------------------------------- */
|
/* ----- Transmit power ---------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static double tx_pwr_230[] = {
|
static const 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,
|
||||||
@ -102,7 +102,7 @@ static double tx_pwr_230[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static double tx_pwr_231[] = {
|
static const double tx_pwr_231[] = {
|
||||||
3.0, 2.8, 2.3, 1.8,
|
3.0, 2.8, 2.3, 1.8,
|
||||||
1.3, 0.7, 0.0, -1,
|
1.3, 0.7, 0.0, -1,
|
||||||
-2, -3, -4, -5,
|
-2, -3, -4, -5,
|
||||||
@ -110,6 +110,9 @@ static double tx_pwr_231[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define POWER_TABLE_SIZE (sizeof(tx_pwr_230)/sizeof(*tx_pwr_230))
|
||||||
|
|
||||||
|
|
||||||
void set_power_step(struct atrf_dsc *dsc, int power, int crc)
|
void set_power_step(struct atrf_dsc *dsc, int power, int crc)
|
||||||
{
|
{
|
||||||
uint8_t tmp;
|
uint8_t tmp;
|
||||||
@ -132,27 +135,52 @@ void set_power_step(struct atrf_dsc *dsc, int power, int crc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void set_power_dBm(struct atrf_dsc *dsc, double power, int crc)
|
static const double *tx_power_table(struct atrf_dsc *dsc)
|
||||||
{
|
{
|
||||||
const double *tx_pwr;
|
|
||||||
int n;
|
|
||||||
|
|
||||||
switch (atrf_identify(dsc)) {
|
switch (atrf_identify(dsc)) {
|
||||||
case artf_at86rf230:
|
case artf_at86rf230:
|
||||||
tx_pwr = tx_pwr_230;
|
return tx_pwr_230;
|
||||||
break;
|
|
||||||
case artf_at86rf231:
|
case artf_at86rf231:
|
||||||
tx_pwr = tx_pwr_231;
|
return tx_pwr_231;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (n = 0; n != sizeof(tx_pwr_230)/sizeof(*tx_pwr_230)-1; n++)
|
|
||||||
|
int tx_power_dBm2step(struct atrf_dsc *dsc, double power)
|
||||||
|
{
|
||||||
|
const double *tx_pwr = tx_power_table(dsc);
|
||||||
|
int n;
|
||||||
|
|
||||||
|
for (n = 0; n != POWER_TABLE_SIZE-1; n++)
|
||||||
if (tx_pwr[n] <= power)
|
if (tx_pwr[n] <= power)
|
||||||
break;
|
break;
|
||||||
if (fabs(tx_pwr[n]-power) > 0.01)
|
return n;
|
||||||
fprintf(stderr, "TX power %.1f dBm\n", tx_pwr[n]);
|
}
|
||||||
|
|
||||||
set_power_step(dsc, n, crc);
|
|
||||||
|
double tx_power_step2dBm(struct atrf_dsc *dsc, int step)
|
||||||
|
{
|
||||||
|
const double *tx_pwr = tx_power_table(dsc);
|
||||||
|
|
||||||
|
if (step < 0 || step > POWER_TABLE_SIZE)
|
||||||
|
abort();
|
||||||
|
return tx_pwr[step];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void set_power_dBm(struct atrf_dsc *dsc, double power, int crc)
|
||||||
|
{
|
||||||
|
int step;
|
||||||
|
double got;
|
||||||
|
|
||||||
|
step = tx_power_dBm2step(dsc, power);
|
||||||
|
got = tx_power_step2dBm(dsc, step);
|
||||||
|
|
||||||
|
if (fabs(got-power) > 0.01)
|
||||||
|
fprintf(stderr, "TX power %.1f dBm\n", got);
|
||||||
|
|
||||||
|
set_power_step(dsc, step, crc);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user