|
18 | 18 | #include "pages.h" |
19 | 19 | #include "config/model.h" |
20 | 20 |
|
| 21 | + |
21 | 22 | #if HAS_SCANNER |
22 | | -static struct scanner_page * const sp = &pagemem.u.scanner_page; |
| 23 | +#include "../common/_scanner_page.c" |
23 | 24 | static struct scanner_obj * const gui = &gui_objs.u.scanner; |
24 | | -static u8 scanState = 0; |
25 | | - |
26 | | -u16 scan_cb() |
27 | | -{ |
28 | | - int delay; |
29 | | - |
30 | | - if(scanState == 0) { |
31 | | - if(sp->time_to_scan == 0) { |
32 | | - CYRF_ConfigRFChannel(sp->channel + MIN_RADIOCHANNEL); |
33 | | - if(sp->attenuator) { |
34 | | - CYRF_WriteRegister(CYRF_06_RX_CFG, 0x0A); |
35 | | - } else { |
36 | | - CYRF_WriteRegister(CYRF_06_RX_CFG, 0x4A); |
37 | | - } |
38 | | - sp->time_to_scan = 1; |
39 | | - } |
40 | | - scanState = 1; |
41 | | - delay = 300; //slow channel require 270usec for synthesizer to settle |
42 | | - } else { |
43 | | - if ( !(CYRF_ReadRegister(CYRF_05_RX_CTRL) & 0x80)) { |
44 | | - CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x80); //Prepare to receive |
45 | | - Delay(10); |
46 | | - CYRF_ReadRegister(CYRF_13_RSSI); //dummy read |
47 | | - Delay(15); |
48 | | - } |
49 | | - int rssi = CYRF_ReadRegister(CYRF_13_RSSI) & 0x1F; |
50 | | - if(sp->scan_mode) { |
51 | | - sp->channelnoise[sp->channel] = (sp->channelnoise[sp->channel] + rssi) / 2; |
52 | | - } else { |
53 | | - if(rssi > sp->channelnoise[sp->channel]) |
54 | | - sp->channelnoise[sp->channel] = rssi; |
55 | | - } |
56 | | - scanState++; |
57 | | - delay = 300; |
58 | | - if(scanState == 5) { |
59 | | - scanState = 0; |
60 | | - delay = 50; |
61 | | - } |
62 | | - } |
63 | | - return delay; |
64 | | -} |
65 | | - |
66 | 25 | static s32 show_bar_cb(void *data) |
67 | 26 | { |
68 | 27 | long ch = (long)data; |
@@ -90,89 +49,27 @@ static const char *attstr_cb(guiObject_t *obj, const void *data) |
90 | 49 | return sp->attenuator ? _tr("Att.: -20dB") : _tr("Att.: 0dB"); |
91 | 50 | } |
92 | 51 |
|
93 | | -static void press_enable_cb(guiObject_t *obj, const void *data) |
94 | | -{ |
95 | | - (void)data; |
96 | | -#ifndef ENABLE_MODULAR |
97 | | - sp->enable ^= 1; |
98 | | - if (sp->enable) { |
99 | | - PROTOCOL_DeInit(); |
100 | | - DEVO_Cmds(0); //Switch to DEVO configuration |
101 | | - PROTOCOL_SetBindState(0); //Disable binding message |
102 | | - CLOCK_StopTimer(); |
103 | | - CYRF_SetTxRxMode(RX_EN); //Receive mode |
104 | | - CLOCK_StartTimer(1250, scan_cb); |
105 | | - } else { |
106 | | - PROTOCOL_Init(0); |
107 | | - } |
108 | | -#endif |
109 | | - GUI_Redraw(obj); |
110 | | -} |
111 | | - |
112 | | -static void press_mode_cb(guiObject_t *obj, const void *data) |
113 | | -{ |
114 | | - (void)data; |
115 | | -#ifndef ENABLE_MODULAR |
116 | | - sp->scan_mode ^= 1; |
117 | | -#endif |
118 | | - GUI_Redraw(obj); |
119 | | -} |
120 | | - |
121 | | -static void press_attenuator_cb(guiObject_t *obj, const void *data) |
122 | | -{ |
123 | | - (void)data; |
124 | | -#ifndef ENABLE_MODULAR |
125 | | - sp->attenuator ^= 1; |
126 | | -#endif |
127 | | - GUI_Redraw(obj); |
128 | | -} |
129 | | - |
130 | | -void PAGE_ScannerInit(int page) |
| 52 | +void _draw_page(u8 enable) |
131 | 53 | { |
132 | 54 | enum { |
133 | 55 | SCANBARWIDTH = (LCD_WIDTH / (MAX_RADIOCHANNEL - MIN_RADIOCHANNEL + 1)), |
134 | 56 | SCANBARXOFFSET = ((LCD_WIDTH - SCANBARWIDTH * (MAX_RADIOCHANNEL - MIN_RADIOCHANNEL + 1))/2), |
135 | 57 | SCANBARHEIGHT = (LCD_HEIGHT - 78), |
136 | 58 | }; |
137 | 59 | u8 i; |
138 | | - (void)page; |
139 | | - PAGE_SetModal(0); |
| 60 | + (void)enable; |
140 | 61 | PAGE_ShowHeader(PAGE_GetName(PAGEID_SCANNER)); |
141 | | - sp->enable = 0; |
142 | 62 | GUI_CreateButton(&gui->enable, LCD_WIDTH/2 - 152, 40, BUTTON_96, enablestr_cb, press_enable_cb, NULL); |
143 | | - sp->scan_mode = 0; |
144 | 63 | GUI_CreateButton(&gui->scan_mode, LCD_WIDTH/2 - 48, 40, BUTTON_96, modestr_cb, press_mode_cb, NULL); |
145 | | - sp->attenuator = 0; |
146 | | - GUI_CreateButton(&gui->attenuator, LCD_WIDTH/2 + 56, 40, BUTTON_96, attstr_cb, press_attenuator_cb, NULL); |
147 | | - sp->channel = 0; |
148 | | - sp->time_to_scan = 0; |
| 64 | + GUI_CreateButton(&gui->attenuator, LCD_WIDTH/2 + 56, 40, BUTTON_96, attstr_cb, press_attenuator_cb, NULL); |
149 | 65 | for(i = 0; i < (MAX_RADIOCHANNEL - MIN_RADIOCHANNEL + 1); i++) { |
150 | 66 | GUI_CreateBarGraph(&gui->bar[i], SCANBARXOFFSET + i * SCANBARWIDTH, 70, SCANBARWIDTH, SCANBARHEIGHT, 2, 31, BAR_VERTICAL, show_bar_cb, (void *)((long)i)); |
151 | | - sp->channelnoise[i] = 0; |
152 | 67 | } |
153 | 68 | } |
154 | 69 |
|
155 | | -void PAGE_ScannerEvent() |
| 70 | +void _draw_channels() |
156 | 71 | { |
157 | | -#ifndef ENABLE_MODULAR |
158 | | - if(! sp->enable) |
159 | | - return; |
160 | 72 | GUI_Redraw(&gui->bar[sp->channel]); |
161 | | - //printf("%02X : %d\n",sp->channel,sp->channelnoise[sp->channel]); |
162 | | - sp->channel++; |
163 | | - if(sp->channel == (MAX_RADIOCHANNEL - MIN_RADIOCHANNEL + 1)) |
164 | | - sp->channel = 0; |
165 | | - sp->channelnoise[sp->channel] = 0; |
166 | | - sp->time_to_scan = 0; |
167 | | -#endif |
168 | | -} |
169 | | - |
170 | | -void PAGE_ScannerExit() |
171 | | -{ |
172 | | -#ifndef ENABLE_MODULAR |
173 | | - if(sp->enable) |
174 | | - PROTOCOL_Init(0); |
175 | | -#endif |
176 | 73 | } |
177 | 74 |
|
178 | 75 | #endif //HAS_SCANNER |
0 commit comments