Mercurial > public > ostc4
view Discovery/Src/demo.c @ 396:effa6fb9eb89 ImproveBluetooth
Added function for BlueMod configuration:
Investigations of connection problems showed that there is a problem if the module is not able to forward data fast enough. The bottleneck in direction of microcontroller may be solved by increasing baud rate. To be backward (bootloader) compatible this is done temperoraly during every startup
Added function for signal stregth evaluation:
Quality of data connection may have an impact on stability => added function to visualize current state of connection. The evaluation may be requested remote using 'l' (0x6c) or by pressing next button while in service mode
Cleanup Disconnection procedure:
Disconnection issued by OSTC was realized by simply switching of the module which might have a negativ impact to remote devices. Second reason for change was that, e.g. in case of a timeout on OSTC side. a remote device might have continued sending firmware data causing OSTC to interpretate firmware image as service requests. E.g. resulting in a corrupted configuration. Instead of just switching off power a disconnection request is now send to the BlueMod.
Decreased size used for large data receiption:
Depending on device speed firmware transfer might be really slow. By decreasing the block size a short (6 seconds) timeout per block may be kept while the sender has more time for transfering the image
author | ideenmodellierer |
---|---|
date | Tue, 26 Nov 2019 22:12:25 +0100 |
parents | 5f11787b4f42 |
children |
line wrap: on
line source
/** ****************************************************************************** * @copyright heinrichs weikamp gmbh * @file demo.c * @author heinrichs weikamp gmbh * @date 26-Nov-2015 * @version 0.1 * @since 26-Nov-2015 * @brief f�r die Messe und die Vitrine * @bug * @warning @verbatim ============================================================================== ============================================================================== @endverbatim ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> * ****************************************************************************** */ #include "demo.h" #include "base.h" // for BUTTON_BACK, ... #include "data_exchange_main.h" // for time_elapsed_ms() #include "settings.h" #include "ostc.h" #ifndef DEMOMODE /* Exported functions --------------------------------------------------------*/ uint8_t demoGetCommand(void) { return 0; } uint8_t demoModeActive(void) { return 0; } void demoSendCommand(uint8_t action) { return; } #else /* Private variables with external access ------------------------------------*/ uint8_t demoModeActiveStatus = 1; uint32_t systickDemoMode; uint16_t demoModeActual = 0; #define BUTTON_BACK (BUTTON_BACK_PIN | 0x80) #define BUTTON_NEXT (BUTTON_NEXT_PIN | 0x80) #define BUTTON_ENTER (BUTTON_ENTER_PIN | 0x80) /* Private typedef -----------------------------------------------------------*/ #define MAXCOMMANDS 200 #ifdef SHOWCCRMODE const uint8_t commandlist[MAXCOMMANDS][3] = { /* Button, deci-seconds to wait */ // start for both {0, 40}, // start OC, activate CC {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, // Change to CC {BUTTON_ENTER, 0}, // Leave Edit {BUTTON_BACK, 0}, // Cursor {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_BACK, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, // start CC @ 20, set cursor to Sim Menu {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_BACK, 50}, {0, 0}, // re-loop @ 30 {0, 3}, // Logbook {BUTTON_BACK, 0}, {BUTTON_ENTER, 20}, {BUTTON_NEXT, 20}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, // surface screen {0, 2}, // menu {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 30}, {BUTTON_ENTER, 0}, // simulator {0, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, // the end, repeat from start {255, 0} }; #else // OC Mode Demo const uint8_t commandlist[MAXCOMMANDS][2] = { /* Button, seconds to wait */ // start for both {0, 50}, // wait IS IMPORTANT // start CC, activate OC {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_BACK, 0}, // Leave Cursor Mode {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, // OC {BUTTON_BACK, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, // start OC @ line 20 {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, // OC -> SIM {BUTTON_BACK, 0}, // Exit Menu {0, 0}, {0, 0}, {0, 0}, // re-loop @ 30 {0, 10}, // Logbook {BUTTON_BACK, 4}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 10}, {BUTTON_ENTER, 20}, {BUTTON_NEXT, 20}, {BUTTON_NEXT, 20}, {BUTTON_BACK, 0}, {BUTTON_BACK, 5}, {BUTTON_BACK, 0}, // Exit Logbook Mode // surface screen {0, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, // menu // activate Configure Deco Gas {BUTTON_NEXT, 0}, // Start Menu {BUTTON_NEXT, 2}, // SIM -> OC {BUTTON_ENTER, 2}, {BUTTON_NEXT, 1}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, // Mix 30 -> 90 {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, // Mix 90 -> 99 {BUTTON_BACK, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 5}, // First -> Deco {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_ENTER, 10}, {BUTTON_BACK, 0}, {BUTTON_BACK, 30}, /* // OC -> SIM {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 1}, {BUTTON_ENTER, 10}, */ // SYS2 Layout {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_BACK, 2}, {BUTTON_BACK, 10}, // SYS2 -> SIM {BUTTON_NEXT, 2}, {BUTTON_ENTER, 10}, // simulator {BUTTON_ENTER, 40}, // Start Simulator {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 90}, {BUTTON_NEXT, 5}, // Quit {BUTTON_NEXT, 5}, {BUTTON_ENTER, 5}, {BUTTON_ENTER, 50}, // surface screen {0, 10}, // Logbook {BUTTON_BACK, 20}, {BUTTON_ENTER, 20}, {BUTTON_NEXT, 20}, {BUTTON_NEXT, 20}, {BUTTON_BACK, 0}, {BUTTON_BACK, 5}, {BUTTON_BACK, 0}, // Exit Logbook Mode // surface screen {0, 10}, // activate Configure Deco Gas, go to Gas 2 {BUTTON_NEXT, 0}, // Start Menu {BUTTON_NEXT, 2}, // SIM -> OC {BUTTON_ENTER, 2}, {BUTTON_NEXT, 1}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, // Mix Decogas 99 -> EAN30 First {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_BACK, 0}, {BUTTON_ENTER, 0}, {BUTTON_NEXT, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 0}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 5}, {BUTTON_ENTER, 5}, {BUTTON_ENTER, 10}, // Now EAN 30 First {BUTTON_BACK, 0}, // Exit Edit Mode {BUTTON_BACK, 30}, // Exit Cursor Mode /* // OC -> SIM {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 1}, {BUTTON_ENTER, 10}, */ // SYS2 Layout {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_NEXT, 2}, {BUTTON_ENTER, 2}, {BUTTON_BACK, 2}, {BUTTON_BACK, 10}, // SYS -> SIM {BUTTON_NEXT, 2}, {BUTTON_ENTER, 10}, // simulator {BUTTON_ENTER, 40}, // Start Simulator {BUTTON_ENTER, 5}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 10}, {BUTTON_ENTER, 90}, {BUTTON_NEXT, 5}, // Menu? {BUTTON_NEXT, 5}, // Quit? {BUTTON_ENTER, 10}, {BUTTON_ENTER, 50}, // the end, repeat from start {255, 0} }; #endif /* Exported functions --------------------------------------------------------*/ uint8_t demoModeActive(void) { return demoModeActiveStatus; } uint8_t demoGetCommand(void) { if(!demoModeActiveStatus) return 0; uint32_t milliSecondsSinceLast; uint32_t systick_now; systick_now = HAL_GetTick(); milliSecondsSinceLast = time_elapsed_ms(systickDemoMode, systick_now); #ifdef SHOWCCRMODE if((demoModeActual == 1) && (settingsGetPointer()->dive_mode == DIVEMODE_CCR)) demoModeActual = 20; #else if((demoModeActual == 1) && (settingsGetPointer()->dive_mode == DIVEMODE_OC)) demoModeActual = 20; #endif if(demoModeActual > MAXCOMMANDS - 2) demoModeActual = 30; uint32_t actualDelay = ((commandlist[demoModeActual][1]) * 100) + 15; if(milliSecondsSinceLast < actualDelay) return 0; systickDemoMode = systick_now; if(commandlist[demoModeActual][0] == 255) demoModeActual = 30; else demoModeActual++; return commandlist[demoModeActual][0]; } void demoSendCommand(uint8_t action) { demoModeActiveStatus = 0; } void demoConfigureSettings(void) { settingsGetPointer()->gas[1].oxygen_percentage = 21; settingsGetPointer()->gas[1].helium_percentage = 0; settingsGetPointer()->gas[1].depth_meter = 0; settingsGetPointer()->gas[1].note.ub.first = 0; settingsGetPointer()->gas[1].note.ub.active = 0; settingsGetPointer()->gas[1].note.ub.deco = 0; settingsGetPointer()->gas[1].note.ub.travel = 0; settingsGetPointer()->gas[2].oxygen_percentage = 30; settingsGetPointer()->gas[2].helium_percentage = 0; settingsGetPointer()->gas[2].depth_meter = 0; settingsGetPointer()->gas[2].note.ub.first = 1; settingsGetPointer()->gas[2].note.ub.active = 1; settingsGetPointer()->gas[2].note.ub.deco = 0; settingsGetPointer()->gas[2].note.ub.travel = 0; settingsGetPointer()->ButtonResponsiveness[0] = 90; settingsGetPointer()->ButtonResponsiveness[1] = 90; settingsGetPointer()->ButtonResponsiveness[2] = 90; settingsGetPointer()->ButtonResponsiveness[3] = 90; } /* Includes ------------------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private variables with external access ------------------------------------*/ /* Exported functions --------------------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ #endif // DEMO /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/