diff --git a/hardware/hardware-revision-b-errata.jpg b/hardware/hardware-revision-b-errata.jpg new file mode 100644 index 0000000..23009ce Binary files /dev/null and b/hardware/hardware-revision-b-errata.jpg differ diff --git a/include/main.h b/include/main.h index ed77780..f7879ea 100644 --- a/include/main.h +++ b/include/main.h @@ -4,7 +4,7 @@ #include "aprs/ax25.h" #define SW_VER "DE07" -#define SW_DATE "27032020" +#define SW_DATE "04042020" #define SYSTICK_TICKS_PER_SECONDS 100 #define SYSTICK_TICKS_PERIOD 10 @@ -30,9 +30,6 @@ extern char after_tx_lock; extern unsigned short rx10m, tx10m, digi10m, kiss10m; uint16_t main_get_adc_sample(void); -//void main_wx_decremenet_counter(void); -//void main_packets_tx_decremenet_counter(void); -//void main_two_second_pool_decrement_counter(void); inline void main_wait_for_tx_complete(void) { while(main_afsk.sending == 1); diff --git a/include/rte_wx.h b/include/rte_wx.h index 3afff61..db2eb2f 100644 --- a/include/rte_wx.h +++ b/include/rte_wx.h @@ -18,6 +18,10 @@ #define PRESSURE_AVERAGE_LN 4 +#define RTE_WX_MEASUREMENT_WIND 460 +#define RTE_WX_MEASUREMENT_TEMPERATURE 100 +#define RTE_WX_MEASUREMENT_PRESSUERE 300 + extern float rte_wx_temperature_dallas, rte_wx_temperature_dallas_valid; extern float rte_wx_temperature_dalls_slew_rate; extern float rte_wx_temperature_average_dallas_valid; @@ -60,6 +64,7 @@ extern "C" #endif void rte_wx_init(void); +void rte_wx_update_last_measuremenet_timers(uint16_t measurement_type); #ifdef __cplusplus } diff --git a/src/main.c b/src/main.c index 9c2c714..a91cd28 100644 --- a/src/main.c +++ b/src/main.c @@ -40,6 +40,7 @@ #include "drivers/tx20.h" #include "drivers/analog_anemometer.h" #include "aprs/wx.h" +#include "drivers/gpio_conf.h" #ifdef _UMB_MASTER #include "umb_master/umb_master.h" @@ -200,7 +201,6 @@ main(int argc, char* argv[]) main_own_path_ln = ConfigPath(main_own_path); #ifdef _METEO - // initialize i2c controller i2cConfigure(); #endif @@ -213,6 +213,9 @@ main(int argc, char* argv[]) ax25_init(&main_ax25, &main_afsk, 0, 0x00); DA_Init(); + // initialize Watchdog output + Configure_GPIO(GPIOA,12,GPPP_OUTPUT_50MHZ); + // initialize variables & arrays in rte_wx rte_wx_init(); @@ -512,6 +515,8 @@ main(int argc, char* argv[]) wx_pool_anemometer(); main_ten_second_pool_timer = 10000; + + GPIOA->ODR = (GPIOA->ODR ^ GPIO_Pin_12); } #ifdef _METEO diff --git a/src/rte_wx.c b/src/rte_wx.c index 9c74f53..4768d8e 100644 --- a/src/rte_wx.c +++ b/src/rte_wx.c @@ -7,6 +7,8 @@ #include +#include +#include "main.h" float rte_wx_temperature_dallas = 0.0f, rte_wx_temperature_dallas_valid = 0.0f; float rte_wx_temperature_dalls_slew_rate = 0.0f; @@ -56,3 +58,11 @@ void rte_wx_init(void) { rte_wx_pressure_history[i] = 0.0f; } } + +void rte_wx_update_last_measuremenet_timers(uint16_t parameter_type) { + if (parameter_type == RTE_WX_MEASUREMENT_WIND) + wx_last_good_wind_time = master_time; + else if (parameter_type == RTE_WX_MEASUREMENT_TEMPERATURE) + wx_last_good_temperature_time = master_time; + else; +} diff --git a/system/include/umb_master/umb_context_t.h b/system/include/umb_master/umb_context_t.h index 343f724..a01778d 100644 --- a/system/include/umb_master/umb_context_t.h +++ b/system/include/umb_master/umb_context_t.h @@ -32,7 +32,9 @@ typedef struct umb_context_t { uint16_t channel_numbers[UMB_CHANNELS_STORAGE_CAPAC]; - uint8_t current_channel; + uint8_t channel_number_it; + + uint16_t current_channel; } umb_context_t; diff --git a/system/src/drivers/serial.c b/system/src/drivers/serial.c index bd7455e..3b506df 100644 --- a/system/src/drivers/serial.c +++ b/system/src/drivers/serial.c @@ -71,9 +71,9 @@ void srl_init(void) { srl_tx_buf_ln = TX_BUFFER_LN; #endif - Configure_GPIO(GPIOA,11,AFPP_OUTPUT_2MHZ); // CTS - Configure_GPIO(GPIOA,12,AFPP_OUTPUT_2MHZ); // RTS - Configure_GPIO(GPIOA,8,AFPP_OUTPUT_2MHZ); // CLK + //Configure_GPIO(GPIOA,11,AFPP_OUTPUT_2MHZ); // CTS + //Configure_GPIO(GPIOA,12,GPPP_OUTPUT_2MHZ); // RTS + //Configure_GPIO(GPIOA,8,AFPP_OUTPUT_2MHZ); // CLK Configure_GPIO(GPIOA,10,PUD_INPUT); // RX Configure_GPIO(GPIOA,9,AFPP_OUTPUT_2MHZ); // TX diff --git a/system/src/umb_master/umb_channel_pool.c b/system/src/umb_master/umb_channel_pool.c index f9df73f..e7b572e 100644 --- a/system/src/umb_master/umb_channel_pool.c +++ b/system/src/umb_master/umb_channel_pool.c @@ -10,16 +10,17 @@ void umb_channel_pool(umb_frame_t *frame, umb_context_t *ctx) { #if defined(_UMB_MASTER) - if (ctx->current_channel > UMB_CHANNELS_STORAGE_CAPAC) - ctx->current_channel = 0; + if (ctx->channel_number_it > UMB_CHANNELS_STORAGE_CAPAC) + ctx->channel_number_it = 0; - uint16_t curr_chn = ctx->channel_numbers[ctx->current_channel]; + uint16_t curr_chn = ctx->channel_numbers[ctx->channel_number_it]; + ctx->current_channel = curr_chn; if (curr_chn != 0xFFFFu) { umb_0x23_offline_data_request(frame, ctx, curr_chn); } - ctx->current_channel++; + ctx->channel_number_it++; #endif } diff --git a/system/src/umb_master/umb_master.c b/system/src/umb_master/umb_master.c index 1a536fa..1f96dd5 100644 --- a/system/src/umb_master/umb_master.c +++ b/system/src/umb_master/umb_master.c @@ -280,6 +280,8 @@ umb_retval_t umb_pooling_handler(umb_context_t* ctx, umb_call_reason_t r, uint32 */ umb_retval_t umb_master_callback(umb_frame_t* frame, umb_context_t* ctx) { + umb_retval_t ret_fron_callback = UMB_UNINITIALIZED; + // check if this is a response to routine which was queried recently if (frame->command_id != ctx->current_routine) { ctx->state = UMB_STATUS_ERROR_WRONG_RID_IN_RESPONSE; @@ -290,11 +292,16 @@ umb_retval_t umb_master_callback(umb_frame_t* frame, umb_context_t* ctx) { // looking for a callback to this response switch (frame->command_id) { case 0x23: { - umb_0x23_offline_data_callback(frame, ctx); + ret_fron_callback = umb_0x23_offline_data_callback(frame, ctx); + + if (ret_fron_callback == UMB_OK) { + rte_wx_update_last_measuremenet_timers(ctx->current_channel); + } + break; } case 0x26: { - umb_0x26_status_callback(frame, ctx); + ret_fron_callback = umb_0x26_status_callback(frame, ctx); break; } }