##// END OF EJS Templates

File last commit:

r203:204
r204:205
Show More
gnss_pvt.cpp
87 lines | 1.4 KiB | text/x-c | CppLexer
/*
* 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;
}