Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: QEI DRV8830 PID ADT7410 TextLCD Frq_cuntr_Nucleo-F746ZG RingBuffer
Fork of Frequency_Counter_w_GPS_1PPS by
hw_tst.h@13:1041596c416c, 2016-11-23 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Nov 23 07:35:20 2016 +0000
- Revision:
- 13:1041596c416c
- Child:
- 14:ba6ea409ab05
Frequency counter using GPS 1PPS signal and temperature controlled 50MHz Base clock. Ported from F411 Frequency Counter.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kenjiArai | 13:1041596c416c | 1 | /* |
| kenjiArai | 13:1041596c416c | 2 | * mbed Application program / HARDWARE TEST mode program |
| kenjiArai | 13:1041596c416c | 3 | * |
| kenjiArai | 13:1041596c416c | 4 | * Copyright (c) 2016 Kenji Arai / JH1PJL |
| kenjiArai | 13:1041596c416c | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
| kenjiArai | 13:1041596c416c | 6 | * http://mbed.org/users/kenjiArai/ |
| kenjiArai | 13:1041596c416c | 7 | * Created: Novemeber 8th, 2016 |
| kenjiArai | 13:1041596c416c | 8 | * Revised: Novemeber 23rd, 2016 |
| kenjiArai | 13:1041596c416c | 9 | * |
| kenjiArai | 13:1041596c416c | 10 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| kenjiArai | 13:1041596c416c | 11 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| kenjiArai | 13:1041596c416c | 12 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| kenjiArai | 13:1041596c416c | 13 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| kenjiArai | 13:1041596c416c | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| kenjiArai | 13:1041596c416c | 15 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
| kenjiArai | 13:1041596c416c | 16 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| kenjiArai | 13:1041596c416c | 17 | */ |
| kenjiArai | 13:1041596c416c | 18 | |
| kenjiArai | 13:1041596c416c | 19 | // Include -------------------------------------------------------------------- |
| kenjiArai | 13:1041596c416c | 20 | |
| kenjiArai | 13:1041596c416c | 21 | // Definition ----------------------------------------------------------------- |
| kenjiArai | 13:1041596c416c | 22 | #define GETC(x) pc.getc(x) |
| kenjiArai | 13:1041596c416c | 23 | #define PUTC(x) pc.putc(x) |
| kenjiArai | 13:1041596c416c | 24 | #define PRINTF(...) pc.printf(__VA_ARGS__) |
| kenjiArai | 13:1041596c416c | 25 | #define READABLE(x) pc.readable(x) |
| kenjiArai | 13:1041596c416c | 26 | |
| kenjiArai | 13:1041596c416c | 27 | // Object --------------------------------------------------------------------- |
| kenjiArai | 13:1041596c416c | 28 | extern Serial pc; |
| kenjiArai | 13:1041596c416c | 29 | extern Serial gps; |
| kenjiArai | 13:1041596c416c | 30 | extern DigitalIn gps_rx; |
| kenjiArai | 13:1041596c416c | 31 | extern Ticker irq_action; |
| kenjiArai | 13:1041596c416c | 32 | extern DigitalOut led_R_gps1pps; |
| kenjiArai | 13:1041596c416c | 33 | extern DigitalOut led_G_temp_ok; |
| kenjiArai | 13:1041596c416c | 34 | extern DigitalOut led_B_recipro; |
| kenjiArai | 13:1041596c416c | 35 | extern DigitalOut led_W_prescaler; |
| kenjiArai | 13:1041596c416c | 36 | extern DigitalOut led_R_rotary; |
| kenjiArai | 13:1041596c416c | 37 | extern DigitalOut led_G_rotary; |
| kenjiArai | 13:1041596c416c | 38 | extern DigitalOut led_B_rotary; |
| kenjiArai | 13:1041596c416c | 39 | extern TextLCD lcd; |
| kenjiArai | 13:1041596c416c | 40 | |
| kenjiArai | 13:1041596c416c | 41 | // RAM ------------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 42 | char linebuf[64]; |
| kenjiArai | 13:1041596c416c | 43 | int buf_size = sizeof(linebuf); |
| kenjiArai | 13:1041596c416c | 44 | |
| kenjiArai | 13:1041596c416c | 45 | // Function prototypes -------------------------------------------------------- |
| kenjiArai | 13:1041596c416c | 46 | extern int iGPS_getc(void); |
| kenjiArai | 13:1041596c416c | 47 | extern double read_temperature(uint8_t n); |
| kenjiArai | 13:1041596c416c | 48 | extern void temp_control(void const *args); |
| kenjiArai | 13:1041596c416c | 49 | extern void select_input_div_1or10or20(uint8_t mode); |
| kenjiArai | 13:1041596c416c | 50 | |
| kenjiArai | 13:1041596c416c | 51 | void msg_hlp(void); |
| kenjiArai | 13:1041596c416c | 52 | void put_rn(void); |
| kenjiArai | 13:1041596c416c | 53 | void put_r(void); |
| kenjiArai | 13:1041596c416c | 54 | void put_lin(void); |
| kenjiArai | 13:1041596c416c | 55 | void put_spc(uint8_t n); |
| kenjiArai | 13:1041596c416c | 56 | int xatoi(char **str, int32_t *res); |
| kenjiArai | 13:1041596c416c | 57 | void get_line(char *buff, int len); |
| kenjiArai | 13:1041596c416c | 58 | |
| kenjiArai | 13:1041596c416c | 59 | // ROM / Constant data -------------------------------------------------------- |
| kenjiArai | 13:1041596c416c | 60 | char *const test_msg0 = "F746ZG Frequency Counter Hardware Test on mbed"; |
| kenjiArai | 13:1041596c416c | 61 | char *const test_msg1 = " system, created on UTC: "__DATE__"("__TIME__")"; |
| kenjiArai | 13:1041596c416c | 62 | |
| kenjiArai | 13:1041596c416c | 63 | //------------------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 64 | // Control Program |
| kenjiArai | 13:1041596c416c | 65 | //------------------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 66 | void hardware_test(void) |
| kenjiArai | 13:1041596c416c | 67 | { |
| kenjiArai | 13:1041596c416c | 68 | char *ptr; |
| kenjiArai | 13:1041596c416c | 69 | char c; |
| kenjiArai | 13:1041596c416c | 70 | uint32_t n; |
| kenjiArai | 13:1041596c416c | 71 | |
| kenjiArai | 13:1041596c416c | 72 | put_rn(); |
| kenjiArai | 13:1041596c416c | 73 | put_rn(); |
| kenjiArai | 13:1041596c416c | 74 | msg_hlp(); |
| kenjiArai | 13:1041596c416c | 75 | for (;;) { |
| kenjiArai | 13:1041596c416c | 76 | put_r(); |
| kenjiArai | 13:1041596c416c | 77 | PUTC('>'); |
| kenjiArai | 13:1041596c416c | 78 | ptr = linebuf; |
| kenjiArai | 13:1041596c416c | 79 | get_line(ptr, sizeof(linebuf)); |
| kenjiArai | 13:1041596c416c | 80 | switch (*ptr++) { |
| kenjiArai | 13:1041596c416c | 81 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 82 | // LED |
| kenjiArai | 13:1041596c416c | 83 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 84 | case 'l' : |
| kenjiArai | 13:1041596c416c | 85 | put_r(); |
| kenjiArai | 13:1041596c416c | 86 | PRINTF("If you want to stop, please het any key."); |
| kenjiArai | 13:1041596c416c | 87 | put_rn(); |
| kenjiArai | 13:1041596c416c | 88 | while (true){ |
| kenjiArai | 13:1041596c416c | 89 | led_R_gps1pps = 1; |
| kenjiArai | 13:1041596c416c | 90 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 91 | led_R_gps1pps = 0; |
| kenjiArai | 13:1041596c416c | 92 | led_G_temp_ok = 1; |
| kenjiArai | 13:1041596c416c | 93 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 94 | led_G_temp_ok = 0; |
| kenjiArai | 13:1041596c416c | 95 | led_B_recipro = 1; |
| kenjiArai | 13:1041596c416c | 96 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 97 | led_B_recipro = 0; |
| kenjiArai | 13:1041596c416c | 98 | led_W_prescaler = 1; |
| kenjiArai | 13:1041596c416c | 99 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 100 | led_W_prescaler = 0; |
| kenjiArai | 13:1041596c416c | 101 | led_R_rotary = 1; |
| kenjiArai | 13:1041596c416c | 102 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 103 | led_R_rotary = 0; |
| kenjiArai | 13:1041596c416c | 104 | led_G_rotary = 1; |
| kenjiArai | 13:1041596c416c | 105 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 106 | led_G_rotary = 0; |
| kenjiArai | 13:1041596c416c | 107 | led_B_rotary = 1; |
| kenjiArai | 13:1041596c416c | 108 | wait(0.4); |
| kenjiArai | 13:1041596c416c | 109 | led_B_rotary = 0; |
| kenjiArai | 13:1041596c416c | 110 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 111 | } |
| kenjiArai | 13:1041596c416c | 112 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 113 | put_r(); |
| kenjiArai | 13:1041596c416c | 114 | break; |
| kenjiArai | 13:1041596c416c | 115 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 116 | // LCD Display |
| kenjiArai | 13:1041596c416c | 117 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 118 | case 'd' : |
| kenjiArai | 13:1041596c416c | 119 | put_r(); |
| kenjiArai | 13:1041596c416c | 120 | lcd.locate(0, 0); |
| kenjiArai | 13:1041596c416c | 121 | for(char i = 'z';'*' < i; i--){ |
| kenjiArai | 13:1041596c416c | 122 | lcd.putc(i); |
| kenjiArai | 13:1041596c416c | 123 | } |
| kenjiArai | 13:1041596c416c | 124 | lcd.locate(0, 0); |
| kenjiArai | 13:1041596c416c | 125 | wait(2.0); |
| kenjiArai | 13:1041596c416c | 126 | for(char i = '.';'~' > i; i++){ |
| kenjiArai | 13:1041596c416c | 127 | lcd.putc(i); |
| kenjiArai | 13:1041596c416c | 128 | } |
| kenjiArai | 13:1041596c416c | 129 | PRINTF("Please adjust Contrast Volue."); |
| kenjiArai | 13:1041596c416c | 130 | put_rn(); |
| kenjiArai | 13:1041596c416c | 131 | PRINTF("Hit any key to clear screan."); |
| kenjiArai | 13:1041596c416c | 132 | put_rn(); |
| kenjiArai | 13:1041596c416c | 133 | while (READABLE()){;} |
| kenjiArai | 13:1041596c416c | 134 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 135 | lcd.locate(0, 0); |
| kenjiArai | 13:1041596c416c | 136 | for (uint8_t x =0 ;100 > x; x++){ |
| kenjiArai | 13:1041596c416c | 137 | lcd.putc(' '); |
| kenjiArai | 13:1041596c416c | 138 | } |
| kenjiArai | 13:1041596c416c | 139 | break; |
| kenjiArai | 13:1041596c416c | 140 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 141 | // Frequency |
| kenjiArai | 13:1041596c416c | 142 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 143 | case 'f' : |
| kenjiArai | 13:1041596c416c | 144 | put_r(); |
| kenjiArai | 13:1041596c416c | 145 | select_input_div_1or10or20(0); |
| kenjiArai | 13:1041596c416c | 146 | PRINTF("50MHz Clock for Timer2:"); |
| kenjiArai | 13:1041596c416c | 147 | PRINTF(" Input clock for Timer8+4:"); |
| kenjiArai | 13:1041596c416c | 148 | put_rn(); |
| kenjiArai | 13:1041596c416c | 149 | while (true){ |
| kenjiArai | 13:1041596c416c | 150 | n = fc.read_base_clock_frequency(1.0f); |
| kenjiArai | 13:1041596c416c | 151 | PRINTF(" %u ", n); |
| kenjiArai | 13:1041596c416c | 152 | n = fc.read_input_frequency(1.0f); |
| kenjiArai | 13:1041596c416c | 153 | PRINTF("%u", n); |
| kenjiArai | 13:1041596c416c | 154 | put_rn(); |
| kenjiArai | 13:1041596c416c | 155 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 156 | } |
| kenjiArai | 13:1041596c416c | 157 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 158 | break; |
| kenjiArai | 13:1041596c416c | 159 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 160 | // Input select |
| kenjiArai | 13:1041596c416c | 161 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 162 | case 'i' : |
| kenjiArai | 13:1041596c416c | 163 | put_r(); |
| kenjiArai | 13:1041596c416c | 164 | select_input_div_1or10or20(0); |
| kenjiArai | 13:1041596c416c | 165 | PRINTF("Start BNC connecter input (none-prescaler)"); |
| kenjiArai | 13:1041596c416c | 166 | put_rn(); |
| kenjiArai | 13:1041596c416c | 167 | PRINTF("Input freq. (data is not accurate enough"); |
| kenjiArai | 13:1041596c416c | 168 | put_rn(); |
| kenjiArai | 13:1041596c416c | 169 | PRINTF("Hit any key to go next input"); |
| kenjiArai | 13:1041596c416c | 170 | put_rn(); |
| kenjiArai | 13:1041596c416c | 171 | while (true){ |
| kenjiArai | 13:1041596c416c | 172 | n = fc.read_input_frequency(1.0f); |
| kenjiArai | 13:1041596c416c | 173 | PRINTF("f = %u [Hz]", n); |
| kenjiArai | 13:1041596c416c | 174 | put_rn(); |
| kenjiArai | 13:1041596c416c | 175 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 176 | } |
| kenjiArai | 13:1041596c416c | 177 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 178 | select_input_div_1or10or20(1); |
| kenjiArai | 13:1041596c416c | 179 | PRINTF("Start SMA connecter input (prescaler 1/10)"); |
| kenjiArai | 13:1041596c416c | 180 | put_rn(); |
| kenjiArai | 13:1041596c416c | 181 | PRINTF("Hit any key to go next input"); |
| kenjiArai | 13:1041596c416c | 182 | put_rn(); |
| kenjiArai | 13:1041596c416c | 183 | while (true){ |
| kenjiArai | 13:1041596c416c | 184 | n = fc.read_input_frequency(1.0f); |
| kenjiArai | 13:1041596c416c | 185 | PRINTF("f = %u [Hz] x 10 = (your expected freq.)", n); |
| kenjiArai | 13:1041596c416c | 186 | put_rn(); |
| kenjiArai | 13:1041596c416c | 187 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 188 | } |
| kenjiArai | 13:1041596c416c | 189 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 190 | select_input_div_1or10or20(2); |
| kenjiArai | 13:1041596c416c | 191 | PRINTF("Start SMA connecter input (prescaler 1/20)"); |
| kenjiArai | 13:1041596c416c | 192 | put_rn(); |
| kenjiArai | 13:1041596c416c | 193 | PRINTF("Hit any key to go next input"); |
| kenjiArai | 13:1041596c416c | 194 | put_rn(); |
| kenjiArai | 13:1041596c416c | 195 | while (true){ |
| kenjiArai | 13:1041596c416c | 196 | n = fc.read_input_frequency(1.0f); |
| kenjiArai | 13:1041596c416c | 197 | PRINTF("f = %u [Hz] x 20 = (your expected freq.)", n); |
| kenjiArai | 13:1041596c416c | 198 | put_rn(); |
| kenjiArai | 13:1041596c416c | 199 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 200 | } |
| kenjiArai | 13:1041596c416c | 201 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 202 | break; |
| kenjiArai | 13:1041596c416c | 203 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 204 | // GPS signal |
| kenjiArai | 13:1041596c416c | 205 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 206 | case 'g' : |
| kenjiArai | 13:1041596c416c | 207 | put_r(); |
| kenjiArai | 13:1041596c416c | 208 | PRINTF("Start GPS checking."); |
| kenjiArai | 13:1041596c416c | 209 | put_rn(); |
| kenjiArai | 13:1041596c416c | 210 | PRINTF("If you want to stop, please het any key"); |
| kenjiArai | 13:1041596c416c | 211 | put_rn(); |
| kenjiArai | 13:1041596c416c | 212 | // Wait long interval (every 1sec) |
| kenjiArai | 13:1041596c416c | 213 | for (uint32_t i = 0; i < 100000; i++){ |
| kenjiArai | 13:1041596c416c | 214 | if (gps_rx == 0){ |
| kenjiArai | 13:1041596c416c | 215 | i = 0; |
| kenjiArai | 13:1041596c416c | 216 | } |
| kenjiArai | 13:1041596c416c | 217 | } |
| kenjiArai | 13:1041596c416c | 218 | // Clear PD_2 GPS RX line errors(over run) |
| kenjiArai | 13:1041596c416c | 219 | CLEAR_PD_2_RX_LINE(); |
| kenjiArai | 13:1041596c416c | 220 | n = 0; |
| kenjiArai | 13:1041596c416c | 221 | while (true){ |
| kenjiArai | 13:1041596c416c | 222 | pc.putc(gps.getc()); |
| kenjiArai | 13:1041596c416c | 223 | led_R_gps1pps = !led_R_gps1pps; |
| kenjiArai | 13:1041596c416c | 224 | if (!(++n % 100)){ |
| kenjiArai | 13:1041596c416c | 225 | led_R_gps1pps = !led_R_gps1pps; |
| kenjiArai | 13:1041596c416c | 226 | } |
| kenjiArai | 13:1041596c416c | 227 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 228 | } |
| kenjiArai | 13:1041596c416c | 229 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 230 | led_R_gps1pps = 0; |
| kenjiArai | 13:1041596c416c | 231 | put_rn(); |
| kenjiArai | 13:1041596c416c | 232 | PRINTF("Finish GPS part.\r\n"); |
| kenjiArai | 13:1041596c416c | 233 | break; |
| kenjiArai | 13:1041596c416c | 234 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 235 | // Temperature |
| kenjiArai | 13:1041596c416c | 236 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 237 | case 't' : |
| kenjiArai | 13:1041596c416c | 238 | put_r(); |
| kenjiArai | 13:1041596c416c | 239 | read_temperature(0); |
| kenjiArai | 13:1041596c416c | 240 | while (true){ |
| kenjiArai | 13:1041596c416c | 241 | PRINTF("Temperature: %+6.3f", read_temperature(1)); |
| kenjiArai | 13:1041596c416c | 242 | put_rn(); |
| kenjiArai | 13:1041596c416c | 243 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 244 | wait(1.0); |
| kenjiArai | 13:1041596c416c | 245 | } |
| kenjiArai | 13:1041596c416c | 246 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 247 | break; |
| kenjiArai | 13:1041596c416c | 248 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 249 | // Special command defined by you |
| kenjiArai | 13:1041596c416c | 250 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 251 | case 'x' : |
| kenjiArai | 13:1041596c416c | 252 | while (true){ |
| kenjiArai | 13:1041596c416c | 253 | |
| kenjiArai | 13:1041596c416c | 254 | put_rn(); |
| kenjiArai | 13:1041596c416c | 255 | if (READABLE()){ break;} |
| kenjiArai | 13:1041596c416c | 256 | wait(1.0); |
| kenjiArai | 13:1041596c416c | 257 | } |
| kenjiArai | 13:1041596c416c | 258 | c = GETC(); // read as dummy |
| kenjiArai | 13:1041596c416c | 259 | break; |
| kenjiArai | 13:1041596c416c | 260 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 261 | // Oven Temperature Control |
| kenjiArai | 13:1041596c416c | 262 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 263 | case 'o' : |
| kenjiArai | 13:1041596c416c | 264 | put_r(); |
| kenjiArai | 13:1041596c416c | 265 | PRINTF("Please check Temp. sensor ('t' comand )"); |
| kenjiArai | 13:1041596c416c | 266 | PRINTF(" before enter this test."); |
| kenjiArai | 13:1041596c416c | 267 | put_rn(); |
| kenjiArai | 13:1041596c416c | 268 | PRINTF("Are you sure? Yes, the enter 'y'."); |
| kenjiArai | 13:1041596c416c | 269 | put_rn(); |
| kenjiArai | 13:1041596c416c | 270 | c = GETC(); |
| kenjiArai | 13:1041596c416c | 271 | if (c != 'y'){ break;} |
| kenjiArai | 13:1041596c416c | 272 | PRINTF("If you want to exit, please enter ALT+B."); |
| kenjiArai | 13:1041596c416c | 273 | put_rn(); |
| kenjiArai | 13:1041596c416c | 274 | temp_control(NULL); |
| kenjiArai | 13:1041596c416c | 275 | break; |
| kenjiArai | 13:1041596c416c | 276 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 277 | // help |
| kenjiArai | 13:1041596c416c | 278 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 279 | case '?' : |
| kenjiArai | 13:1041596c416c | 280 | put_r(); |
| kenjiArai | 13:1041596c416c | 281 | msg_hlp(); |
| kenjiArai | 13:1041596c416c | 282 | break; |
| kenjiArai | 13:1041596c416c | 283 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 284 | // no support |
| kenjiArai | 13:1041596c416c | 285 | //------------------------------------------------------------------ |
| kenjiArai | 13:1041596c416c | 286 | default: |
| kenjiArai | 13:1041596c416c | 287 | put_r(); |
| kenjiArai | 13:1041596c416c | 288 | PUTC('?'); |
| kenjiArai | 13:1041596c416c | 289 | put_rn(); |
| kenjiArai | 13:1041596c416c | 290 | break; |
| kenjiArai | 13:1041596c416c | 291 | } |
| kenjiArai | 13:1041596c416c | 292 | } |
| kenjiArai | 13:1041596c416c | 293 | } |
| kenjiArai | 13:1041596c416c | 294 | |
| kenjiArai | 13:1041596c416c | 295 | void msg_hlp (void) |
| kenjiArai | 13:1041596c416c | 296 | { |
| kenjiArai | 13:1041596c416c | 297 | PRINTF(test_msg0); |
| kenjiArai | 13:1041596c416c | 298 | PRINTF(test_msg1); |
| kenjiArai | 13:1041596c416c | 299 | PRINTF(" [Help:'?']"); |
| kenjiArai | 13:1041596c416c | 300 | put_rn(); |
| kenjiArai | 13:1041596c416c | 301 | put_rn(); |
| kenjiArai | 13:1041596c416c | 302 | PRINTF("l - ChecK LED's"); |
| kenjiArai | 13:1041596c416c | 303 | put_rn(); |
| kenjiArai | 13:1041596c416c | 304 | PRINTF("d - Show display (on LCD)"); |
| kenjiArai | 13:1041596c416c | 305 | put_rn(); |
| kenjiArai | 13:1041596c416c | 306 | PRINTF("f - Check frequency Base:50MHz & Unknown Freq."); |
| kenjiArai | 13:1041596c416c | 307 | put_rn(); |
| kenjiArai | 13:1041596c416c | 308 | PRINTF("i - Check Input select function"); |
| kenjiArai | 13:1041596c416c | 309 | put_rn(); |
| kenjiArai | 13:1041596c416c | 310 | PRINTF("g - Check GPS signal"); |
| kenjiArai | 13:1041596c416c | 311 | put_rn(); |
| kenjiArai | 13:1041596c416c | 312 | PRINTF("t - Check Temperature (I2C temp sensor)"); |
| kenjiArai | 13:1041596c416c | 313 | put_rn(); |
| kenjiArai | 13:1041596c416c | 314 | PRINTF("o - Run Oven Temperature Control"); |
| kenjiArai | 13:1041596c416c | 315 | put_rn(); |
| kenjiArai | 13:1041596c416c | 316 | PRINTF("return from 'o' mode, enter ALT+B then the system restart"); |
| kenjiArai | 13:1041596c416c | 317 | put_rn(); |
| kenjiArai | 13:1041596c416c | 318 | } |
| kenjiArai | 13:1041596c416c | 319 | |
| kenjiArai | 13:1041596c416c | 320 | // Put \r\n |
| kenjiArai | 13:1041596c416c | 321 | void put_rn ( void ) |
| kenjiArai | 13:1041596c416c | 322 | { |
| kenjiArai | 13:1041596c416c | 323 | PUTC('\r'); |
| kenjiArai | 13:1041596c416c | 324 | PUTC('\n'); |
| kenjiArai | 13:1041596c416c | 325 | } |
| kenjiArai | 13:1041596c416c | 326 | |
| kenjiArai | 13:1041596c416c | 327 | // Put \r |
| kenjiArai | 13:1041596c416c | 328 | void put_r ( void ) |
| kenjiArai | 13:1041596c416c | 329 | { |
| kenjiArai | 13:1041596c416c | 330 | PUTC('\r'); |
| kenjiArai | 13:1041596c416c | 331 | } |
| kenjiArai | 13:1041596c416c | 332 | |
| kenjiArai | 13:1041596c416c | 333 | // Put ", " |
| kenjiArai | 13:1041596c416c | 334 | void put_lin ( void ) |
| kenjiArai | 13:1041596c416c | 335 | { |
| kenjiArai | 13:1041596c416c | 336 | PRINTF(", "); |
| kenjiArai | 13:1041596c416c | 337 | } |
| kenjiArai | 13:1041596c416c | 338 | |
| kenjiArai | 13:1041596c416c | 339 | // Put space n |
| kenjiArai | 13:1041596c416c | 340 | void put_spc( uint8_t n) |
| kenjiArai | 13:1041596c416c | 341 | { |
| kenjiArai | 13:1041596c416c | 342 | for(; n > 0; n--) { |
| kenjiArai | 13:1041596c416c | 343 | PUTC(' '); |
| kenjiArai | 13:1041596c416c | 344 | } |
| kenjiArai | 13:1041596c416c | 345 | } |
| kenjiArai | 13:1041596c416c | 346 | |
| kenjiArai | 13:1041596c416c | 347 | // Change string -> integer |
| kenjiArai | 13:1041596c416c | 348 | //int xatoi (char **str, unsigned long *res){ |
| kenjiArai | 13:1041596c416c | 349 | int xatoi (char **str, int32_t *res) |
| kenjiArai | 13:1041596c416c | 350 | { |
| kenjiArai | 13:1041596c416c | 351 | unsigned long val; |
| kenjiArai | 13:1041596c416c | 352 | unsigned char c, radix, s = 0; |
| kenjiArai | 13:1041596c416c | 353 | |
| kenjiArai | 13:1041596c416c | 354 | while ((c = **str) == ' ') (*str)++; |
| kenjiArai | 13:1041596c416c | 355 | if (c == '-') { |
| kenjiArai | 13:1041596c416c | 356 | s = 1; |
| kenjiArai | 13:1041596c416c | 357 | c = *(++(*str)); |
| kenjiArai | 13:1041596c416c | 358 | } |
| kenjiArai | 13:1041596c416c | 359 | if (c == '0') { |
| kenjiArai | 13:1041596c416c | 360 | c = *(++(*str)); |
| kenjiArai | 13:1041596c416c | 361 | if (c <= ' ') { |
| kenjiArai | 13:1041596c416c | 362 | *res = 0; |
| kenjiArai | 13:1041596c416c | 363 | return 1; |
| kenjiArai | 13:1041596c416c | 364 | } |
| kenjiArai | 13:1041596c416c | 365 | if (c == 'x') { |
| kenjiArai | 13:1041596c416c | 366 | radix = 16; |
| kenjiArai | 13:1041596c416c | 367 | c = *(++(*str)); |
| kenjiArai | 13:1041596c416c | 368 | } else { |
| kenjiArai | 13:1041596c416c | 369 | if (c == 'b') { |
| kenjiArai | 13:1041596c416c | 370 | radix = 2; |
| kenjiArai | 13:1041596c416c | 371 | c = *(++(*str)); |
| kenjiArai | 13:1041596c416c | 372 | } else { |
| kenjiArai | 13:1041596c416c | 373 | if ((c >= '0')&&(c <= '9')) { |
| kenjiArai | 13:1041596c416c | 374 | radix = 8; |
| kenjiArai | 13:1041596c416c | 375 | } else { |
| kenjiArai | 13:1041596c416c | 376 | return 0; |
| kenjiArai | 13:1041596c416c | 377 | } |
| kenjiArai | 13:1041596c416c | 378 | } |
| kenjiArai | 13:1041596c416c | 379 | } |
| kenjiArai | 13:1041596c416c | 380 | } else { |
| kenjiArai | 13:1041596c416c | 381 | if ((c < '1')||(c > '9')) { |
| kenjiArai | 13:1041596c416c | 382 | return 0; |
| kenjiArai | 13:1041596c416c | 383 | } |
| kenjiArai | 13:1041596c416c | 384 | radix = 10; |
| kenjiArai | 13:1041596c416c | 385 | } |
| kenjiArai | 13:1041596c416c | 386 | val = 0; |
| kenjiArai | 13:1041596c416c | 387 | while (c > ' ') { |
| kenjiArai | 13:1041596c416c | 388 | if (c >= 'a') c -= 0x20; |
| kenjiArai | 13:1041596c416c | 389 | c -= '0'; |
| kenjiArai | 13:1041596c416c | 390 | if (c >= 17) { |
| kenjiArai | 13:1041596c416c | 391 | c -= 7; |
| kenjiArai | 13:1041596c416c | 392 | if (c <= 9) return 0; |
| kenjiArai | 13:1041596c416c | 393 | } |
| kenjiArai | 13:1041596c416c | 394 | if (c >= radix) return 0; |
| kenjiArai | 13:1041596c416c | 395 | val = val * radix + c; |
| kenjiArai | 13:1041596c416c | 396 | c = *(++(*str)); |
| kenjiArai | 13:1041596c416c | 397 | } |
| kenjiArai | 13:1041596c416c | 398 | if (s) val = -val; |
| kenjiArai | 13:1041596c416c | 399 | *res = val; |
| kenjiArai | 13:1041596c416c | 400 | return 1; |
| kenjiArai | 13:1041596c416c | 401 | } |
| kenjiArai | 13:1041596c416c | 402 | |
| kenjiArai | 13:1041596c416c | 403 | // Get key input data |
| kenjiArai | 13:1041596c416c | 404 | void get_line (char *buff, int len) |
| kenjiArai | 13:1041596c416c | 405 | { |
| kenjiArai | 13:1041596c416c | 406 | char c; |
| kenjiArai | 13:1041596c416c | 407 | int idx = 0; |
| kenjiArai | 13:1041596c416c | 408 | |
| kenjiArai | 13:1041596c416c | 409 | for (;;) { |
| kenjiArai | 13:1041596c416c | 410 | c = GETC(); |
| kenjiArai | 13:1041596c416c | 411 | if (c == '\r') { |
| kenjiArai | 13:1041596c416c | 412 | buff[idx++] = c; |
| kenjiArai | 13:1041596c416c | 413 | break; |
| kenjiArai | 13:1041596c416c | 414 | } |
| kenjiArai | 13:1041596c416c | 415 | if ((c == '\b') && idx) { |
| kenjiArai | 13:1041596c416c | 416 | idx--; |
| kenjiArai | 13:1041596c416c | 417 | PUTC(c); |
| kenjiArai | 13:1041596c416c | 418 | PUTC(' '); |
| kenjiArai | 13:1041596c416c | 419 | PUTC(c); |
| kenjiArai | 13:1041596c416c | 420 | } |
| kenjiArai | 13:1041596c416c | 421 | if (((uint8_t)c >= ' ') && (idx < len - 1)) { |
| kenjiArai | 13:1041596c416c | 422 | buff[idx++] = c; |
| kenjiArai | 13:1041596c416c | 423 | PUTC(c); |
| kenjiArai | 13:1041596c416c | 424 | } |
| kenjiArai | 13:1041596c416c | 425 | } |
| kenjiArai | 13:1041596c416c | 426 | buff[idx] = 0; |
| kenjiArai | 13:1041596c416c | 427 | PUTC('\n'); |
| kenjiArai | 13:1041596c416c | 428 | } |
