From 20011c92dfbd5f8db440302388823a4ccc72b943 Mon Sep 17 00:00:00 2001 From: eddyem Date: Fri, 20 Sep 2019 18:02:32 +0300 Subject: [PATCH] fix problem with LIDAR --- F1-nolib/chronometer/GPS.c | 17 ++++---- F1-nolib/chronometer/Makefile | 2 - F1-nolib/chronometer/adc.c | 2 +- F1-nolib/chronometer/chrono.bin | Bin 15860 -> 15944 bytes F1-nolib/chronometer/flash.h | 3 ++ F1-nolib/chronometer/hardware.c | 4 +- F1-nolib/chronometer/hardware.h | 12 +++--- F1-nolib/chronometer/lidar.c | 13 ++++++- F1-nolib/chronometer/main.c | 18 ++++----- F1-nolib/chronometer/str.c | 67 +++++++++++++++++++++++++------- F1-nolib/chronometer/str.h | 1 + F1-nolib/chronometer/time.c | 2 + F1-nolib/chronometer/usart.c | 8 +--- 13 files changed, 96 insertions(+), 53 deletions(-) diff --git a/F1-nolib/chronometer/GPS.c b/F1-nolib/chronometer/GPS.c index 1080c11..279baa7 100644 --- a/F1-nolib/chronometer/GPS.c +++ b/F1-nolib/chronometer/GPS.c @@ -58,9 +58,9 @@ static int checksum_true(const char *buf){ static void send_chksum(uint8_t chs){ usart_putchar(GPS_USART, hex(chs >> 4)); - usart_putchar(1, hex(chs >> 4)); + //usart_putchar(1, hex(chs >> 4)); usart_putchar(GPS_USART, hex(chs & 0x0f)); - usart_putchar(1, hex(chs & 0x0f)); + //usart_putchar(1, hex(chs & 0x0f)); } /** * Calculate checksum & write message to port @@ -78,19 +78,19 @@ static void write_with_checksum(const char *buf){ break; } } - DBG("Send:"); + //DBG("Send:"); uint8_t checksum = 0; usart_putchar(GPS_USART, '$'); - usart_putchar(1, '$'); + //usart_putchar(1, '$'); GPS_send_string(buf); - SEND(buf); + //SEND(buf); do{ checksum ^= *buf++; }while(*buf); usart_putchar(GPS_USART, '*'); - usart_putchar(1, '*'); + //usart_putchar(1, '*'); send_chksum(checksum); - newline(); + //newline(); GPS_endline(); } @@ -155,9 +155,6 @@ void GPS_send_FullColdStart(){ */ void GPS_parse_answer(const char *buf){ char *ptr; -#if defined USART1PROXY - usart_send(1, buf); newline(); -#endif if(buf[1] == 'P') return; // answers to proprietary messages if(cmpstr(buf+3, "RMC", 3)){ // not RMC message need2startseq = 1; diff --git a/F1-nolib/chronometer/Makefile b/F1-nolib/chronometer/Makefile index 2836837..acfcfa0 100644 --- a/F1-nolib/chronometer/Makefile +++ b/F1-nolib/chronometer/Makefile @@ -12,8 +12,6 @@ LDSCRIPT ?= stm32F103xB.ld DEFS = -DVERSION=\"0.1.0\" # debug #DEFS += -DEBUG -# proxy GPS output over USART1 -DEFS += -DUSART1PROXY INDEPENDENT_HEADERS= diff --git a/F1-nolib/chronometer/adc.c b/F1-nolib/chronometer/adc.c index 80a98e2..9871ce6 100644 --- a/F1-nolib/chronometer/adc.c +++ b/F1-nolib/chronometer/adc.c @@ -86,7 +86,7 @@ uint8_t chkADCtrigger(){ }else{ // check if thigger shot if(val > (int16_t)the_conf.ADC_min + ADC_THRESHOLD && val < (int16_t)the_conf.ADC_max - ADC_THRESHOLD){ triggered = 1; - fillshotms(4); + fillshotms(ADC_TRIGGER); } } return triggered; diff --git a/F1-nolib/chronometer/chrono.bin b/F1-nolib/chronometer/chrono.bin index dd4dc4cf1cbb9f3d229c8943ee9d371d943a6d62..6e6c786e605757d90da74a21e76a3418baea5615 100755 GIT binary patch delta 5967 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 delta 5832 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 diff --git a/F1-nolib/chronometer/flash.h b/F1-nolib/chronometer/flash.h index 7933eca..fd9b057 100644 --- a/F1-nolib/chronometer/flash.h +++ b/F1-nolib/chronometer/flash.h @@ -52,6 +52,9 @@ typedef struct __attribute__((packed, aligned(4))){ #define FLAG_SAVE_EVENTS (1 << 0) // strings ends with "\r\n" instead of normal "\n" #define FLAG_STRENDRN (1 << 1) +// proxy GPS messages over USART1 +#define FLAG_GPSPROXY (1 << 2) + /* * struct to save events logs diff --git a/F1-nolib/chronometer/hardware.c b/F1-nolib/chronometer/hardware.c index 258235f..9245f4f 100644 --- a/F1-nolib/chronometer/hardware.c +++ b/F1-nolib/chronometer/hardware.c @@ -42,7 +42,7 @@ static uint8_t trigstate[DIGTRIG_AMOUNT]; // time of triggers shot trigtime shottime[TRIGGERS_AMOUNT]; // Tms value when they shot -static uint32_t shotms[TRIGGERS_AMOUNT]; +uint32_t shotms[TRIGGERS_AMOUNT]; // trigger length (-1 if > MAX_TRIG_LEN) int16_t triglen[TRIGGERS_AMOUNT]; // if trigger[N] shots, the bit N will be 1 @@ -187,7 +187,7 @@ void fillunshotms(){ if(pinval != trigstate[i]) rdy = 1; // trigger is OFF } if(rdy){ - shotms[i] = Tms; + if(i != LIDAR_TRIGGER) shotms[i] = Tms; show_trigger_shot(X); trigger_shot &= ~X; } diff --git a/F1-nolib/chronometer/hardware.h b/F1-nolib/chronometer/hardware.h index 441c2b5..d53524e 100644 --- a/F1-nolib/chronometer/hardware.h +++ b/F1-nolib/chronometer/hardware.h @@ -41,7 +41,7 @@ extern uint8_t buzzer_on; #define BUZZER_OFF() pin_clear(BUZZER_port, BUZZER_pin) #define BUZZER_GET() (pin_read(BUZZER_port, BUZZER_pin)) // minimal time to buzzer to cheep (ms) -#define BUZZER_CHEEP_TIME (500) +#define BUZZER_CHEEP_TIME 500 // PPS pin - PA1 #define PPS_port GPIOA @@ -49,15 +49,15 @@ extern uint8_t buzzer_on; // PPS and triggers state // amount of triggers, should be less than 9; 5 - 0..2 - switches, 3 - LIDAR, 4 - ADC -#define TRIGGERS_AMOUNT (5) +#define TRIGGERS_AMOUNT 5 // number of LIDAR trigger -#define LIDAR_TRIGGER (3) +#define LIDAR_TRIGGER 3 // number of ADC trigger -#define ADC_TRIGGER (4) +#define ADC_TRIGGER 4 // amount of digital triggers (on interrupts) -#define DIGTRIG_AMOUNT (3) +#define DIGTRIG_AMOUNT 3 // max length of trigger event (ms) -#define MAX_TRIG_LEN (1000) +#define MAX_TRIG_LEN 1000 #ifdef EBUG uint8_t gettrig(uint8_t N); diff --git a/F1-nolib/chronometer/lidar.c b/F1-nolib/chronometer/lidar.c index 156890d..7bd2400 100644 --- a/F1-nolib/chronometer/lidar.c +++ b/F1-nolib/chronometer/lidar.c @@ -24,6 +24,8 @@ uint16_t last_lidar_dist = 0; uint16_t last_lidar_stren = 0; uint16_t lidar_triggered_dist = 0; +extern uint32_t shotms[]; + /** * @brief parse_lidar_data - parsing of string from lidar * @param txt - the string or NULL (if you want just check trigger state) @@ -31,7 +33,16 @@ uint16_t lidar_triggered_dist = 0; */ uint8_t parse_lidar_data(char *txt){ static uint8_t triggered = 0; - if(!txt) return triggered; + if(!txt){ + // clear trigger state after timeout -> need to monitor lidar + uint32_t len = Tms - shotms[LIDAR_TRIGGER]; + //if(len > MAX_TRIG_LEN || len > (uint32_t)the_conf.trigpause[LIDAR_TRIGGER]){ + if(len > MAX_TRIG_LEN){ + triggered = 0; + DBG("MAX time gone, untrigger!"); + } + return triggered; + } last_lidar_dist = txt[2] | (txt[3] << 8); last_lidar_stren = txt[4] | (txt[5] << 8); if(last_lidar_stren < LIDAR_LOWER_STREN) return 0; // weak signal diff --git a/F1-nolib/chronometer/main.c b/F1-nolib/chronometer/main.c index 22cd5af..e140fb0 100644 --- a/F1-nolib/chronometer/main.c +++ b/F1-nolib/chronometer/main.c @@ -266,7 +266,7 @@ int main(void){ } // check if triggers that was recently shot are off now fillunshotms(); - if(lastT > Tms || Tms - lastT > 499){ + if(Tms - lastT > 499){ if(need2startseq) GPS_send_start_seq(); IWDG->KR = IWDG_REFRESH; switch(GPS_status){ @@ -280,17 +280,15 @@ int main(void){ LED1_off(); // turn off LED1 if GPS not found or time unknown } lastT = Tms; - if(usartrx(LIDAR_USART)){ + /*if(usartrx(LIDAR_USART)){ char *txt; if(usart_getline(LIDAR_USART, &txt)){ DBG("LIDAR:"); DBG(txt); } - } + }*/ IWDG->KR = IWDG_REFRESH; -#if defined EBUG || defined USART1PROXY transmit_tbuf(1); // non-blocking transmission of data from UART buffer every 0.5s -#endif transmit_tbuf(GPS_USART); transmit_tbuf(LIDAR_USART); #ifdef EBUG @@ -333,7 +331,6 @@ int main(void){ } IWDG->KR = IWDG_REFRESH; } -#if defined EBUG || defined USART1PROXY if(usartrx(1)){ // usart1 received data, store in in buffer r = usart_getline(1, &txt); if(r){ @@ -348,18 +345,19 @@ int main(void){ transmit_tbuf(1); IWDG->KR = IWDG_REFRESH; } -#else // USART1PROXY - send received data to GPS - usart_send(GPS_USART, txt); - IWDG->KR = IWDG_REFRESH; #endif + if(the_conf.defflags & FLAG_GPSPROXY){ + usart_send(GPS_USART, txt); + IWDG->KR = IWDG_REFRESH; + } } } -#endif if(usartrx(GPS_USART)){ IWDG->KR = IWDG_REFRESH; r = usart_getline(GPS_USART, &txt); if(r){ txt[r] = 0; + if(the_conf.defflags & FLAG_GPSPROXY) usart_send(1, txt); GPS_parse_answer(txt); } } diff --git a/F1-nolib/chronometer/str.c b/F1-nolib/chronometer/str.c index ff75f2a..7b34468 100644 --- a/F1-nolib/chronometer/str.c +++ b/F1-nolib/chronometer/str.c @@ -92,6 +92,9 @@ static void showuserconf(){ USB_send("\nSAVE_EVENTS="); if(f & FLAG_SAVE_EVENTS) USB_send("1"); else USB_send("0"); + USB_send("\nGPSPROXY="); + if(f & FLAG_GPSPROXY) USB_send("1"); + else USB_send("0"); USB_send("\nNFREE="); sendu(the_conf.NLfreeWarn); USB_send("\n"); @@ -121,6 +124,7 @@ int parse_USBCMD(char *cmd){ CMD_DISTMAX " - max distance threshold (cm)\n" CMD_DUMP "N - dump 20 last stored events (no x), all (x<1) or x\n" CMD_FLASH " - FLASH info\n" + CMD_GPSPROXY "S - GPS proxy over USART1 on/off\n" CMD_GPSRESTART " - send Full Cold Restart to GPS\n" CMD_GPSSTAT " - get GPS status\n" CMD_GPSSTR " - current GPS data string\n" @@ -149,8 +153,8 @@ int parse_USBCMD(char *cmd){ if(the_conf.dist_min != (uint16_t)N){ conf_modified = 1; the_conf.dist_min = (uint16_t) N; - succeed = 1; } + succeed = 1; }else if(CMP(cmd, CMD_DISTMAX) == 0){ // set low limit DBG("CMD_DISTMAX"); GETNUM(CMD_DISTMAX); @@ -158,8 +162,8 @@ int parse_USBCMD(char *cmd){ if(the_conf.dist_max != (uint16_t)N){ conf_modified = 1; the_conf.dist_max = (uint16_t) N; - succeed = 1; } + succeed = 1; }else if(CMP(cmd, CMD_STORECONF) == 0){ // store everything DBG("Store"); if(conf_modified){ @@ -193,8 +197,10 @@ int parse_USBCMD(char *cmd){ if(Nt > TRIGGERS_AMOUNT - 1) goto bad_number; if(getnum(cmd, &N)) goto bad_number; if(N < 0 || N > 10000) goto bad_number; - if(the_conf.trigpause[Nt] != N) conf_modified = 1; - the_conf.trigpause[Nt] = N; + if(the_conf.trigpause[Nt] != N){ + conf_modified = 1; + the_conf.trigpause[Nt] = N; + } succeed = 1; }else if(CMP(cmd, CMD_TRGTIME) == 0){ DBG("Trigger time"); @@ -245,16 +251,16 @@ int parse_USBCMD(char *cmd){ if(the_conf.ADC_max != (int16_t)N){ conf_modified = 1; the_conf.ADC_max = (int16_t) N; - succeed = 1; } + succeed = 1; }else if(CMP(cmd, CMD_ADCMIN) == 0){ // set low limit GETNUM(CMD_ADCMIN); if(N < -4096 || N > 4096) goto bad_number; if(the_conf.ADC_min != (int16_t)N){ conf_modified = 1; the_conf.ADC_min = (int16_t) N; - succeed = 1; } + succeed = 1; }else if(CMP(cmd, CMD_GPSRESTART) == 0){ USB_send("Send full cold restart to GPS\n"); GPS_send_FullColdStart(); @@ -297,17 +303,25 @@ int parse_USBCMD(char *cmd){ if(the_conf.USART_speed != (uint32_t)N){ the_conf.USART_speed = (uint32_t)N; conf_modified = 1; - succeed = 1; } + succeed = 1; }else if(CMP(cmd, CMD_RESET) == 0){ USB_send("Soft reset\n"); NVIC_SystemReset(); }else if(CMP(cmd, CMD_STREND) == 0){ char c = cmd[sizeof(CMD_STREND) - 1]; succeed = 1; - if(c == 'n' || c == 'N') the_conf.defflags &= ~FLAG_STRENDRN; - else if(c == 'r' || c == 'R') the_conf.defflags |= FLAG_STRENDRN; - else{ + if(c == 'n' || c == 'N'){ + if(the_conf.defflags & FLAG_STRENDRN){ + conf_modified = 1; + the_conf.defflags &= ~FLAG_STRENDRN; + } + }else if(c == 'r' || c == 'R'){ + if(!(the_conf.defflags & FLAG_STRENDRN)){ + conf_modified = 1; + the_conf.defflags |= FLAG_STRENDRN; + } + }else{ succeed = 0; USB_send("Bad letter, should be 'n' or 'r'\n"); } @@ -332,8 +346,17 @@ int parse_USBCMD(char *cmd){ sendu(maxLnum - 1); USB_send("\n"); }else if(CMP(cmd, CMD_SAVEEVTS) == 0){ - if('0' == cmd[sizeof(CMD_SAVEEVTS) - 1]) the_conf.defflags &= ~FLAG_SAVE_EVENTS; - else the_conf.defflags |= FLAG_SAVE_EVENTS; + if('0' == cmd[sizeof(CMD_SAVEEVTS) - 1]){ + if(the_conf.defflags & FLAG_SAVE_EVENTS){ + conf_modified = 1; + the_conf.defflags &= ~FLAG_SAVE_EVENTS; + } + }else{ + if(!(the_conf.defflags & FLAG_SAVE_EVENTS)){ + conf_modified = 1; + the_conf.defflags |= FLAG_SAVE_EVENTS; + } + } succeed = 1; }else if(CMP(cmd, CMD_DUMP) == 0){ if(getnum(cmd+sizeof(CMD_DUMP)-1, &N)) N = -20; // default - without N @@ -343,11 +366,27 @@ int parse_USBCMD(char *cmd){ }else if(CMP(cmd, CMD_NFREE) == 0){ GETNUM(CMD_NFREE); if(N < 0 || N > 0xffff) goto bad_number; - the_conf.NLfreeWarn = (uint16_t)N; + if(the_conf.NLfreeWarn != (uint16_t)N){ + conf_modified = 1; + the_conf.NLfreeWarn = (uint16_t)N; + } succeed = 1; }else if(CMP(cmd, CMD_DELLOGS) == 0){ if(store_log(NULL)) USB_send("Error during erasing flash\n"); else USB_send("All logs erased\n"); + }else if(CMP(cmd, CMD_GPSPROXY) == 0){ + if(cmd[sizeof(CMD_GPSPROXY) - 1] == '0'){ + if(the_conf.defflags & FLAG_GPSPROXY){ + conf_modified = 1; + the_conf.defflags &= ~FLAG_GPSPROXY; + } + }else{ + if(!(the_conf.defflags & FLAG_GPSPROXY)){ + conf_modified = 1; + the_conf.defflags |= FLAG_GPSPROXY; + } + } + succeed = 1; }else return 1; /*else if(CMP(cmd, CMD_) == 0){ ; @@ -377,7 +416,7 @@ char *get_trigger_shot(int number, const event_log *logdata){ if(logdata->trigno == LIDAR_TRIGGER){ bptr = strcp(bptr, "LIDAR, dist="); bptr = strcp(bptr, u2str(logdata->lidar_dist)); - bptr = strcp(bptr, ", TRIG" STR(LIDAR_TRIGGER) "="); + bptr = strcp(bptr, ", TRIG" STR(LIDAR_TRIGGER)); }else{ bptr = strcp(bptr, "TRIG"); *bptr++ = '0' + logdata->trigno; diff --git a/F1-nolib/chronometer/str.h b/F1-nolib/chronometer/str.h index 7e9780f..f4f1d3b 100644 --- a/F1-nolib/chronometer/str.h +++ b/F1-nolib/chronometer/str.h @@ -51,6 +51,7 @@ #define CMD_DUMP "dump" #define CMD_NFREE "nfree" #define CMD_DELLOGS "deletelogs" +#define CMD_GPSPROXY "gpsproxy" extern uint8_t showGPSstr; diff --git a/F1-nolib/chronometer/time.c b/F1-nolib/chronometer/time.c index d10ed81..bb0778e 100644 --- a/F1-nolib/chronometer/time.c +++ b/F1-nolib/chronometer/time.c @@ -62,10 +62,12 @@ void time_increment(){ current_time.H = 0; } } + /* #ifdef EBUG SEND("time_increment(): "); SEND(get_time(¤t_time, 0)); #endif + */ } static char *puttwo(uint8_t N, char *buf){ diff --git a/F1-nolib/chronometer/usart.c b/F1-nolib/chronometer/usart.c index 101f657..ce4241e 100644 --- a/F1-nolib/chronometer/usart.c +++ b/F1-nolib/chronometer/usart.c @@ -96,7 +96,7 @@ void usart_send(int n, const char *str){ tbuf[n][tbufno[n]][odatalen[n][tbufno[n]]++] = *str++; } } -#if defined EBUG || defined USART1PROXY +#if defined EBUG // only for USART1 void newline(){ usart_putchar(1, '\n'); @@ -170,9 +170,7 @@ static void usart_setup(int n, uint32_t BRR){ void usarts_setup(){ RCC->AHBENR |= RCC_AHBENR_DMA1EN; -#if defined EBUG || defined USART1PROXY usart_setup(1, 72000000 / the_conf.USART_speed); // debug console or GPS proxy -#endif usart_setup(2, 36000000 / 9600); // GPS usart_setup(3, 36000000 / 115200); // LIDAR } @@ -217,11 +215,9 @@ void usart_isr(int n, USART_TypeDef *USART){ } } -#if defined EBUG || defined USART1PROXY void usart1_isr(){ usart_isr(1, USART1); } -#endif // GPS_USART void usart2_isr(){ @@ -279,14 +275,12 @@ void hexdump(uint8_t *arr, uint16_t len){ } #endif -#if defined EBUG || defined USART1PROXY void dma1_channel4_isr(){ // USART1 if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx DMA1->IFCR = DMA_IFCR_CTCIF4; // clear TC flag txrdy[1] = 1; } } -#endif void dma1_channel7_isr(){ // USART2 if(DMA1->ISR & DMA_ISR_TCIF7){ // Tx