From c5cadce268f5ec5c8a149c6023c1ad365d5f44d3 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 11:56:00 +0100 Subject: [PATCH 1/7] Fix deprecated warning in main.cpp --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 4dff162..6daaa51 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -917,7 +917,7 @@ void setup() { logger.flush(); NMEA2000.SetMode(tNMEA2000::N2km_ListenAndNode, NodeAddress); NMEA2000.SetForwardOwnMessages(false); - NMEA2000.SetHeartbeatInterval(NMEA2000_HEARTBEAT_INTERVAL); + NMEA2000.SetHeartbeatIntervalAndOffset(NMEA2000_HEARTBEAT_INTERVAL); if (sendOutN2k){ // Set the information for other bus devices, which messages we support unsigned long *pgns=toN2KConverter->handledPgns(); From b640d1addab9c6c105c5f1d2692fbe1f52af0251 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:59:57 +0100 Subject: [PATCH 2/7] Fix warning GwSpiSensor.h --- lib/spitask/GwSpiSensor.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spitask/GwSpiSensor.h b/lib/spitask/GwSpiSensor.h index 3491641..c12a410 100644 --- a/lib/spitask/GwSpiSensor.h +++ b/lib/spitask/GwSpiSensor.h @@ -112,7 +112,7 @@ class SSISensor : public SensorTemplate{ .flags = SPI_TRANS_USE_RXDATA, .cmd = 0, .addr = 0, - .length = bits+1, + .length = (size_t)bits+1, .rxlength = 0}; esp_err_t ret = spi_device_queue_trans(device->device(), &ta, portMAX_DELAY); if (ret != ESP_OK) return ret; @@ -138,4 +138,4 @@ class SSISensor : public SensorTemplate{ using SpiSensorList=SensorList; #define GWSPI1_HOST SPI2_HOST #define GWSPI2_HOST SPI3_HOST -#endif \ No newline at end of file +#endif From 756064a362b169210cfb1e3ad448b1f5fc97e1c9 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:57:05 +0100 Subject: [PATCH 3/7] Fix warning NMEA0183DataToN2K.cpp Also switch to more readable function names --- lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index cf335df..8fd2d7d 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -351,8 +351,8 @@ private: rmb.vmg ); send(n2kMsg,msg.sourceId); - SetN2kPGN129285(n2kMsg,sourceId,1,1,true,true,"default"); - AppendN2kPGN129285(n2kMsg,destinationId,rmb.destID,rmb.latitude,rmb.longitude); + SetN2kRouteWPInfo(n2kMsg,sourceId,1,1,N2kdir_forward,"default"); + AppendN2kRouteWPInfo(n2kMsg,destinationId,rmb.destID,rmb.latitude,rmb.longitude); send(n2kMsg,msg.sourceId); } } From a1f00dde82ae90ed926add1974e420ae19d76fb0 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:53:35 +0100 Subject: [PATCH 4/7] Fix warning extra_script.py --- extra_script.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra_script.py b/extra_script.py index ed62c64..90470d0 100644 --- a/extra_script.py +++ b/extra_script.py @@ -274,9 +274,9 @@ class Grove: def _ss(self,z=False): if z: return self.name - return self.name if self.name is not 'Z' else '' + return self.name if self.name != 'Z' else '' def _suffix(self): - return '_'+self.name if self.name is not 'Z' else '' + return '_'+self.name if self.name != 'Z' else '' def replace(self,line): if line is None: return line From 036add6feb0d4879bce1d1bf10f7ce1ff1fa188d Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 19:49:46 +0100 Subject: [PATCH 5/7] #100: introduce extra_config, extra_js, extra_css as options in the environment --- extra_script.py | 55 ++++++++++++++----- lib/exampletask/{index.css => example.css} | 0 lib/exampletask/{index.js => example.js} | 0 .../{config.json => exampleConfig.json} | 0 lib/exampletask/platformio.ini | 3 + 5 files changed, 45 insertions(+), 13 deletions(-) rename lib/exampletask/{index.css => example.css} (100%) rename lib/exampletask/{index.js => example.js} (100%) rename lib/exampletask/{config.json => exampleConfig.json} (100%) diff --git a/extra_script.py b/extra_script.py index 90470d0..941909b 100644 --- a/extra_script.py +++ b/extra_script.py @@ -104,8 +104,7 @@ def writeFileIfChanged(fileName,data): return True def mergeConfig(base,other): - for bdir in other: - cname=os.path.join(bdir,"config.json") + for cname in other: if os.path.exists(cname): print("merge config %s"%cname) with open(cname,'rb') as ah: @@ -151,13 +150,25 @@ def expandConfig(config): rt.append(replaceTexts(c,replace)) return rt -def generateMergedConfig(inFile,outFile,addDirs=[]): +def createUserItemList(dirs,itemName,files): + rt=[] + for d in dirs: + iname=os.path.join(d,itemName) + if os.path.exists(iname): + rt.append(iname) + for f in files: + if not os.path.exists(f): + raise Exception("user item %s not found"%f) + rt.append(f) + return rt + +def generateMergedConfig(inFile,outFile,addFiles=[]): if not os.path.exists(inFile): raise Exception("unable to read cfg file %s"%inFile) data="" with open(inFile,'rb') as ch: config=json.load(ch) - config=mergeConfig(config,addDirs) + config=mergeConfig(config,addFiles) config=expandConfig(config) data=json.dumps(config,indent=2) writeFileIfChanged(outFile,data) @@ -377,12 +388,7 @@ def getLibs(): -def joinFiles(target,pattern,dirlist): - flist=[] - for dir in dirlist: - fn=os.path.join(dir,pattern) - if os.path.exists(fn): - flist.append(fn) +def joinFiles(target,flist): current=False if os.path.exists(target): current=True @@ -453,7 +459,26 @@ def handleDeps(env): ) env.AddBuildMiddleware(injectIncludes) +def getOption(env,name,toArray=True): + try: + opt=env.GetProjectOption(name) + if toArray: + if opt is None: + return [] + return opt.split(',') + return opt + except: + pass + if toArray: + return [] +def getFileList(files): + base=basePath() + rt=[] + for f in files: + if f is not None and f != "": + rt.append(os.path.join(base,f)) + return rt def prebuild(env): global userTaskDirs print("#prebuild running") @@ -463,14 +488,18 @@ def prebuild(env): if ldf_mode == 'off': print("##ldf off - own dependency handling") handleDeps(env) + extraConfigs=getOption(env,'extra_config',toArray=True) + extraJs=getOption(env,'extra_js',toArray=True) + extraCss=getOption(env,'extra_css',toArray=True) + userTaskDirs=getUserTaskDirs() mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) - generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,userTaskDirs) + generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,createUserItemList(userTaskDirs,"config.json", getFileList(extraConfigs))) compressFile(mergedConfig,mergedConfig+".gz") generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE),False) generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE_IMPL),True) - joinFiles(os.path.join(outPath(),INDEXJS+".gz"),INDEXJS,["web"]+userTaskDirs) - joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),INDEXCSS,["web"]+userTaskDirs) + joinFiles(os.path.join(outPath(),INDEXJS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXJS,getFileList(extraJs))) + joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXCSS,getFileList(extraCss))) embedded=getEmbeddedFiles(env) filedefs=[] for ef in embedded: diff --git a/lib/exampletask/index.css b/lib/exampletask/example.css similarity index 100% rename from lib/exampletask/index.css rename to lib/exampletask/example.css diff --git a/lib/exampletask/index.js b/lib/exampletask/example.js similarity index 100% rename from lib/exampletask/index.js rename to lib/exampletask/example.js diff --git a/lib/exampletask/config.json b/lib/exampletask/exampleConfig.json similarity index 100% rename from lib/exampletask/config.json rename to lib/exampletask/exampleConfig.json diff --git a/lib/exampletask/platformio.ini b/lib/exampletask/platformio.ini index 096a7cd..d63dda8 100644 --- a/lib/exampletask/platformio.ini +++ b/lib/exampletask/platformio.ini @@ -10,5 +10,8 @@ lib_deps = build_flags= -D BOARD_TEST ${env.build_flags} +extra_config=lib/exampletask/exampleConfig.json, +extra_js=lib/exampletask/example.js +extra_css=lib/exampletask/example.css upload_port = /dev/esp32 upload_protocol = esptool \ No newline at end of file From 8c035c4ba18ba9e612ead5a94a8277d513620776 Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 20:48:29 +0100 Subject: [PATCH 6/7] #100: allow to set custom_config, custom_js, custom_css --- extra_script.py | 10 ++++++---- lib/exampletask/Readme.md | 18 ++++++++++++------ lib/exampletask/platformio.ini | 7 ++++--- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/extra_script.py b/extra_script.py index 941909b..218782f 100644 --- a/extra_script.py +++ b/extra_script.py @@ -465,7 +465,9 @@ def getOption(env,name,toArray=True): if toArray: if opt is None: return [] - return opt.split(',') + if isinstance(opt,list): + return opt + return opt.split("\n" if "\n" in opt else ",") return opt except: pass @@ -488,9 +490,9 @@ def prebuild(env): if ldf_mode == 'off': print("##ldf off - own dependency handling") handleDeps(env) - extraConfigs=getOption(env,'extra_config',toArray=True) - extraJs=getOption(env,'extra_js',toArray=True) - extraCss=getOption(env,'extra_css',toArray=True) + extraConfigs=getOption(env,'custom_config',toArray=True) + extraJs=getOption(env,'custom_js',toArray=True) + extraCss=getOption(env,'custom_css',toArray=True) userTaskDirs=getUserTaskDirs() mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) diff --git a/lib/exampletask/Readme.md b/lib/exampletask/Readme.md index 4c51d92..f8aea49 100644 --- a/lib/exampletask/Readme.md +++ b/lib/exampletask/Readme.md @@ -14,7 +14,7 @@ Files * [platformio.ini](platformio.ini)
This file is completely optional. You only need this if you want to - extend the base configuration - we add a dummy library here and define one additional build environment (board) + extend the base configuration - we add a dummy library here and define additional build environments (boards) * [GwExampleTask.h](GwExampleTask.h) the name of this include must match the name of the directory (ignoring case) with a "gw" in front. This file includes our special hardware definitions and registers our task at the core.
This registration can be done statically using [DECLARE_USERTASK](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/api/GwApi.h#L202) in the header file.
As an alternative we just only register an [initialization function](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/exampletask/GwExampleTask.h#L19) using DECLARE_INITFUNCTION and later on register the task function itself via the [API](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/exampletask/GwExampleTask.cpp#L32).
@@ -28,11 +28,13 @@ Files * [GwExampleTaks.cpp](GwExampleTask.cpp) includes the implementation of our task. This tasks runs in an own thread - see the comments in the code. We can have as many cpp (and header files) as we need to structure our code. - * [config.json](config.json)
+ * [config.json](exampleConfig.json)
This file allows to add some config definitions that are needed for our task. For the possible options have a look at the global [config.json](../../web/config.json). Be careful not to overwrite config defitions from the global file. A good practice wood be to prefix the names of definitions with parts of the library name. Always put them in a separate category so that they do not interfere with the system ones. - The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)). + The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)).
+ + Starting from Version 202503xx you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). - * [index.js](index.js)
+ * [index.js](example.js)
You can add javascript code that will contribute to the UI of the system. The WebUI provides a small API that allows you to "hook" into some functions to include your own parts of the UI. This includes adding new tabs, modifying/replacing the data display items, modifying the status display or accessing the config items. For the API refer to [../../web/index.js](../../web/index.js#L2001). To start interacting just register for some events like api.EVENTS.init. You can check the capabilities you have defined to see if your task is active. @@ -46,10 +48,14 @@ Files tools/testServer.py nnn http://x.x.x.x/api ``` with nnn being the local port and x.x.x.x the address of a running system. Open `http://localhost:nnn` in your browser.
- After a change just start the compilation and reload the page. + After a change just start the compilation and reload the page.
+ + Starting from Version 202503xx you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. * [index.css](index.css)
- You can add own css to influence the styling of the display. + You can add own css to influence the styling of the display.
+ + Starting from Version 202503xx you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) Interfaces diff --git a/lib/exampletask/platformio.ini b/lib/exampletask/platformio.ini index d63dda8..348b36c 100644 --- a/lib/exampletask/platformio.ini +++ b/lib/exampletask/platformio.ini @@ -10,8 +10,9 @@ lib_deps = build_flags= -D BOARD_TEST ${env.build_flags} -extra_config=lib/exampletask/exampleConfig.json, -extra_js=lib/exampletask/example.js -extra_css=lib/exampletask/example.css +custom_config= + lib/exampletask/exampleConfig.json +custom_js=lib/exampletask/example.js +custom_css=lib/exampletask/example.css upload_port = /dev/esp32 upload_protocol = esptool \ No newline at end of file From 52a376c43a9caf67d3fecd2a439bee9b60d2fa14 Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 20:56:51 +0100 Subject: [PATCH 7/7] release docs for 20250305 --- Readme.md | 6 ++++++ doc/Conversions.odt | Bin 26103 -> 33335 bytes doc/Conversions.pdf | Bin 38259 -> 38307 bytes lib/exampletask/Readme.md | 6 +++--- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 4a05c6d..ecf9abc 100644 --- a/Readme.md +++ b/Readme.md @@ -170,6 +170,12 @@ For details refer to the [example description](lib/exampletask/Readme.md). Changelog --------- +[20250305](../../releases/tag/20250305) +********* +* better handling for reconnect to a raspberry pi after reset [#102](../../issues/102) +* introduce _custom_config_, _custom_js_, _custom_css_, refer to [extending the core](lib/exampletask/Readme.md) [#100](../../pull/100) +* create VWR [#103](../../issues/103) + [20241128](../../releases/tag/20241128) ********* * additional correction for: USB connection on S3 stops [#81](../../issues/81) diff --git a/doc/Conversions.odt b/doc/Conversions.odt index 9ca2adbc44e5f7c038bb02cadeb73559c7fe439b..793362d6295eb58427288770777b94530c4041bb 100644 GIT binary patch delta 31361 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 z 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
-|{!JWwAqPx2Ny{F|G&g%~- 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 diff --git a/doc/Conversions.pdf b/doc/Conversions.pdf index 3de736be458ce876b404e60dad7c020d55feb8b1..f5abdaa31e23e39b98628e1dd2f019470da1413b 100644 GIT binary patch delta 4032 zcmah~XH-+$x&=Zgp-UB_lmkc+Nl3Dj&>;yZ7^UbD=|~qsZz{5p4g%7fbdjov^dczI z6(pci1(Yg9M3AoVxaW;G-n)3mc>B-VYwr22`OW#QG4@6&-J>$PiYH8<)2tR}OaC(} z-tuvoaDpJiy@i^Jx(NXfCj1;!7v62YzHNAQLas*Z@u1(Z!1$x=l7(x}%8_#D!&3*8 zi`K^0;gaptF;#SMxX;(z-My|a3&I&7dzk8g|AD%�meM5%rBZ&c<36vRVkAsk1pp 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 RPC&%zI#EC|F}#5$@Lz#cv4sEt diff --git a/lib/exampletask/Readme.md b/lib/exampletask/Readme.md index f8aea49..7637ecf 100644 --- a/lib/exampletask/Readme.md +++ b/lib/exampletask/Readme.md @@ -32,7 +32,7 @@ Files This file allows to add some config definitions that are needed for our task. For the possible options have a look at the global [config.json](../../web/config.json). Be careful not to overwrite config defitions from the global file. A good practice wood be to prefix the names of definitions with parts of the library name. Always put them in a separate category so that they do not interfere with the system ones. The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)).
- Starting from Version 202503xx you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). + Starting from Version 20250305 you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). * [index.js](example.js)
You can add javascript code that will contribute to the UI of the system. The WebUI provides a small API that allows you to "hook" into some functions to include your own parts of the UI. This includes adding new tabs, modifying/replacing the data display items, modifying the status display or accessing the config items. @@ -50,12 +50,12 @@ Files with nnn being the local port and x.x.x.x the address of a running system. Open `http://localhost:nnn` in your browser.
After a change just start the compilation and reload the page.
- Starting from Version 202503xx you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. + Starting from Version 20250305 you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. * [index.css](index.css)
You can add own css to influence the styling of the display.
- Starting from Version 202503xx you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) + Starting from Version 20250305 you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) Interfaces