From 4b2e43a94b92e3f1cc56a77d3a9bbbd8d12fc2de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Mon, 17 Feb 2020 15:16:04 +0100 Subject: [PATCH] rtc_dcf77: minor, add space around operators --- lib/rtc_dcf77.c | 90 ++++++++++++++++++++++++------------------------- lib/rtc_dcf77.h | 6 ++-- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/lib/rtc_dcf77.c b/lib/rtc_dcf77.c index bd56ac4..bda8f26 100644 --- a/lib/rtc_dcf77.c +++ b/lib/rtc_dcf77.c @@ -12,10 +12,10 @@ * along with this program. If not, see . * */ -/** library to get time from a DCF77 module (code) - * @file rtc_dcf77.c +/** library to get time from a DCF77 module + * @file * @author King Kévin - * @date 2016-2017 + * @date 2016-2020 * @note peripherals used: GPIO @ref rtc_dcf77_gpio, timer @ref rtc_dcf77_timer */ @@ -93,7 +93,7 @@ void rtc_dcf77_setup(void) rcc_periph_reset_pulse(RST_TIM(RTC_DCF77_TIMER)); // reset timer state timer_set_mode(TIM(RTC_DCF77_TIMER), TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set timer mode, use undivided timer clock, edge alignment (simple count), and count up timer_set_prescaler(TIM(RTC_DCF77_TIMER), 1); // set prescaler to divide frequency by two, to be able to have a period of 1 kHz (72MHz/2/2^16=549Hz<1kHz) - timer_set_period(TIM(RTC_DCF77_TIMER), rcc_ahb_frequency/2/1000-1); // set period to 1kHz (plus hand tuning) + timer_set_period(TIM(RTC_DCF77_TIMER), rcc_ahb_frequency / 2 / 1000 - 1); // set period to 1kHz (plus hand tuning) timer_clear_flag(TIM(RTC_DCF77_TIMER), TIM_SR_UIF); // clear update event flag timer_update_on_overflow(TIM(RTC_DCF77_TIMER)); // only use counter overflow as UEV source timer_enable_irq(TIM(RTC_DCF77_TIMER), TIM_DIER_UIE); // enable update interrupt for timer @@ -127,67 +127,67 @@ static void rtc_dcf77_decode(void) { rtc_dcf77_time.valid = false; // reset validity - if (rtc_dcf77_frame==0) { // no time received yet + if (rtc_dcf77_frame == 0) { // no time received yet return; } - if (!(rtc_dcf77_frame&((uint64_t)1<<20))) { // start of encoded time should always be 1 + if (!(rtc_dcf77_frame & (1ULL << 20))) { // start of encoded time should always be 1 return; } // check minute parity uint8_t parity = 0; // to check parity - for (uint8_t bit=21; bit<=28; bit++) { - if (rtc_dcf77_frame&((uint64_t)1<>21)&(0x1))+2*((rtc_dcf77_frame>>22)&(0x1))+4*((rtc_dcf77_frame>>23)&(0x1))+8*((rtc_dcf77_frame>>24)&(0x1))+10*((rtc_dcf77_frame>>25)&(0x1))+20*((rtc_dcf77_frame>>26)&(0x1))+40*((rtc_dcf77_frame>>27)&(0x1)); // read minute (00-59) - if (rtc_dcf77_time.minutes>59) { // minutes should not be more than 59 + rtc_dcf77_time.minutes = 1 * ((rtc_dcf77_frame >> 21) & (0x1)) + 2 * ((rtc_dcf77_frame >> 22) & (0x1)) + 4 * ((rtc_dcf77_frame >> 23) & (0x1)) + 8 * ((rtc_dcf77_frame >> 24) & (0x1)) + 10 * ((rtc_dcf77_frame >> 25) & (0x1)) + 20 * ((rtc_dcf77_frame >> 26) & (0x1)) + 40 * ((rtc_dcf77_frame >> 27) & (0x1)); // read minute (00-59) + if (rtc_dcf77_time.minutes > 59) { // minutes should not be more than 59 return; } // check hour parity parity = 0; - for (uint8_t bit=29; bit<=35; bit++) { - if (rtc_dcf77_frame&((uint64_t)1<>29)&(0x1))+2*((rtc_dcf77_frame>>30)&(0x1))+4*((rtc_dcf77_frame>>31)&(0x1))+8*((rtc_dcf77_frame>>32)&(0x1))+10*((rtc_dcf77_frame>>33)&(0x1))+20*((rtc_dcf77_frame>>34)&(0x1)); // read hour (00-23) - if (rtc_dcf77_time.hours>23) { // hours should not be more than 23 + rtc_dcf77_time.hours = 1 * ((rtc_dcf77_frame >> 29) & (0x1)) + 2 * ((rtc_dcf77_frame >> 30) & (0x1)) + 4 * ((rtc_dcf77_frame >> 31) & (0x1)) + 8 * ((rtc_dcf77_frame >> 32) & (0x1)) + 10 * ((rtc_dcf77_frame >> 33) & (0x1)) + 20 * ((rtc_dcf77_frame >> 34) & (0x1)); // read hour (00-23) + if (rtc_dcf77_time.hours > 23) { // hours should not be more than 23 return; } // check date parity parity = 0; - for (uint8_t bit=36; bit<=58; bit++) { - if (rtc_dcf77_frame&((uint64_t)1<>36)&(0x1))+2*((rtc_dcf77_frame>>37)&(0x1))+4*((rtc_dcf77_frame>>38)&(0x1))+8*((rtc_dcf77_frame>>39)&(0x1))+10*((rtc_dcf77_frame>>40)&(0x1))+20*((rtc_dcf77_frame>>41)&(0x1)); // read day of the month (01-31) - if (rtc_dcf77_time.day==0 || rtc_dcf77_time.day>31) { // day of the month should be 1-31 + rtc_dcf77_time.day = 1 * ((rtc_dcf77_frame >> 36) & (0x1)) + 2 * ((rtc_dcf77_frame >> 37) & (0x1)) + 4 * ((rtc_dcf77_frame >> 38) & (0x1)) + 8 * ((rtc_dcf77_frame >> 39) & (0x1)) + 10 * ((rtc_dcf77_frame >> 40) & (0x1)) + 20 * ((rtc_dcf77_frame >> 41) & (0x1)); // read day of the month (01-31) + if (rtc_dcf77_time.day == 0 || rtc_dcf77_time.day > 31) { // day of the month should be 1-31 return; } - rtc_dcf77_time.weekday = 1*((rtc_dcf77_frame>>42)&(0x1))+2*((rtc_dcf77_frame>>43)&(0x1))+4*((rtc_dcf77_frame>>44)&(0x1)); // read day of the week (1=Monday - 7=Sunday) - if (rtc_dcf77_time.weekday==0 || rtc_dcf77_time.weekday>7) { // day of the week should be 1-7 + rtc_dcf77_time.weekday = 1 * ((rtc_dcf77_frame >> 42) & (0x1)) + 2*((rtc_dcf77_frame >> 43) & (0x1)) + 4 * ((rtc_dcf77_frame >> 44) & (0x1)); // read day of the week (1=Monday - 7=Sunday) + if (rtc_dcf77_time.weekday == 0 || rtc_dcf77_time.weekday > 7) { // day of the week should be 1-7 return; } - rtc_dcf77_time.month = 1*((rtc_dcf77_frame>>45)&(0x1))+2*((rtc_dcf77_frame>>46)&(0x1))+4*((rtc_dcf77_frame>>47)&(0x1))+8*((rtc_dcf77_frame>>48)&(0x1))+10*((rtc_dcf77_frame>>49)&(0x1)); // read month of the year (01-12) - if (rtc_dcf77_time.month==0 || rtc_dcf77_time.month>12) { // month of the year should be 1-12 + rtc_dcf77_time.month = 1 * ((rtc_dcf77_frame >> 45) & (0x1)) + 2 * ((rtc_dcf77_frame >> 46) & (0x1)) + 4 * ((rtc_dcf77_frame >> 47) & (0x1)) + 8*((rtc_dcf77_frame >> 48) & (0x1)) + 10 * ((rtc_dcf77_frame >> 49) & (0x1)); // read month of the year (01-12) + if (rtc_dcf77_time.month == 0 || rtc_dcf77_time.month > 12) { // month of the year should be 1-12 return; } - rtc_dcf77_time.year = 1*((rtc_dcf77_frame>>50)&(0x1))+2*((rtc_dcf77_frame>>51)&(0x1))+4*((rtc_dcf77_frame>>52)&(0x1))+8*((rtc_dcf77_frame>>53)&(0x1))+10*((rtc_dcf77_frame>>54)&(0x1))+20*((rtc_dcf77_frame>>55)&(0x1))+40*((rtc_dcf77_frame>>56)&(0x1))+80*((rtc_dcf77_frame>>57)&(0x1)); // read year of the century (00-99) - if (rtc_dcf77_time.year>99) { // year should be <100 + rtc_dcf77_time.year = 1 * ((rtc_dcf77_frame >> 50) & (0x1)) + 2 * ((rtc_dcf77_frame >> 51) & (0x1)) + 4 * ((rtc_dcf77_frame >> 52) & (0x1)) + 8 * ((rtc_dcf77_frame >> 53) & (0x1)) + 10 * ((rtc_dcf77_frame >> 54) & (0x1)) + 20 * ((rtc_dcf77_frame >> 55) & (0x1)) + 40 * ((rtc_dcf77_frame >> 56) & (0x1)) + 80 * ((rtc_dcf77_frame >> 57) & (0x1)); // read year of the century (00-99) + if (rtc_dcf77_time.year > 99) { // year should be <100 return; } @@ -203,25 +203,25 @@ static void rtc_dcf77_phase_detector(void) { uint8_t integral_i = 0; // which bin has the highest integral/correlation int16_t integral_max = 0; // maximum integral value found - for (uint8_t start=0; start<(rtc_dcf77_phase_locked ? 10 : LENGTH(rtc_dcf77_bins)); start++) { // which bin has been used to start the convolution (only use +/- 15 bits of previous phase if locked) + for (uint8_t start = 0; start < (rtc_dcf77_phase_locked ? 10 : LENGTH(rtc_dcf77_bins)); start++) { // which bin has been used to start the convolution (only use +/- 15 bits of previous phase if locked) int16_t integral = 0; // value of the integral - for (uint8_t bin=0; binintegral_max) { // we found a better correlation result integral_max = integral; // save new best result - integral_i = (start+rtc_dcf77_phase+LENGTH(rtc_dcf77_bins)-5)%LENGTH(rtc_dcf77_bins); // start new best phase start + integral_i = (start + rtc_dcf77_phase + LENGTH(rtc_dcf77_bins) - 5) % LENGTH(rtc_dcf77_bins); // start new best phase start } } - if ((int16_t)(integral_max+40)>rtc_dcf77_phase_max) { // only save new phase if it is better than the last one, with some margin to compensate for the drift (perfect correlation = 100, worst correlation = -800) + if ((int16_t)(integral_max + 40) > rtc_dcf77_phase_max) { // only save new phase if it is better than the last one, with some margin to compensate for the drift (perfect correlation = 100, worst correlation = -800) rtc_dcf77_phase_max = integral_max; // save best phase value rtc_dcf77_phase = integral_i; // save bin index corresponding to start of the phase } @@ -242,20 +242,20 @@ void TIM_ISR(RTC_DCF77_TIMER)(void) bin_state++; // remember we filled the bin if (bin_state>=10) { // bin has 10x1 ms samples, it is now full - bin_i = (bin_i+1)%LENGTH(rtc_dcf77_bins); // go to next bin + bin_i = (bin_i + 1) % LENGTH(rtc_dcf77_bins); // go to next bin rtc_dcf77_bins[bin_i] = 0; // restart bin bin_state = 0; // restart collecting } - if (0==bin_i && 0==bin_state) { // we have 1 s of samples - if (bit_i<59) { + if (0 == bin_i && 0 == bin_state) { // we have 1 s of samples + if (bit_i < 59) { rtc_dcf77_phase_detector(); // detect phase in signal // check modulation of first 100 ms uint16_t modulation = 0; - for (uint8_t bin=0; bin<10; bin++) { - modulation += rtc_dcf77_bins[(rtc_dcf77_phase+bin)%LENGTH(rtc_dcf77_bins)]; + for (uint8_t bin = 0; bin < 10; bin++) { + modulation += rtc_dcf77_bins[(rtc_dcf77_phase + bin) % LENGTH(rtc_dcf77_bins)]; } - if (modulation<50) { // signal is not modulated, it might be the 60th pause bit + if (modulation < 50) { // signal is not modulated, it might be the 60th pause bit bit_i = 0; // restart frame rtc_dcf77_frame = 0; // restart frame rtc_dcf77_phase_max = INT16_MIN; // restart searching for phase @@ -263,27 +263,27 @@ void TIM_ISR(RTC_DCF77_TIMER)(void) } else { // modulation detected // check modulation of next 100 ms modulation = 0; - for (uint8_t bin=10; bin<20; bin++) { - modulation += rtc_dcf77_bins[(rtc_dcf77_phase+bin)%LENGTH(rtc_dcf77_bins)]; + for (uint8_t bin = 10; bin < 20; bin++) { + modulation += rtc_dcf77_bins[(rtc_dcf77_phase + bin) % LENGTH(rtc_dcf77_bins)]; } - if (modulation<50) { // it's a 0 + if (modulation < 50) { // it's a 0 // bit is already cleared } else { // it's a 1 - rtc_dcf77_frame |= (1ULL<=RTC_DCF77_INVALID_MAX) { // too many invalid decoding + if (rtc_dcf77_invalid >= RTC_DCF77_INVALID_MAX) { // too many invalid decoding rtc_dcf77_off(); // switch off receiver so it can re-tune } bit_i = 0; // restart frame diff --git a/lib/rtc_dcf77.h b/lib/rtc_dcf77.h index d069794..c12fe80 100644 --- a/lib/rtc_dcf77.h +++ b/lib/rtc_dcf77.h @@ -12,10 +12,10 @@ * along with this program. If not, see . * */ -/** library to get time from a DCF77 module (API) - * @file rtc_dcf77.h +/** library to get time from a DCF77 module + * @file * @author King Kévin - * @date 2016-2017 + * @date 2016-2020 * @note peripherals used: GPIO @ref rtc_dcf77_gpio, timer @ref rtc_dcf77_timer */ #pragma once