Index: trunk/firmware/sources/timeEngined/libte/fixpoint.h =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/fixpoint.h b/trunk/firmware/sources/timeEngined/libte/fixpoint.h new file mode 10644 --- /dev/null (revision 0) +++ b/trunk/firmware/sources/timeEngined/libte/fixpoint.h (revision 197) @@ -0,0 +1,101 @@ +/* + * fixpoint.h + * + * Created on: Feb 24, 2015 + * Author: aras + */ + +#ifndef FIXPOINT_H_ +#define FIXPOINT_H_ + +#include +#include +#include +#include + +typedef fixpoint fix19_12; +#define N43_20 fixpoint +#define N9_23 fixpoint + +#define FAC64 20 +#define FAC32 12 + +template +class fixpoint { + +private: + uint8_t factor; + T value; + +public: + fixpoint(); + fixpoint(T num); + + void set_from_float(float num){value=T(num*(1< operator-(const fixpoint &num1, const fixpoint &num2){ + return fixpoint(num1.value-num2.value); + } + friend inline fixpoint operator+(const fixpoint &num1, const fixpoint &num2){ + return fixpoint(num1.value+num2.value); + } + friend inline fixpoint operator*(const fixpoint &num1, const fixpoint &num2){ + int64_t aux = (int64_t(num1.value)*int64_t(num2.value))>>num1.factor; + return fixpoint(aux); + } + friend inline fixpoint operator/(const fixpoint &num1, const fixpoint &num2){ + int64_t aux = (int64_t(num1.value)<(aux/num2.value); + } + + + inline fixpoint power(); + inline fixpoint sqroot(); +}; + +template +fixpoint::fixpoint(){ + if(typeid(T)==typeid(int32_t)){ + factor=FAC32; + } + else{ + factor=FAC64; + } + value=0; +} + +template +fixpoint::fixpoint(T num){ + if(typeid(T)==typeid(int32_t)){ + factor=FAC32; + } + else{ + factor=FAC64; + } + value=num; +} + + +template +float fixpoint::tofloat(){ + return float(value)/(1< +fixpoint fixpoint::power(){ + int64_t aux = (int64_t(value)*int64_t(value))>>factor; + return fixpoint(aux); +} + +template +fixpoint fixpoint::sqroot(){ + T aux = sqrt(value); + return fixpoint(aux<<(factor/2)); +} + + + +#endif /* FIXPOINT_H_ */ Index: trunk/firmware/sources/timeEngined/libte/gnss.cpp =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/gnss.cpp b/trunk/firmware/sources/timeEngined/libte/gnss.cpp --- a/trunk/firmware/sources/timeEngined/libte/gnss.cpp (revision 196) +++ b/trunk/firmware/sources/timeEngined/libte/gnss.cpp (revision 197) @@ -9,27 +9,25 @@ namespace te_gnss { - bool configure(gnss_config_struct* cs){ + bool te_gnss_configure(gnss_config_struct &gcs){ return true; } - bool activate(){ + bool te_gnss_activate(){ return true; } - bool deactivate(){ + bool te_gnss_deactivate(){ return true; } - bool sync_pps(){ + bool te_gnss_sync_pps(){ return true; } - bool get_time_info(gnss_precise_time* pt){ - return true; - } - bool is_locked(){ + + bool te_gnss_is_locked(){ return true; } } Index: trunk/firmware/sources/timeEngined/libte/gnss.h =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/gnss.h b/trunk/firmware/sources/timeEngined/libte/gnss.h --- a/trunk/firmware/sources/timeEngined/libte/gnss.h (revision 196) +++ b/trunk/firmware/sources/timeEngined/libte/gnss.h (revision 197) @@ -10,19 +10,30 @@ #include "te_structs.h" -namespace te_gnss { + //pin ports to GNSS #define PPS 2 /*!< PE4 AVR <> 2 Arduino */ #define ENB 5 /*!< PE3 AVR <> 5 Arduino */ #define RX0_GNSS RX0 #define TX0_GNSS TX0 PE1 - bool configure(gnss_config_struct*); - bool activate(); - bool deactivate(); - bool sync_pps(); - bool get_time_info(gnss_precise_time*); - bool is_locked(); + bool te_gnss_configure(gnss_config_struct &gcs); + bool te_gnss_activate(); + bool te_gnss_deactivate(); + bool te_gnss_sync_pps(); -} + void te_gnss_set_baudrate(uint16_t baud); + void te_gnss_scan_baudrate(); + void te_gnss_scan_baud_func(); + + + void te_gnss_wait_to_be_locked(); + void te_gnss_scan_lock_func(); + bool te_gnss_is_locked(); + + void te_gnss_get_pps_data(); + void te_gnss_get_pps_data_funct(); + + void te_gnss_set_position(N9_22); + #endif /* LIBTE_GNSS_H_ */ Index: trunk/firmware/sources/timeEngined/libte/rtc1308.cpp =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/rtc1308.cpp b/trunk/firmware/sources/timeEngined/libte/rtc1308.cpp --- a/trunk/firmware/sources/timeEngined/libte/rtc1308.cpp (revision 196) +++ b/trunk/firmware/sources/timeEngined/libte/rtc1308.cpp (revision 197) @@ -8,17 +8,18 @@ #include #include -namespace te_rtc{ /*! * \fn initialization * \brief Inicializacion del modulo que controlara al RTC DS1308. */ -void initialization(void) { +bool te_rtc_initialization(void) { pinMode(CLKIN,OUTPUT); attachInterrupt(PPS,ISR_gnss_pps, RISING); } + + /*! * \fn configure @@ -26,7 +27,7 @@ * \param rtc estructura que contien informacion de configuracion. * \see rtc_config_struct */ -void configure(rtc_config_struct &rtc) { +bool te_rtc_configure(rtc_config_struct &rtc) { uint8_t *ctl_byte = (uint8_t*)&rtc.ctl_byte; uint8_t *clk_halt = (uint8_t*)&rtc.clk_halt; @@ -42,7 +43,21 @@ Wire.write(*ctl_byte); //Wire.write(1< 0) && ( regaddr < DS1308_RAM_REGS ) ) { + while(cnt > 0 ) { Wire.beginTransmission(DS1308_CTRL_ID); - Wire.write(regaddr+DS1308_RAM_BASE); + Wire.write(regaddr); Wire.endTransmission(); Wire.requestFrom((uint8_t)DS1308_CTRL_ID, cnt); - while(Wire.available() && (cnt > 0) && (regaddr < DS1308_RAM_REGS) ) { + while(Wire.available() && (cnt > 0) ) { pbuf[nread] = Wire.read(); nread++; cnt--; regaddr++; } /* while */ @@ -118,29 +121,7 @@ return (nread); } -/*! - * \fn write_ram - * \brief Escribe un valor en la memoria RAM interna del RTC DS1308, en la - * direccion especificada. - * \param addr direccion relativa a la RAM (0 es la primera) del registro - * en DS1308. - * \param val valor que se desea escribir en el registro. - * \return estatus - * 0 success - * 2 error: address send, nack received - * 3 error: data send, nack received - * 4 other twi error - */ -uint8_t write_ram(uint8_t regaddr, uint8_t val) { - uint8_t rc=0; - if (regaddr >= DS1308_RAM_REGS) return (DS1308_RAM_REGS); // 0 thru 51 - Wire.beginTransmission(DS1308_CTRL_ID); - Wire.write(regaddr+DS1308_RAM_BASE); - Wire.write(val); - rc = Wire.endTransmission(); - return(rc); -} /*! * \fn write_ram @@ -156,22 +137,19 @@ * 3 error: data send, nack received * 4 other twi error */ -uint8_t write_ram(uint8_t regaddr, const uint8_t *pbuf,uint8_t cnt) { - +uint8_t te_rtc_write_reg(uint8_t regaddr,uint8_t *pbuf,uint8_t cnt) { uint8_t nbytes, rc=0; - if (regaddr >= DS1308_RAM_REGS) return (DS1308_RAM_REGS); // 0 thru 55 - if (regaddr+cnt > DS1308_RAM_REGS) cnt = DS1308_RAM_REGS-regaddr; while (cnt > 0) { - nbytes = min(cnt, BUFFER_LENGTH-1); + nbytes = cnt; Wire.beginTransmission(DS1308_CTRL_ID); - Wire.write(regaddr+DS1308_RAM_BASE); + Wire.write(regaddr); Wire.write((uint8_t*)pbuf, nbytes); rc = Wire.endTransmission(); cnt -=nbytes; regaddr+=nbytes; pbuf +=nbytes; } - return(rc); + return rc; } @@ -180,5 +158,6 @@ return val + 6 * (val / 10); } - -}// end namespace rtc +inline uint8_t bcd2dec(uint8_t val){ + return (val>>4)*10 + (val&0x0f); +} Index: trunk/firmware/sources/timeEngined/libte/rtc1308.h =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/rtc1308.h b/trunk/firmware/sources/timeEngined/libte/rtc1308.h --- a/trunk/firmware/sources/timeEngined/libte/rtc1308.h (revision 196) +++ b/trunk/firmware/sources/timeEngined/libte/rtc1308.h (revision 197) @@ -15,8 +15,6 @@ #include extern void ISR_gnss_pps(void); - -namespace te_rtc{ #define DS1308_CTRL_ID 0x68 #define DS1308_RAM_BASE 0x08 /*!< Direccion base de la memoria RAM */ @@ -46,20 +44,21 @@ #define CLKIN 38 /*!< internal PPS output PD7 AVR <> 38 ARDUINO MEGA */ #define PPS 0 /*|< GNSS receptor PPS signal interrupt int0, port 2 (Arduino i/o), pe4 (avr i/o) */ +uint8_t te_rtc_write_reg(uint8_t regaddr, uint8_t *ptrvalues, uint8_t nregs); +uint8_t te_rtc_read_reg(uint8_t regaddr, uint8_t *ptrvalues, uint8_t nregs); -void initialization(void); -void configure(rtc_config_struct &rtc); -void set_time(tmElements_t &tm); -void activate_pps(void); -uint8_t read_ram(uint8_t regaddr, uint8_t *pbuf, uint8_t cnt); -uint8_t write_ram(uint8_t regaddr, uint8_t val); -uint8_t write_ram(uint8_t regaddr, const uint8_t *pbuf,uint8_t cnt); - -inline uint8_t dec2bcd(uint8_t val); +bool te_rtc_initialization(void); +bool te_rtc_configure(rtc_config_struct &rtc); +bool te_rtc_activate_pps(bool actv); +bool te_rtc_set_date_time(gnss_precise_time >); +bool te_rtc_read_date_time(gnss_precise_time >); -} + +// TODO a utils +inline uint8_t dec2bcd(uint8_t val); +inline uint8_t bcd2dec(uint8_t val); #endif /* RTC1308_H_ */ Index: trunk/firmware/sources/timeEngined/libte/te2saig.h =================================================================== diff --git a/trunk/firmware/sources/timeEngined/libte/te2saig.h b/trunk/firmware/sources/timeEngined/libte/te2saig.h --- a/trunk/firmware/sources/timeEngined/libte/te2saig.h (revision 196) +++ b/trunk/firmware/sources/timeEngined/libte/te2saig.h (revision 197) @@ -15,6 +15,6 @@ //pin ports to system #define LOCK 42 /*!< GNSS receptor LOCK signal PL7 AVR <> 42 ARDUINO MEGA */ - +// #endif /* TE2SAIG_H_ */