Date:2011-04-12 21:37:05 (12 years 11 months ago)
Author:Werner Almesberger
Commit:8934c062a95ff492fa8cf7892a9c18bbe4e0e73d
Message:tools/: moved function to set transmit power from atrf-txrx to libatrf

- atrf-txrx/atrf-txrx.c (tx_pwr_230, tx_pwr_231, set_power): moved to
lib/misctxrx.c
- include/misctxrx.h, lib/misctxr.c (set_power_step, set_power_dBm):
separated dBm to index conversion from the actual operation
- atrf-txrx/atrf-txrx.c (main): use new set_power_dBm instead of old
set_power
Files: tools/atrf-txrx/atrf-txrx.c (4 diffs)
tools/include/misctxrx.h (2 diffs)
tools/lib/misctxrx.c (2 diffs)

Change Details

tools/atrf-txrx/atrf-txrx.c
6363};
6464
6565
66static double tx_pwr_230[] = {
67     3.0, 2.6, 2.1, 1.6,
68     1.1, 0.5, -0.2, -1.2,
69    -2.2, -3.2, -4.2, -5.2,
70    -7.2, -9.2, -12.2, -17.2
71};
72
73
74static double tx_pwr_231[] = {
75     3.0, 2.8, 2.3, 1.8,
76     1.3, 0.7, 0.0, -1,
77    -2, -3, -4, -5,
78    -7, -9, -12, -17
79};
80
81
8266static volatile int run = 1;
8367
8468
...... 
146130}
147131
148132
149static void set_power(struct atrf_dsc *dsc, double power, int crc)
150{
151    const double *tx_pwr;
152    int n;
153    uint8_t tmp;
154
155    switch (atrf_identify(dsc)) {
156    case artf_at86rf230:
157        tx_pwr = tx_pwr_230;
158        break;
159    case artf_at86rf231:
160        tx_pwr = tx_pwr_231;
161        break;
162    default:
163        abort();
164    }
165
166    for (n = 0; n != sizeof(tx_pwr_230)/sizeof(*tx_pwr_230)-1; n++)
167        if (tx_pwr[n] <= power)
168            break;
169    if (fabs(tx_pwr[n]-power) > 0.01)
170        fprintf(stderr, "TX power %.1f dBm\n", tx_pwr[n]);
171
172    switch (atrf_identify(dsc)) {
173    case artf_at86rf230:
174        atrf_reg_write(dsc, REG_PHY_TX_PWR,
175            (crc ? TX_AUTO_CRC_ON_230 : 0) | n);
176        break;
177    case artf_at86rf231:
178        tmp = atrf_reg_read(dsc, REG_PHY_TX_PWR);
179        tmp = (tmp & ~TX_PWR_MASK) | n;
180        atrf_reg_write(dsc, REG_PHY_TX_PWR, tmp);
181        atrf_reg_write(dsc, REG_TRX_CTRL_1,
182            crc ? TX_AUTO_CRC_ON : 0);
183        break;
184    default:
185        abort();
186    }
187}
188
189
190133static void receive_message(struct atrf_dsc *dsc)
191134{
192135    uint8_t buf[MAX_PSDU+1]; /* PSDU+LQI */
...... 
642585            receive(dsc, pcap_file);
643586            break;
644587        case mode_per:
645            set_power(dsc, power, 0);
588            set_power_dBm(dsc, power, 0);
646589            transmit_pattern(dsc, pause_s, 0);
647590            break;
648591        case mode_ping:
649            set_power(dsc, power, 1);
592            set_power_dBm(dsc, power, 1);
650593            ping(dsc, pause_s, 0);
651594            break;
652595        case mode_cont_tx:
653            set_power(dsc, power, 0);
596            set_power_dBm(dsc, power, 0);
654597            status = test_mode(dsc, cont_tx, NULL);
655598            break;
656599        default:
...... 
679622        set_rate(dsc, rate);
680623        switch (mode) {
681624        case mode_msg:
682            set_power(dsc, power, 1);
625            set_power_dBm(dsc, power, 1);
683626            transmit(dsc, argv[optind], times);
684627            break;
685628        case mode_per:
686629            times = strtoul(argv[optind+1], &end, 0);
687630            if (*end)
688631                usage(*argv);
689            set_power(dsc, power, 0);
632            set_power_dBm(dsc, power, 0);
690633            transmit_pattern(dsc, pause_s, times);
691634            break;
692635        case mode_ping:
693636            pause_s = strtof(argv[optind], &end);
694637            if (*end)
695638                usage(*argv);
696            set_power(dsc, power, 1);
639            set_power_dBm(dsc, power, 1);
697640            ping(dsc, pause_s, 1);
698641            break;
699642        case mode_cont_tx:
700            set_power(dsc, power, 0);
643            set_power_dBm(dsc, power, 0);
701644            status = test_mode(dsc, cont_tx, argv[optind]);
702645            break;
703646        default:
tools/include/misctxrx.h
11/*
22 * include/misctxrx.h - Miscellaenous transceiver helper functions
33 *
4 * Written 2010 by Werner Almesberger
5 * Copyright 2010 Werner Almesberger
4 * Written 2010-2011 by Werner Almesberger
5 * Copyright 2010-2011 Werner Almesberger
66 *
77 * This program is free software; you can redistribute it and/or modify
88 * it under the terms of the GNU General Public License as published by
...... 
2121uint8_t wait_for_interrupt(struct atrf_dsc *dsc, uint8_t wait_for,
2222    uint8_t ignore, int sleep_us, int timeout);
2323
24void set_power_step(struct atrf_dsc *dsc, int power, int crc);
25void set_power_dBm(struct atrf_dsc *dsc, double power, int crc);
26
2427#endif /* !MISCTXRX_H */
tools/lib/misctxrx.c
1616#include <stdio.h>
1717#include <unistd.h>
1818#include <signal.h>
19#include <math.h>
1920
2021#include "at86rf230.h"
2122#include "atrf.h"
2223#include "misctxrx.h"
2324
2425
26/* ----- Interrupts -------------------------------------------------------- */
27
28
2529static volatile int run = 1;
2630
2731
...... 
8589        raise(SIGINT);
8690    return irq;
8791}
92
93
94/* ----- Transmit power ---------------------------------------------------- */
95
96
97static double tx_pwr_230[] = {
98     3.0, 2.6, 2.1, 1.6,
99     1.1, 0.5, -0.2, -1.2,
100    -2.2, -3.2, -4.2, -5.2,
101    -7.2, -9.2, -12.2, -17.2
102};
103
104
105static double tx_pwr_231[] = {
106     3.0, 2.8, 2.3, 1.8,
107     1.3, 0.7, 0.0, -1,
108    -2, -3, -4, -5,
109    -7, -9, -12, -17
110};
111
112
113void set_power_step(struct atrf_dsc *dsc, int power, int crc)
114{
115    uint8_t tmp;
116
117    switch (atrf_identify(dsc)) {
118    case artf_at86rf230:
119        atrf_reg_write(dsc, REG_PHY_TX_PWR,
120            (crc ? TX_AUTO_CRC_ON_230 : 0) | power);
121        break;
122    case artf_at86rf231:
123        tmp = atrf_reg_read(dsc, REG_PHY_TX_PWR);
124        tmp = (tmp & ~TX_PWR_MASK) | power;
125        atrf_reg_write(dsc, REG_PHY_TX_PWR, tmp);
126        atrf_reg_write(dsc, REG_TRX_CTRL_1,
127            crc ? TX_AUTO_CRC_ON : 0);
128        break;
129    default:
130        abort();
131    }
132}
133
134
135void set_power_dBm(struct atrf_dsc *dsc, double power, int crc)
136{
137    const double *tx_pwr;
138    int n;
139
140    switch (atrf_identify(dsc)) {
141    case artf_at86rf230:
142        tx_pwr = tx_pwr_230;
143        break;
144    case artf_at86rf231:
145        tx_pwr = tx_pwr_231;
146        break;
147    default:
148        abort();
149    }
150
151    for (n = 0; n != sizeof(tx_pwr_230)/sizeof(*tx_pwr_230)-1; n++)
152        if (tx_pwr[n] <= power)
153            break;
154    if (fabs(tx_pwr[n]-power) > 0.01)
155        fprintf(stderr, "TX power %.1f dBm\n", tx_pwr[n]);
156
157    set_power_step(dsc, n, crc);
158}

Archive Download the corresponding diff file



interactive