IEEE 802.15.4 subsystem
Sign in or create your account | Project List | Help
IEEE 802.15.4 subsystem Commit Details
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 | ||
---|---|---|
63 | 63 | }; |
64 | 64 | |
65 | 65 | |
66 | static 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 | ||
74 | static 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 | ||
82 | 66 | static volatile int run = 1; |
83 | 67 | |
84 | 68 | |
... | ... | |
146 | 130 | } |
147 | 131 | |
148 | 132 | |
149 | static 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 | ||
190 | 133 | static void receive_message(struct atrf_dsc *dsc) |
191 | 134 | { |
192 | 135 | uint8_t buf[MAX_PSDU+1]; /* PSDU+LQI */ |
... | ... | |
642 | 585 | receive(dsc, pcap_file); |
643 | 586 | break; |
644 | 587 | case mode_per: |
645 | set_power(dsc, power, 0); | |
588 | set_power_dBm(dsc, power, 0); | |
646 | 589 | transmit_pattern(dsc, pause_s, 0); |
647 | 590 | break; |
648 | 591 | case mode_ping: |
649 | set_power(dsc, power, 1); | |
592 | set_power_dBm(dsc, power, 1); | |
650 | 593 | ping(dsc, pause_s, 0); |
651 | 594 | break; |
652 | 595 | case mode_cont_tx: |
653 | set_power(dsc, power, 0); | |
596 | set_power_dBm(dsc, power, 0); | |
654 | 597 | status = test_mode(dsc, cont_tx, NULL); |
655 | 598 | break; |
656 | 599 | default: |
... | ... | |
679 | 622 | set_rate(dsc, rate); |
680 | 623 | switch (mode) { |
681 | 624 | case mode_msg: |
682 | set_power(dsc, power, 1); | |
625 | set_power_dBm(dsc, power, 1); | |
683 | 626 | transmit(dsc, argv[optind], times); |
684 | 627 | break; |
685 | 628 | case mode_per: |
686 | 629 | times = strtoul(argv[optind+1], &end, 0); |
687 | 630 | if (*end) |
688 | 631 | usage(*argv); |
689 | set_power(dsc, power, 0); | |
632 | set_power_dBm(dsc, power, 0); | |
690 | 633 | transmit_pattern(dsc, pause_s, times); |
691 | 634 | break; |
692 | 635 | case mode_ping: |
693 | 636 | pause_s = strtof(argv[optind], &end); |
694 | 637 | if (*end) |
695 | 638 | usage(*argv); |
696 | set_power(dsc, power, 1); | |
639 | set_power_dBm(dsc, power, 1); | |
697 | 640 | ping(dsc, pause_s, 1); |
698 | 641 | break; |
699 | 642 | case mode_cont_tx: |
700 | set_power(dsc, power, 0); | |
643 | set_power_dBm(dsc, power, 0); | |
701 | 644 | status = test_mode(dsc, cont_tx, argv[optind]); |
702 | 645 | break; |
703 | 646 | default: |
tools/include/misctxrx.h | ||
---|---|---|
1 | 1 | /* |
2 | 2 | * include/misctxrx.h - Miscellaenous transceiver helper functions |
3 | 3 | * |
4 | * Written 2010 by Werner Almesberger | |
5 | * Copyright 2010 Werner Almesberger | |
4 | * Written 2010-2011 by Werner Almesberger | |
5 | * Copyright 2010-2011 Werner Almesberger | |
6 | 6 | * |
7 | 7 | * This program is free software; you can redistribute it and/or modify |
8 | 8 | * it under the terms of the GNU General Public License as published by |
... | ... | |
21 | 21 | uint8_t wait_for_interrupt(struct atrf_dsc *dsc, uint8_t wait_for, |
22 | 22 | uint8_t ignore, int sleep_us, int timeout); |
23 | 23 | |
24 | void set_power_step(struct atrf_dsc *dsc, int power, int crc); | |
25 | void set_power_dBm(struct atrf_dsc *dsc, double power, int crc); | |
26 | ||
24 | 27 | #endif /* !MISCTXRX_H */ |
tools/lib/misctxrx.c | ||
---|---|---|
16 | 16 | #include <stdio.h> |
17 | 17 | #include <unistd.h> |
18 | 18 | #include <signal.h> |
19 | #include <math.h> | |
19 | 20 | |
20 | 21 | #include "at86rf230.h" |
21 | 22 | #include "atrf.h" |
22 | 23 | #include "misctxrx.h" |
23 | 24 | |
24 | 25 | |
26 | /* ----- Interrupts -------------------------------------------------------- */ | |
27 | ||
28 | ||
25 | 29 | static volatile int run = 1; |
26 | 30 | |
27 | 31 | |
... | ... | |
85 | 89 | raise(SIGINT); |
86 | 90 | return irq; |
87 | 91 | } |
92 | ||
93 | ||
94 | /* ----- Transmit power ---------------------------------------------------- */ | |
95 | ||
96 | ||
97 | static 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 | ||
105 | static 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 | ||
113 | void 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 | ||
135 | void 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 | } |