From f403b407ccfa48906f05e91ae19b60100c59da2a Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Fri, 5 Apr 2019 15:59:05 +0200 Subject: [PATCH] Version 0.3 --- README.md | 17 +++++++++++++++++ driver/cli | Bin 126240 -> 126400 bytes driver/cli.cpp | 8 +++----- driver/drv/b15f.cpp | 14 +++++++++++--- driver/drv/b15f.h | 2 +- driver/drv/usart.cpp | 8 ++++++++ driver/drv/usart.h | 8 +++++++- driver/main | Bin 0 -> 66200 bytes driver/main.cpp | 19 ++++++++++++++++--- driver/ui/view_monitor.cpp | 7 ++++++- firmware/B15F.elf | Bin 16624 -> 16624 bytes firmware/usart.h | 2 +- 12 files changed, 70 insertions(+), 15 deletions(-) create mode 100644 README.md create mode 100755 driver/main diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ec70be --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# B15F - Board 15 Famulus Edition + +## TODO / Ideen +- CLI: Exception catchen, set global error message, raise SIGINT --> ncurses wird richtig beendet +- Monitor: Refresh visualisieren, z.B. - / - \ | +- Main Menu: Informationen ergänzen +- Selbsttest bei discard richtig beenden (momentan wird wahrscheinlich WDT angeschmissen, besser global bool für selbsttest-loop) +- Lizenz +- gitignore checken +- readme schreiben +- CLI: Farbe? +- globale strings / msg klasse für treiber, ui (z.B. B15F info) +- drv: requests als array organisieren +- drv/usart überarbeiten, evtl iotl select +- dreipol dil schalter ansprechbar machen +- die vier buttons ansprechbar machen +- Kommentieren diff --git a/driver/cli b/driver/cli index dbf9ed2831ffd97285ddf267071ff3fa47768e02..1678fd1b37c7573703429204169f6f24a5bbc7fd 100755 GIT binary patch delta 40969 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 J*;97#{{UdW{K^0T delta 40639 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 OM{R)}MeB~*LH`Af6o9<| diff --git a/driver/cli.cpp b/driver/cli.cpp index d586e52..2e24c75 100644 --- a/driver/cli.cpp +++ b/driver/cli.cpp @@ -1,8 +1,4 @@ -/** TODO - * - * - throw exception -> raise SIGINT - */ - +#define B15F_CLI_DEBUG #include #include // sudo apt-get install libncurses5-dev @@ -79,8 +75,10 @@ void init() { // init b15 driver B15F::getInstance(); +#ifndef B15F_CLI_DEBUG std::cout << std::endl << "Starte in 3s ..." << std::endl; sleep(3); +#endif // init all ncurses stuff initscr(); diff --git a/driver/drv/b15f.cpp b/driver/drv/b15f.cpp index de8051e..abbf044 100644 --- a/driver/drv/b15f.cpp +++ b/driver/drv/b15f.cpp @@ -215,12 +215,20 @@ uint16_t B15F::analogRead(uint8_t channel) usart.clearInputBuffer(); if(channel > 7) throw DriverException("Bad ADC channel: " + std::to_string(channel)); - usart.writeByte(RQ_ADC); - usart.writeByte(channel); + + uint8_t rq[] = { + RQ_ADC, + channel + }; + + int n_sent = usart.write_timeout(&rq[0], 0, sizeof(rq), 1000); + if(n_sent != sizeof(rq)) + throw DriverException("Sent failed"); + uint16_t adc = usart.readInt(); + if(adc > 1023) throw DriverException("Bad ADC data detected"); - delay_us(50); return adc; } diff --git a/driver/drv/b15f.h b/driver/drv/b15f.h index 067f4a6..2ffff03 100644 --- a/driver/drv/b15f.h +++ b/driver/drv/b15f.h @@ -192,7 +192,7 @@ private: constexpr static uint8_t MSG_FAIL = 0xFE; constexpr static uint16_t RECONNECT_TIMEOUT = 64; // ms constexpr static uint8_t RECONNECT_TRIES = 3; - constexpr static uint32_t BAUDRATE = 115200; + constexpr static uint32_t BAUDRATE = 57600; // REQUESTS constexpr static uint8_t RQ_DISC = 0; diff --git a/driver/drv/usart.cpp b/driver/drv/usart.cpp index 93362ff..a18de62 100644 --- a/driver/drv/usart.cpp +++ b/driver/drv/usart.cpp @@ -49,6 +49,13 @@ void USART::clearOutputBuffer() if(code) throw USARTException("Fehler beim Leeren des Ausgangspuffers"); } + +void USART::flushOutputBuffer() +{ + int code = tcdrain(file_desc); + if(code) + throw USARTException("Fehler beim Versenden des Ausgangspuffers"); +} void USART::printStatistics() { @@ -108,6 +115,7 @@ int USART::write_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t while(elapsed < timeout) { n_sent = write(file_desc, buffer + offset, len); + flushOutputBuffer(); if (n_sent == len) return n_sent; diff --git a/driver/drv/usart.h b/driver/drv/usart.h index 1659316..b33019a 100644 --- a/driver/drv/usart.h +++ b/driver/drv/usart.h @@ -46,6 +46,12 @@ public: */ void clearOutputBuffer(void); + /** + * Schreibt Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden + * \throws USARTException + */ + void flushOutputBuffer(void); + /** * Gibt Anzahl an erfolgreichen und fehlgeschlagenen Block-Übertragungen an */ @@ -130,7 +136,7 @@ public: private: int file_desc = -1; // Linux Dateideskriptor - uint32_t baudrate = 9600; + uint32_t baudrate = 9600; // Standard-Baudrate, sollte mit setBaudrate() überschrieben werden! int TEST = 0; uint8_t timeout = 10; // in Dezisekunden uint8_t block_buffer[MAX_BLOCK_SIZE + 3]; diff --git a/driver/main b/driver/main new file mode 100755 index 0000000000000000000000000000000000000000..196b9fa7a83e4592d773f9eee1c36048b3977211 GIT binary patch literal 66200 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 z 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 E0n#!N1ONa4 delta 48 zcmey+$oQd=aRU=Of6K#$$wwGCrZ!AG#?b$K(q=(+Jw6^I11n<#2FHRT1qI{H-l9vj E0nmXE@Bjb+ diff --git a/firmware/usart.h b/firmware/usart.h index a817197..5505a1b 100644 --- a/firmware/usart.h +++ b/firmware/usart.h @@ -124,7 +124,7 @@ private: volatile bool active = false; // constants - constexpr static uint32_t BAUDRATE = 115200; // 38400 + constexpr static uint32_t BAUDRATE = 57600; // 38400 constexpr static uint8_t CRC7_POLY = 0x91; constexpr static uint8_t MAX_BLOCK_SIZE = 64; constexpr static uint8_t BLOCK_END = 0x80;