* Driver vor NEO6m GPS receiver
Tested on W800
* Some tweaks:
empty RX buffer betewwn readings
on several unsuccessful reads, try enabling the NMEA RMC messages again
* empty buffer every second
remove commented out old code
* fix broken log if no lat/long NS or EW is present
* Add "savecfg" argument to save config to NEO after configuring - so next time we might use it without sending commands to NEO module
this way, only NEOs Tx is needed (and OpenBekens Rx)
---------
Co-authored-by: openshwprojects <85486843+openshwprojects@users.noreply.github.com>
* Try NTP split update to actual source
* fix windows makefiles and timed_events
* fix typo
* Fix sprintf format
* sprintf format - next try to fix for ESP and ESP8266
* sprintf - special case for ESP8266
* Adding GUI button to set clock
* fix
* Add debug output
* fix missing HTTP output
use original obk_config.h - only renaming functions - to see filesizes
* limit functions to NTP ode CLOCK present
* try fix selftests
* Enable simple clock for all platforms, even if NTP is not enabled
* test fixing merge-conflict
* try fixing merge conflicts #1
* try fix merge conflict
* Fix typos
consolidate time display on main page
fix double comments preventing several documentation details ($mday, $month ...) on docs/constants.md
enabling more time stuff for W800 for local testing.
* Fix setDST argument passing
* only test DST if clock is running
* Fix setting epoch time - use atol(<string arg>) instead of Tokenizer_GetArgInteger(0) for epoch
Change user_main.c to use xticks as uptime for g_secondsElapsed
* Fix g_secondsElapesd for Windows - no xTicks there so stick to old way with g_secondsElapesd++ here ...
* Fix simulator build
remove additional defines for W800 used for testing
* Use esp_timer_get_time() instead of xTicks for ESP.
Seems much better, 30 seconds difference in one day
(used to be over 10 minutes off in 12 hours)
* Include DS3231 code
* Include DS3231 RTC driver
* Try simple fix for TXW81X without RTOS
* Second try fix TXW81X
* Fix comments for doc
* fix obk_config (still using "#define ENABLE_NTP_SUNRISE_SUNSET" instead of new "#define ENABLE_CLOCK_SUNRISE_SUNSET")
fix RDA5981
(as already done in branch Split_NTP_new)
* fix deviceclock code for corrected #define
* enable DS3231 driver for all platforms to test compilation and compare sizes
* fix selftest DST and sunrise/sunset (command names are "CLOCK_..." not "NTP...")
* Fix selftest for DST and sunset/sunrise events
* Add debug to try fixing selftest issue
* more debug
* Disable bedug output after fix.
* Disable DS3231 for all platforms. To tes, use previous commit
* Fix comments and handling of year when setting time of DS3231
Switch to internal time functions to reduce flash usage (avoid gmtime and mktime)
* Fix direct acces of NTP-time via g_ntpTime - use function "Clock_GetCurrentTime()"
switch to obktime instead of time.h "gmtime"
* Fix missing include for deviceclock and obktime
* made ds3231 driver dependent on "#define ENABLE_DRIVER_DS3231"
change "deviceclock.c" to set DS3231 RTC on every clock set command if driver is running, so e.g. every NTP update will also adjust RTC time
* fix missing includes for DRV_IsRunning() and DS3231_SetEpoch()
* introducing DS3231_informClockWasSet(bool force) - called by drv_deviceclock whenever clock is set.
so DS3231 driver can ste the clock, if needed - using "force" will force setting (no supprise ;-))
* Fixes to drv_main.c (missing args for onHassDiscovery)
Fixed missing arg "bPreState" in XX_AppendInformationToHTTPIndexPage()
Changed name from CLOCK to TIME
changed some "gmtime" to obktime "calculateComponents()a
* fixes
* fix obk_config.h
* fix missing include
* fix include for drv_txw81x_camera.c
* Directly call TIME "driver" functions, but don't use as real driver - so hiding it's presence in GUI
* fix missing OnEverySecond for TIME
* Prepare for merge: disable DS3231 driver for all platforms
* fix broken obk_config.h
* revert unintended change of src/driver/drv_max72xx_single.c
* test
* Update workflow.yaml
* t
* makes
* Update drv_simpleEEPROM.c
* Update drv_simpleEEPROM.c
* ber
* Update workflow.yaml
* tt
* ber
* charts
* owm
* tt
* rem charts
* smaller
* test
* test
* fixes
* test
* charts
* comments
* test
* tt
* test
* add file to proj
* try to add pin 13 as ADC (testing in progress)
* test
* test
* MAX7219 simulator HACK
* final fixes
* Update drv_max72xx_internal.c
* restore
* fx
* create a ChType_Enum to go with SetChannelEnum
* resolve build errors for ChType_Enum PR
* fixing build errors for simulator and others for cmd_enums.c
* added ChType_ReadOnlyEnum and assocaited enum selftests
* ChType_Enum simulation and memory error corrections
* ChType_Enum documentation updates
---------
Co-authored-by: root <root@stonacek.nz>
* ENABLE DMX on ESP
* test
* s
* Update hal_uart_espidf.c
* Update obk_main.cmake
* w
* test
* Update hal_uart_espidf.c
* Update drv_dmx512.c
* test
* test
* test
* w
* t
* c
* t
* test
* T
* Update drv_dmx512.c
* test
* test
* try flush
* try wait
* ticks w
* t
* fx
* 100 ms
* SIM fx
* Update cmd_newLEDDriver.c
* test 2x
* tests
* fixes
* free
* fix
* misc
* b
* hal
* s
* Update workflow.yaml
* pin
* fin
* test
* Update hal_uart_espidf.c
* stub
* clear
* clear upo
* one more test
* split
* fx
* Update drv_led_shared.c
* step
* split
* Update drv_leds_shared.c
* Update selftest_ws2812b.c
* port
* dmx
* DMX
* s
* with test
* fix
* fx
* ChType_Ph test and RGBW test
* ddp formats unfinished
* Update selftest_ws2812b.c
* Update selftest_hass_discovery_ext.c
* fxes
* Seperate simple and full driver, introduce "common" for shared code
* Fix command prefixes
* Generate command as multiline if requested
* Fix JS linebreak
* Only use simple dirver - check sizes of firmware images
* Update obk_config.h - enable Full driver for all platforms to allow testing
* Change parsing sttring to device address to allow compact form
Change obk_config.h: remove extra entry for W800, add "FULL" driver to windows build
* fix windows code for "fake" DS18B20
* fix missing files in openBeken_win32_mvsc2017.vcxproj
* fix handle missing task.h for windows
* change Windows emulation to MAX/2 fake sensors
* try fix BL602
* change "fake temperature" of sensors in windows
* change windows sensor temperature once more
* shorten commands by alias
* fix escaping linebreak
* Fix broken JS code ...
* Fix ESP32 is crashing if interrupts are disabled during OWReset for > 480us
* Change output for unused channels
Test if DS1820 channels are in use
* fix warning/error for channel (<=64) printed into a char[5] value
* removeunuses quotes for address
* Fix language
* Capial "S" in Menu entry "Sensors"
* restore obk_config - #define ENABLE_DRIVER_DS1820_FULLonly for WINDOWS and SENSORS variant
Undefined Behavior Sanitizer (UBSAN) [1] is a similar tool to ASAN,
useful for catching bugs related to undefined behavior.
All the problems it detects seem related to the bitshifts related to
flags. Here's a sample:
```
src/new_pins.c:2437:8: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
#0 0x55a1b51011c1 in PIN_get_Relay_PWM_Count src/new_pins.c:2437
#1 0x55a1b500389b in NewLED_InitCommands src/cmnds/cmd_newLEDDriver.c:1627
#2 0x55a1b5150208 in Main_Init_BeforeDelay_Unsafe src/user_main.c:1151
#3 0x55a1b51506e7 in Main_Init_Before_Delay src/user_main.c:1290
#4 0x55a1b5150a05 in Main_Init src/user_main.c:1428
#5 0x55a1b515902c in SIM_ClearOBK src/win_main.c:166
#6 0x55a1b515a0fd in main src/win_main.c:534
#7 0x7f1acfdabd8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0x7f1acfdabe3f in __libc_start_main_impl ../csu/libc-start.c:392
#9 0x55a1b4fd8eb4 in _start (/home/niteria/tmp/broken-realloc/OpenBK7231T_App/build/win_main+0x10ceb4)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/new_pins.c:2437:8 in
```
```
src/new_cfg.c:591:9: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
#0 0x5629450eb803 in CFG_HasFlag src/new_cfg.c:591
#1 0x562944ffdb53 in CMD_Init_Early src/cmnds/cmd_main.c:1007
#2 0x562945153230 in Main_Init_BeforeDelay_Unsafe src/user_main.c:1162
#3 0x5629451536e7 in Main_Init_Before_Delay src/user_main.c:1290
#4 0x562945153a05 in Main_Init src/user_main.c:1428
#5 0x56294515c02c in SIM_ClearOBK src/win_main.c:166
#6 0x56294515d0fd in main src/win_main.c:534
#7 0x7f9f5e12bd8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0x7f9f5e12be3f in __libc_start_main_impl ../csu/libc-start.c:392
#9 0x562944fdbeb4 in _start (/home/niteria/tmp/broken-realloc/OpenBK7231T_App/build/win_main+0x10ceb4)
```
```
src/httpserver/http_fns.c:369:8: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
#0 0x560135601d44 in http_fn_index src/httpserver/http_fns.c:369
#1 0x5601356185cb in HTTP_ProcessPacket src/httpserver/new_http.c:826
#2 0x5601356a1e93 in Test_FakeHTTPClientPacket_Generic src/selftest/selftest_http.c:86
#3 0x5601356a2002 in Test_FakeHTTPClientPacket_GET src/selftest/selftest_http.c:102
#4 0x5601356b773f in Test_PIR src/selftest/selftest_pir.c:27
#5 0x5601356d204b in Win_DoUnitTests src/win_main.c:171
#6 0x5601356d3116 in main src/win_main.c:538
#7 0x7f6911b2ad8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0x7f6911b2ae3f in __libc_start_main_impl ../csu/libc-start.c:392
#9 0x560135551eb4 in _start (/home/niteria/tmp/broken-realloc/OpenBK7231T_App/build/win_main+0x10ceb4)
```
Preexisting problems are suppressed in `platforms/linux/ubsan.suppressions`
[1] https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
* Ability to run linux tests with AddressSanitizer
This makes it possible to compile and run the tests with Address
Sanitizer (ASAN) [1].
The command is:
```
make -f custom.mk clean; ASAN=1 make -f custom.mk && ./build/win_main -runUnitTests 2
```
Building without ASAN works without change.
Address Sanitizer saves a lot of time debugging memory issues, for
example for a bug where we index in an array with negative index it
gives this nice error message:
```
=================================================================
==2532658==ERROR: AddressSanitizer: global-buffer-overflow on address 0x5642389c5e37 at pc 0x564237e67492 bp 0x7fff17726e50 sp 0x7fff17726e40
READ of size 1 at 0x5642389c5e37 thread T0
#0 0x564237e67491 in CHANNEL_GetType src/new_cfg.c:427
#1 0x564237dfc933 in TuyaMCU_ApplyMapping src/driver/drv_tuyaMCU.c:1126
#2 0x564237dff92f in TuyaMCU_ParseStateMessage src/driver/drv_tuyaMCU.c:1632
#3 0x564237e019fa in TuyaMCU_ProcessIncoming src/driver/drv_tuyaMCU.c:1977
#4 0x564237e027ee in TuyaMCU_RunReceive src/driver/drv_tuyaMCU.c:2178
#5 0x564237e02dc2 in TuyaMCU_RunFrame src/driver/drv_tuyaMCU.c:2335
#6 0x564237dd2ce6 in DRV_RunQuickTick src/driver/drv_main.c:536
#7 0x564237ec4037 in QuickTick src/user_main.c:946
#8 0x564237eca8a5 in Sim_RunFrame src/win_main.c:106
#9 0x564237eca993 in Sim_RunFrames src/win_main.c:134
#10 0x564237ebce4a in Test_TuyaMCU_Basic src/selftest/selftest_tuyaMCU.c:369
#11 0x564237ecab1f in Win_DoUnitTests src/win_main.c:194
#12 0x564237ecba57 in main src/win_main.c:535
#13 0x7fb55312ed8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#14 0x7fb55312ee3f in __libc_start_main_impl ../csu/libc-start.c:392
#15 0x564237cb16b4 in _start (/home/niteria/tmp/broken-realloc/OpenBK7231T_App/build/win_main+0xcf6b4)
0x5642389c5e37 is located 51 bytes to the right of global variable 'stat_deduper_culled_tooFast' defined in 'src/mqtt/new_mqtt_deduper.c:40:12' (0x5642389c5e00) of size 4
0x5642389c5e37 is located 9 bytes to the left of global variable 'g_mutex' defined in 'src/mqtt/new_mqtt_deduper.c:42:26' (0x5642389c5e40) of size 4
SUMMARY: AddressSanitizer: global-buffer-overflow src/new_cfg.c:427 in CHANNEL_GetType
Shadow bytes around the buggy address:
0x0ac8c7130b70: 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
0x0ac8c7130b80: 00 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
0x0ac8c7130b90: 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
0x0ac8c7130ba0: 00 00 00 00 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9
0x0ac8c7130bb0: 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
=>0x0ac8c7130bc0: 04 f9 f9 f9 f9 f9[f9]f9 04 f9 f9 f9 f9 f9 f9 f9
0x0ac8c7130bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ac8c7130be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ac8c7130bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ac8c7130c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ac8c7130c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==2532658==ABORTING
```
[1] https://github.com/google/sanitizers/wiki/addresssanitizer
* disable tests broken on linux
* add a suppression file for known leaks
* attempt at adding an ASAN workflow
* fix autogen
* Update workflow.yaml
---------
Co-authored-by: openshwprojects <85486843+openshwprojects@users.noreply.github.com>