gnss_pvt.cpp
87 lines
| 1.4 KiB
| text/x-c
|
CppLexer
|
r203 | /* | ||
* gnss_pvt.cpp | ||||
* | ||||
* Created on: Mar 3, 2015 | ||||
* Author: aras | ||||
*/ | ||||
#include <gnss.h> | ||||
#include <cassert> | ||||
#include <cctype> | ||||
void te_gnss::scan_baudrate(){ | ||||
baud_idx = 0; | ||||
write_baud(GNSS_PORT,BAUDRATE(baud_idx)); | ||||
push(pfunc_pps); | ||||
pfunc_pps = &scan_baud_func; | ||||
} | ||||
void te_gnss::scan_baud_func(){ | ||||
if(is_gnss_frame_valid()){ | ||||
pop(pfunc_pps); | ||||
scan_baud_finish = true; | ||||
scan_baud_success = true; | ||||
}else{ | ||||
baud_idx++; | ||||
if(baud_idx < BAUD_IDX_MAX){ | ||||
write_baud(GNSS_PORT,BAUDRATE(baud_idx)); | ||||
}else{ | ||||
pop(pfunc_pps); | ||||
scan_baud_finish = true; | ||||
scan_baud_success = false; | ||||
} | ||||
} | ||||
} | ||||
void te_gnss::scan_lock_func(){ | ||||
if(is_locked()){ | ||||
pop(pfunc_pps); | ||||
scan_lock_finish = true; | ||||
scan_lock_success = true; | ||||
}else{ | ||||
lock_idx++; | ||||
if(lock_idx >= LOCK_IDX_MAX){ | ||||
pop(pfunc_pps); | ||||
scan_lock_finish = true; | ||||
scan_lock_success = false; | ||||
} | ||||
} | ||||
} | ||||
void te_gnss::get_pps_data_func(){ | ||||
char* fr = readline(GNSS_PORT); | ||||
if(!is_raw){ | ||||
process_frames(fr);// TODO debe verificar que esté enganchado el receptor | ||||
}else{ | ||||
writeline(RBP_PORT,fr); | ||||
} | ||||
} | ||||
bool te_gnss::is_gnss_frame_valid(){ | ||||
uint8_t idx; | ||||
char* fr = readline(GNSS_PORT); | ||||
uint8_t sz = strlen(fr); | ||||
for(idx=0;idx<sz;idx++){ | ||||
if(!isprint(fr[idx])) | ||||
return false; | ||||
} | ||||
return true; | ||||
} | ||||
bool te_gnss::is_locked() { | ||||
char* fr = readline(GNSS_PORT); | ||||
if(strstr(fr,",A,")){ | ||||
return true; | ||||
} | ||||
return false; | ||||
} | ||||