Line 180... |
Line 180... |
180 |
if(i >= sizeof(rxfifo.buff)) |
180 |
if(i >= sizeof(rxfifo.buff)) |
181 |
i = 0; |
181 |
i = 0; |
182 |
rxfifo.idx_r = i; |
182 |
rxfifo.idx_r = i; |
183 |
|
183 |
|
184 |
return d; |
184 |
return d; |
185 |
} |
185 |
} |
186 |
|
- |
|
187 |
|
- |
|
188 |
/* Put a character to transmit */ |
- |
|
189 |
static |
- |
|
190 |
void uart_put (uint8_t d) |
- |
|
191 |
{ |
- |
|
192 |
while (bit_is_clear(UCSR0A, UDRE0)); |
- |
|
193 |
UDR0 = d; |
- |
|
194 |
} |
- |
|
195 |
|
- |
|
196 |
|
- |
|
197 |
/* USART0 RXC interrupt */ |
186 |
/* USART0 RXC interrupt */ |
198 |
ISR(USART_RX_vect) |
187 |
ISR(USART_RX_vect) |
199 |
{ |
188 |
{ |
200 |
uint8_t d, n, i; |
189 |
uint8_t d, n, i; |
201 |
|
190 |
|
Line 270... |
Line 259... |
270 |
c = pgm_read_byte(str2++); |
259 |
c = pgm_read_byte(str2++); |
271 |
} while (c && c == *str1++); |
260 |
} while (c && c == *str1++); |
272 |
return c; |
261 |
return c; |
273 |
} |
262 |
} |
274 |
|
263 |
|
275 |
|
- |
|
276 |
|
- |
|
277 |
/* Initialize GPS module (depends on each product) */ |
- |
|
278 |
static |
- |
|
279 |
void gp_init (void) |
- |
|
280 |
{ |
- |
|
281 |
const prog_char *s = |
- |
|
282 |
PSTR("$PSRF106,21*0F\r\n"); // Select datum of WGS84 (for EM-406A) |
- |
|
283 |
char c; |
- |
|
284 |
|
- |
|
285 |
while ((c = pgm_read_byte(s++)) != 0) uart_put(c); |
- |
|
286 |
} |
- |
|
287 |
|
- |
|
288 |
|
- |
|
289 |
|
- |
|
290 |
/* Get a column item */ |
264 |
/* Get a column item */ |
291 |
static |
265 |
static |
292 |
BYTE* gp_col ( /* Returns pointer to the item (returns a NULL when not found) */ |
266 |
BYTE* gp_col ( /* Returns pointer to the item (returns a NULL when not found) */ |
293 |
const BYTE* buf, /* Pointer to the sentence */ |
267 |
const BYTE* buf, /* Pointer to the sentence */ |
294 |
BYTE col /* Column number (0 is the 1st item) */ |
268 |
BYTE col /* Column number (0 is the 1st item) */ |
Line 363... |
Line 337... |
363 |
if ((Stat & 1) || (disk_status(0) & STA_NODISK)) Timer = 255; |
337 |
if ((Stat & 1) || (disk_status(0) & STA_NODISK)) Timer = 255; |
364 |
} while (Timer); |
338 |
} while (Timer); |
365 |
|
339 |
|
366 |
beep(5, 1); // Single beep. Start to get current time. |
340 |
beep(5, 1); // Single beep. Start to get current time. |
367 |
uart_init(); |
341 |
uart_init(); |
368 |
gp_init(); // Initialize GPS module to let output data in NMEA-0183 format. |
- |
|
369 |
do { // Wait for valid RMC sentence. |
342 |
do { // Wait for valid RMC sentence. |
370 |
b = get_line(); |
343 |
b = get_line(); |
371 |
if (!b) break; |
344 |
if (!b) break; |
372 |
if (gp_comp(Buff, PSTR("$GPRMC"))) continue; |
345 |
if (gp_comp(Buff, PSTR("$GPRMC"))) continue; |
373 |
p = gp_col(Buff,2); |
346 |
p = gp_col(Buff,2); |
Line 394... |
Line 367... |
394 |
// || !gp_comp(Buff, PSTR("$GPZDA")) |
367 |
// || !gp_comp(Buff, PSTR("$GPZDA")) |
395 |
// || !gp_comp(Buff, PSTR("$GPVTG")) |
368 |
// || !gp_comp(Buff, PSTR("$GPVTG")) |
396 |
) |
369 |
) |
397 |
{ |
370 |
{ |
398 |
if (f_write(&file1, Buff, b, &s) || b != s) { err = 5; break; }; |
371 |
if (f_write(&file1, Buff, b, &s) || b != s) { err = 5; break; }; |
399 |
itoa(battery,&Value1,10); |
372 |
/* itoa(battery,&Value1,10); // convert binary number to character |
400 |
itoa(intensity,&Value2,10); |
373 |
itoa(intensity,&Value2,10); |
401 |
strcpy(&Buff[0], Value1); |
374 |
strcpy(&Buff[0], Value1); |
402 |
strcpy_P(&Buff[4], PSTR(",")); |
375 |
strcpy_P(&Buff[4], PSTR(",")); |
403 |
strcpy(&Buff[5], Value2); |
376 |
strcpy(&Buff[5], Value2); |
404 |
strcpy_P(&Buff[9], PSTR("\r\n")); |
377 |
strcpy_P(&Buff[9], PSTR("\r\n")); |
405 |
if (f_write(&file1, Buff, 11, &s) || 11 != s) { err = 5; break; }; |
378 |
if (f_write(&file1, Buff, 11, &s) || 11 != s) { err = 8; break; }; |
406 |
} |
379 |
*/ } |
407 |
if ((Stat & 4) == 0) continue; |
380 |
if ((Stat & 4) == 0) continue; |
408 |
if (f_sync(&file1)) { err = 6; break; };// Synchronize the file in interval of 300 sec. |
381 |
if (f_sync(&file1)) { err = 6; break; };// Synchronize the file in interval of 300 sec. |
409 |
cli(); Stat &= 0xFB; sei(); // Clear sync request |
382 |
cli(); Stat &= 0xFB; sei(); // Clear sync request |
410 |
} |
383 |
} |
411 |
if (err) break; |
384 |
if (err) break; |