diff --git a/control/src/.idea/workspace.xml b/control/src/.idea/workspace.xml index bfe8436..a95e56f 100644 --- a/control/src/.idea/workspace.xml +++ b/control/src/.idea/workspace.xml @@ -38,11 +38,11 @@ </provider> </entry> </file> - <file pinned="false" current-in-tab="false"> + <file pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/drv/usart.h"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="206"> - <caret line="98" column="61" selection-start-line="98" selection-start-column="61" selection-end-line="98" selection-end-column="61" /> + <state relative-caret-position="506"> + <caret line="106" column="35" selection-start-line="106" selection-start-column="35" selection-end-line="106" selection-end-column="35" /> </state> </provider> </entry> @@ -50,17 +50,26 @@ <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/drv/usart.cpp"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="45"> - <caret line="87" column="65" selection-start-line="87" selection-start-column="65" selection-end-line="87" selection-end-column="65" /> + <state relative-caret-position="554"> + <caret line="102" column="11" selection-start-line="102" selection-start-column="11" selection-end-line="102" selection-end-column="11" /> </state> </provider> </entry> </file> - <file pinned="false" current-in-tab="true"> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/drv/usartexception.h"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="180"> + <caret line="13" column="27" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="27" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/drv/b15f.cpp"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-528"> - <caret line="362" column="52" selection-start-line="362" selection-start-column="52" selection-end-line="362" selection-end-column="52" /> + <state relative-caret-position="192"> + <caret line="221" column="29" selection-start-line="221" selection-start-column="29" selection-end-line="221" selection-end-column="29" /> </state> </provider> </entry> @@ -86,9 +95,9 @@ <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> <list> - <option value="$PROJECT_DIR$/drv/usart.h" /> - <option value="$PROJECT_DIR$/drv/usart.cpp" /> <option value="$PROJECT_DIR$/drv/b15f.cpp" /> + <option value="$PROJECT_DIR$/drv/usart.cpp" /> + <option value="$PROJECT_DIR$/drv/usart.h" /> </list> </option> </component> @@ -128,7 +137,7 @@ <property name="WebServerToolWindowFactoryState" value="false" /> <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> <property name="nodejs_npm_path_reset_for_default_project" value="true" /> - <property name="settings.editor.selected.configurable" value="CMakeSettings" /> + <property name="settings.editor.selected.configurable" value="preferences.lookFeel" /> </component> <component name="RunDashboard"> <option name="ruleStates"> @@ -159,24 +168,24 @@ <option name="number" value="Default" /> <option name="presentableId" value="Default" /> <updated>1559118962147</updated> - <workItem from="1559118964304" duration="620000" /> + <workItem from="1559118964304" duration="1887000" /> </task> <servers /> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="620000" /> + <option name="totallyTimeSpent" value="1887000" /> </component> <component name="ToolWindowManager"> <frame x="67" y="25" width="1853" height="1055" extended-state="6" /> <editor active="true" /> <layout> <window_info id="Favorites" side_tool="true" /> - <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24958494" /> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24958494" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info anchor="bottom" id="Database Changes" /> <window_info anchor="bottom" id="Version Control" /> <window_info anchor="bottom" id="Messages" weight="0.32937366" /> - <window_info anchor="bottom" id="Terminal" visible="true" weight="0.32937366" /> + <window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.23434125" /> <window_info anchor="bottom" id="Event Log" side_tool="true" /> <window_info anchor="bottom" id="CMake" weight="0.33045357" /> <window_info anchor="bottom" id="Message" order="0" /> @@ -204,27 +213,34 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/drv/usart.h"> + <entry file="file://$PROJECT_DIR$/drv/b15f.h"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/drv/usartexception.h"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="206"> - <caret line="98" column="61" selection-start-line="98" selection-start-column="61" selection-end-line="98" selection-end-column="61" /> + <state relative-caret-position="180"> + <caret line="13" column="27" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="27" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/drv/b15f.cpp"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="192"> + <caret line="221" column="29" selection-start-line="221" selection-start-column="29" selection-end-line="221" selection-end-column="29" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/drv/usart.cpp"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="45"> - <caret line="87" column="65" selection-start-line="87" selection-start-column="65" selection-end-line="87" selection-end-column="65" /> + <state relative-caret-position="554"> + <caret line="102" column="11" selection-start-line="102" selection-start-column="11" selection-end-line="102" selection-end-column="11" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/drv/b15f.h"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> - <entry file="file://$PROJECT_DIR$/drv/b15f.cpp"> + <entry file="file://$PROJECT_DIR$/drv/usart.h"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-528"> - <caret line="362" column="52" selection-start-line="362" selection-start-column="52" selection-end-line="362" selection-end-column="52" /> + <state relative-caret-position="506"> + <caret line="106" column="35" selection-start-line="106" selection-start-column="35" selection-end-line="106" selection-end-column="35" /> </state> </provider> </entry> diff --git a/control/src/drv/b15f.cpp b/control/src/drv/b15f.cpp index 722513f..208bfff 100644 --- a/control/src/drv/b15f.cpp +++ b/control/src/drv/b15f.cpp @@ -229,9 +229,7 @@ uint16_t B15F::analogRead(uint8_t channel) channel }; - int n_sent = usart.receive(&rq[0], 0, sizeof(rq)); - if(n_sent != sizeof(rq)) - abort("Sent failed"); + usart.transmit(&rq[0], 0, sizeof(rq)); uint16_t adc = usart.readInt(); @@ -302,9 +300,7 @@ uint8_t B15F::pwmSetFrequency(uint32_t freq) static_cast<uint8_t>((freq >> 24) & 0xFF) }; - int n_sent = usart.receive(&rq[0], 0, sizeof(rq)); - if(n_sent != sizeof(rq)) - abort("Sent failed"); + usart.transmit(&rq[0], 0, sizeof(rq)); uint8_t byte = usart.readByte(); delay_us(10); @@ -321,9 +317,7 @@ bool B15F::pwmSetValue(uint8_t value) value }; - int n_sent = usart.receive(&rq[0], 0, sizeof(rq)); - if(n_sent != sizeof(rq)) - abort("Sent failed"); + usart.transmit(&rq[0], 0, sizeof(rq)); uint8_t aw = usart.readByte(); delay_us(10); @@ -341,9 +335,7 @@ bool B15F::setRegister(uint8_t adr, uint8_t val) val }; - int n_sent = usart.receive(&rq[0], 0, sizeof(rq)); - if(n_sent != sizeof(rq)) - abort("Sent failed"); + usart.transmit(&rq[0], 0, sizeof(rq)); uint8_t byte = usart.readByte(); delay_us(10); @@ -360,9 +352,7 @@ uint8_t B15F::getRegister(uint8_t adr) adr }; - int n_sent = usart.receive(&rq[0], 0, sizeof(rq)); - if(n_sent != sizeof(rq)) - abort("Sent failed"); + usart.transmit(&rq[0], 0, sizeof(rq)); uint8_t aw = usart.readByte(); delay_us(10); diff --git a/control/src/drv/usart.cpp b/control/src/drv/usart.cpp index 9c48ab2..f148c91 100644 --- a/control/src/drv/usart.cpp +++ b/control/src/drv/usart.cpp @@ -85,43 +85,18 @@ void USART::writeU32(uint32_t w) throw USARTException("Fehler beim Senden: writeU32()"); } -int USART::transmit(uint8_t *buffer, uint16_t offset, uint8_t len) +void USART::receive(uint8_t *buffer, uint16_t offset, uint8_t len) { - uint32_t elapsed = 0; - int n_read = -1; - auto start = std::chrono::steady_clock::now(); - auto end = start; - while(elapsed < timeout) - { - n_read = read(file_desc, buffer + offset, len); - if (n_read == len) - return n_read; - - end = std::chrono::steady_clock::now(); - elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); - } - - return 0; + int n = read(file_desc, buffer + offset, len); + if(n != len) + throw USARTException(std::string(__FUNCTION__) + " failed: " + std::string(__FILE__) + "#" + std::to_string(__LINE__)); } -int USART::receive(uint8_t *buffer, uint16_t offset, uint8_t len) +void USART::transmit(uint8_t *buffer, uint16_t offset, uint8_t len) { - uint32_t elapsed = 0; - int n_sent = -1; - auto start = std::chrono::steady_clock::now(); - auto end = start; - while(elapsed < timeout) - { - n_sent = write(file_desc, buffer + offset, len); - flushOutputBuffer(); - if (n_sent == len) - return n_sent; - - end = std::chrono::steady_clock::now(); - elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); - } - - return n_sent; + int n = write(file_desc, buffer + offset, len); + if(n != len) + throw USARTException(std::string(__FUNCTION__) + " failed: " + std::string(__FILE__) + "#" + std::to_string(__LINE__)); } uint8_t USART::readByte(void) { diff --git a/control/src/drv/usart.h b/control/src/drv/usart.h index e42f461..39e2ff5 100644 --- a/control/src/drv/usart.h +++ b/control/src/drv/usart.h @@ -95,8 +95,21 @@ public: */ uint16_t readInt(void); - int transmit(uint8_t *buffer, uint16_t offset, uint8_t len); - int receive(uint8_t *buffer, uint16_t offset, uint8_t len); + /** + * Sends n bytes from the buffer over USART + * \param buffer target buffer + * \param offset in buffer (mostly 0) + * \throws USARTException + */ + void transmit(uint8_t *buffer, uint16_t offset, uint8_t len); + + /** + * Receives n bytes from USART and writes them into the buffer + * \param buffer target buffer + * \param offset in buffer (mostly 0) + * \throws USARTException + */ + void receive(uint8_t *buffer, uint16_t offset, uint8_t len); /*************************************/