Commit Graph

649 Commits

Author SHA1 Message Date
Gregg 1587f56626 Starting to integrate new TLV8 into postPairVerify 2023-12-23 14:29:53 -06:00
Gregg aa700f94f1 Added new TLV8 class
To do: Refactor HAP.cpp to use new TLV8 class
2023-12-22 12:07:26 -06:00
Gregg a6a84b5e21 Added ability to turn off SpanPoint encryption
New class-level method SpanPoint::setEncryption(boolean encrypt).  Default is to use encryption unless method is called with encrypt=false.

With encryption, 7 connections max; without encryption, 20 connections max.
 Serial Monitor provides warnings if connections are exceeded.
2023-12-19 09:08:37 -06:00
Gregg 83ad277aa0 Addressed issue with new Characteristic enum constants 2023-11-26 18:19:36 -06:00
Gregg ead05d8690 Added Characteristic Constants
Added constants to Characteristics that describe states.

Example: Characteristic::SecuritySystemTargetState::ARM_STAY
2023-11-25 18:22:59 -06:00
Gregg 70126cb04f Eliminated .get() from TempBuffer objects where possible
Stylistic only.  Cannot remove .get() when a TempBuffer is being re-cast.  Also can't remove .get() when cast can't be determined, such as when used in Serial.printf() [potential to do: explore if this can be addressed, though this is stylistic only and has no impact on code]
2023-11-25 16:48:23 -06:00
Gregg f6ebc1ae22 Changed various static and dynamic stack-based buffers to TempBuffer
Also added casting overload to TempBuffer so that get() method is no longer needed
2023-11-25 16:13:24 -06:00
Gregg c4e88d7df0 Streamlined NVS recall for String values
Avoids need for intermediate variable
2023-11-24 18:05:49 -06:00
Gregg 9e3f6c8303 Override new operator for SpanAccessory, SpanService, and SpanCharacteristic
New Operator now uses PSRAM if available, else uses Internal RAM.  Obviates the need for the ps_new() macro, though will keep definition since it may be useful for any class that does not already override malloc() to use PSRAM.
2023-11-24 10:30:20 -06:00
Gregg b7c294d210 Change NVS storage for Characteristics to always use nvs_set_u64()
Reduces NVS consumption by from 3 to only 1 records when storing numerical values.

Also:  Fixed memory problem in getCharacteristics by replacing dynamically-sized stack buffers with TempBuffer (must do this everywhere), which was causing stack probllem when combination number of Accessories and number of Characteristics got very large.
2023-11-24 09:53:12 -06:00
Gregg 9e0512e48b Address WebLog size issue that limited number of entries
Added logic to sequentially transmit chunks of the HTML response String whenever it grows beyond 1024 bytes.  This ensures the number of WebLog entries does not create a very large HTML String that eats up all the free heap space.  WebLog entries are now only limited by storage of the entries themselves.  Tested successfully with 500 entries.
2023-11-22 06:15:43 -06:00
Gregg 2bc107032c Added HS_REALLOC macro for generalized realloc() when using PSRAM
When using PSRAM, changing the number of Accessories no longer creates any change to heap usage on internal RAM.  The entire Accessory will be stored in PSRAM.
2023-11-21 18:36:51 -06:00
Gregg 458a4fb357 Added ps_new() macro
A more generic version of `new(*ptr)` that allocates from PSRAM if present, otherwise is that same a normal `new`
2023-11-21 18:06:27 -06:00
Gregg 8268e519dd PSRAM: Adds custom allocator and HS_MALLOC/HS_CALLOC macros
Forces all heap requests to be drawn from PSRAM, unless the device does not contain PSRAM.

To do:  Provide easy-to-use NEW() macro; add custom allocator to unordered sets; auto-shrink vectors after updateDatabase()
2023-11-20 21:57:20 -06:00
Francois a9578924c2 Fixing HTML syntax error in weblogs. 2023-11-15 08:06:07 -05:00
Gregg 4ab7503a72 Added error checking for NVS storage
Also added NVS storage diagnostic to 'm' command.
2023-11-12 21:37:33 -06:00
Gregg 1e62a038f1 Changed unordered_set to vector when checking for duplicate AID
This eliminated the use of unordered_set everywhere in HomeSpan
2023-11-12 12:33:09 -06:00
Gregg 98d6abeb1f Changed storage of required and optional Characteristics from unordered_set to vector
Significantly reduces memory usage - unordered_sets take up much more memory and using std::find from <algorithm> is as efficient as using find() method of an unordered_set.

To do: Remove all uses of unordered_set across HomeSpan wherever possible
2023-11-12 09:48:46 -06:00
Gregg ae60a84855 Update HAPClient::sendEncrypted() to send individual frames to save memory
Rather than use a large temporary buffer to store all encrypted frames to transmit all at once, each encrypted frame is transmitted as soon as created, which means the temporary buffer only needs to be large enough to store a single encrypted frame.

For a device with a large number of Accessories, this can save 15-20 KB of temporary storage, allowing for more Accessories.

Note this change does not reduce the size of the unencrypted message that is initially produced and can also be quite large.  Potential for future project.
2023-11-11 10:26:25 -06:00
Gregg 6f19141a49 Update src.ino 2023-11-04 13:22:12 -05:00
Gregg 1194bd27f6 Update src.ino 2023-11-04 12:52:03 -05:00
Gregg 713c5c65bf Added new homeSpan.rebootCallback() function
An optional callback used to track the number of times the device reboots, where a reboot is defined as any restart where the uptime was less than a specified number of milliseconds (default=5000)
2023-11-04 10:43:28 -05:00
Gregg 965bdc71b7 Add MAC Address output to RemoteDevice.ino
Prompts user with reminder of which MAC Address to use in Main Device.
2023-11-04 09:36:31 -05:00
Gregg b41fc3ac7e Update HomeSpan.h
Forgot braces in for-loop of autoPoll()
2023-10-31 18:21:16 -05:00
Gregg 8b3192e122 Moved vTaskDelay(5) from pollTask() to homeSpan.autoPoll()
Adding the vTaskDelay(5) to the code that spawns the separate task is more consistent with how Arduino-ESP32 spawns the main loop() task.
2023-10-31 18:11:09 -05:00
Gregg 42f69adf49 Made vTaskDelay(5) in pollTask conditional of using autoPoll()
vTaskDelay(5) is only needed if polling is in its own task.  If calling poll() directly, there is no need for any delay.
2023-10-30 06:29:38 -05:00
Gregg 56a2f0bece Changed Accessory Limit from 41 to 150 and added Memory Warning
Low Memory Watermark is compared to DEFAULT_LOW_MEM_THRESHOLD (currently set at 80,000 bytes) after HAP initialization but before WIFI connection.  If Low Memory Watermark is below DEFAULT_LOW_MEM_THRESHOLD, a WARNING is issued.

Note: memory is based on heap with MALLOC_CAP_DEFAULT capabilities
2023-10-29 20:55:02 -05:00
Gregg 5ce7211539 Made conforming changes to setVerboseWiFiReconnect 2023-10-28 18:40:04 -05:00
HomeSpan 871eba3c1d
Merge branch 'release-1.8.1-dev' into verbose_reconnect 2023-10-28 18:16:48 -05:00
Gregg 81ee9e2dbc Added homeSpan.setWifiCallbackAll(int n)
Adds a second type of WiFi Callback that is called every time WiFi is established OR re-established after a disconnect.  Passes the number of times WiFi has been connected as an argument.
2023-10-28 17:06:40 -05:00
Francois 2bda112780 Verbose WiFi Reconnect
Add the ability to turn off WiFi reconnect messages.
2023-10-27 08:17:06 -04:00
Gregg 4de61e5914 Change webLogCallback() to pass String as reference 2023-10-24 13:43:04 -05:00
Gregg 0f96d0fff6 Added homeSpan.setWebLogCallback(String (*f)())
Allows extension of initial table produced in WebLog, where f is a function that returns a String.  The returned String is copied into the WebLog HTML just before the </table> tag is printed in the initial table.
2023-10-22 18:23:25 -05:00
HomeSpan 34651307db
Merge pull request #631 from cccat6/master
Support the Non-English WiFi name
2023-10-22 10:21:12 -05:00
Gregg e0517a5964 Bumped release to 1.8.1 2023-10-22 10:09:22 -05:00
Francois 3e26b9039d Preventing possibility of buffer overwrite. 2023-10-02 16:14:19 -04:00
Yitao Jiang 1cd01205a3
Support Non-English WiFi name 2023-08-20 20:05:47 +08:00
Gregg 3396a5ff96 Refactored Controller Structure and Add/Remove/List/Save Functions
Changed fixed-size array `struct Controller[MAX_CONTROLLERS]` to a dynamic linked-list of Controllers.  Re-coded all related functions.  MAX_CONTROLLERS no sets the size of any buffers but is only used to limit the ultimate size of the linked-list.

Saved about 1K of RAM since most of the time there are only 2 Controllers defined (as opposed to the 16 allowed).
2023-08-03 22:29:31 -05:00
Gregg 5a356432b3 Simplified `uint8_t *TLV<tagType, maxTags>::buf(tagType tag, int len)`
Also updated HAP.cpp to use new `uint8_t *TLV<tagType, maxTags>::buf(tagType tag, uint8_t *src, int len)`
2023-07-30 21:54:14 -05:00
Gregg a84429f930 Refactored TLV
* Added support for zero-length TLV
* Added SEPARATOR as a formal kTLVType (and updated listControllers() to use)
* Added `uint8_t *buf(tagType tag, uint8_t *src, int len);` to load buffer needing external memcpy (and updated listControllers() to use)
2023-07-30 21:37:47 -05:00
Gregg 17410e825e Completed adding LIST to HAPClient::postPairingsURL()
HomeSpan now correctly responds to pairing list requests
2023-07-29 08:35:01 -05:00
Gregg 7325baa1a5 Added HAPClient::listControllers()
Will be used for pairings list request
2023-07-29 01:21:55 -05:00
Gregg bf057e2fad modified HAP::receivedEncrypted() to use TempBuffer instead of fixed stack array 2023-07-28 19:51:56 -05:00
Gregg 131e5b1a92 Removed duplicate if(POST /pairings) 2023-07-28 19:38:16 -05:00
Gregg 793f7882b1 Replaced appropriate snprintf() with asprintf() and used *m in sscanf
Optimized use of heap memory instead of stack memory for temporary variables, and makes code easier to read, provided all heap usage is free() at end of each function.

Also removed char *hostName as a member variable of homeSpan.  It's never actually used since MDNS constructs its own copy of hostName as needed.
2023-07-26 22:46:20 -05:00
Gregg 0f6e58435e Update Network.cpp 2023-07-26 20:35:27 -05:00
Gregg 62f68cb33c Upgraded TempBuffer logic to use .get() to return pointer
Next up: update Network.cpp to use client.available() and reduce fixed memory usage.
2023-07-26 06:27:54 -05:00
Gregg 5f9458e625 Converted static HTTP Buffer to dynamic TempBuffer
Saved about 8K in RAM!
2023-07-25 05:54:40 -05:00
Gregg a73b206531 Update src.ino 2023-07-21 17:36:57 -05:00
Gregg 4557e3866f Converted various homeSpan.set() methods from void to Span& to enable chaining 2023-07-21 13:27:31 -05:00
Gregg 57a85bf0c8 Bumped version to 1.8.0 in preparation for release 2023-07-08 21:09:48 -05:00
Gregg 6aedec5a2d Added ability to chain enable(), disable(), and brake() 2023-07-08 17:56:33 -05:00
Gregg f7419da35b Final test of motorized shades 2023-07-08 16:55:22 -05:00
Gregg db0f522297 Added DRAM/IRAM memory stats to 'm' CLI command 2023-07-05 06:05:10 -05:00
Gregg 62b1e9bd35 Update src.ino 2023-07-03 07:05:51 -05:00
Gregg 568c13fee3 Tested homeSpan.setStatusDevice() to create a reverseLED 2023-07-02 17:12:58 -05:00
Gregg 9a42f0885c Added [override] to onStep 2023-07-02 11:39:31 -05:00
Gregg 195095c891 Changed setAccel() and setStepType() to return StepperControl*
Allows for daisy-chaining of configuration parameters.

Also added initialization of upLinkData in motorTask to prevent time-outs if setMove() is never called (by initializing msDelay=10)
2023-07-02 11:13:55 -05:00
Gregg 6ab047b011 Update extras.ino 2023-07-01 09:01:11 -05:00
Gregg 9bfc07041d Creating Stepper Motor images 2023-06-25 21:50:10 -05:00
Gregg c5a40c6e34 Added ability to set cpu and priority for motor task using pair {} 2023-06-22 21:25:18 -05:00
Gregg e422d3c9de Updated StepperMotorControl Window Shade Example to use setPosition()
Example now saves window shade position in NVS and uses setPosition() accordingly upon initialization.
2023-06-20 21:23:03 -05:00
Gregg fe4d83140f Completed motor control setPosition()
Updated logic of setPosition(), move(), and moveTo() to use waitForAck() so that an initial acknowledgment is received from the motorTask() before proceeding.
2023-06-19 21:24:23 -05:00
HomeSpan 480af6cf85 Added setPosition() to StepperControl
Needs testing and debugging
2023-06-18 17:55:29 -05:00
Gregg 2eb70f1d1b Changed links from HomeStep to HomeSpan 2023-06-09 23:15:38 -05:00
Gregg 536de53075 Added Stepper_TB6612 and Stepper_A3967 directly to HomeSpan
HomeSpan now includes both drivers as part of the "extras" functionality.
The StepperMotorControl Window Shade Example has been updated accordingly to use the built-in TB6612 driver.
2023-06-09 23:11:38 -05:00
Gregg 44e48a4534 Update extras.ino 2023-06-04 09:20:37 -05:00
Gregg 5e1d65f436 Renamed SpanStep to StepperControl and moved into HoneSpan Extras
Also updated StepperMotorControl Example.
2023-05-30 05:05:51 -05:00
Gregg 21da828f83 Update HomeSpan.cpp 2023-05-13 15:39:01 -05:00
Gregg d33bbf2477 Update src.ino 2023-05-13 10:36:17 -05:00
Gregg 40bb97215f Added homeSpan methods setSerialInputDisable() and getSerialInputDisable()
Provides ability to disable HomeSpan from reading from Serial port (which is otherwise normally enabled)
2023-05-13 10:34:21 -05:00
Gregg de97faee37 Converted Serial.printf in extra classes to ESP_LOGI and ESP_LOGW
Changed Serial.printf() diagnostic messages to either ESP_LOGI() or ESP_LOGW() macros in Blinker, PWM (LedPin and ServoPin), Pixel, and RFControl class
2023-05-12 21:32:21 -05:00
Gregg 7bc885dd26 Completed initial migration of Serial.print to LOG0
Finished all applicable cases in main source code.
TO DO: apply LOG0 to extras
2023-05-10 22:12:21 -05:00
Gregg 66bb13af03 Continued change from Serial.print to LOG0() 2023-05-08 22:43:42 -05:00
Gregg 368ce12c04 Started work on converting all Serial.print() to LOG0() macro 2023-05-08 17:07:21 -05:00
Gregg d5eb2ceeb8 Update src.ino 2023-05-07 13:41:27 -05:00
Gregg 0f3b798fcc Bumped version to 1.7.3 2023-04-29 15:18:33 -05:00
Gregg ec1cd44382 Small tweaks to reset reasons in web log 2023-04-27 19:53:33 -05:00
HomeSpan 5e71e5b4d5
Merge pull request #566 from frankonski/dev
Added description of Reset Reason Code to WebLog.
2023-04-27 20:36:52 -04:00
Gregg beb79538e9 Update to WebLog TimeServer Logic
Acquiring time from a timeserver is now spawned as a separate task running in the background.  This avoids blocking HomeSpan while setting the time.

Default wait time has been extended from 10 seconds to 2 minutes, since there are no problems with blocking.
2023-04-27 19:29:05 -05:00
Francois 7e08e00734 Added description of Reset Reason Code to WebLog. 2023-04-26 13:51:42 -04:00
Gregg 2ce78fead6 Added charset=utf-8 to weblog to allow for utf-8 encoding 2023-04-23 15:14:57 -05:00
Gregg 947e2af012 Added homeSpan.setWebLogCSS(const char *css)
Allows user to define a custom style sheet to change the webLog output.  Style sheet is based on pre-defined class:

bod1 = main body of web page, including header (in format of <h2>)
tabl1 = top table showing general status
tab2 = bottom table showing all weblog entries
2023-04-23 10:01:00 -05:00
Gregg 6fca946dd5 Added Sodium and MbedTLS versions, and Pairing Status, to Web Log 2023-04-23 07:46:37 -05:00
HomeSpan 889a326e02 Address conflict between SpanButton and certain Adafruit Boards
Change enum from BUTTON and TOGGLE to HS_BUTTON and HS_TOGGLE to avoid conflict with #define BUTTON in certain Adafruit boards
2023-04-20 21:56:55 -04:00
Gregg 5853989651 Update src.ino 2023-04-08 17:17:47 -05:00
Gregg c287564aed Update HomeSpan.cpp 2023-04-03 17:15:51 -05:00
Gregg 2ba75c13ea Add CLI commands 'p' and 'P' to clone device pairing data 2023-04-03 08:28:51 -05:00
Gregg f466e12c7a some cleanup of LedPin comments in examples
Removed old references to "channels" which should have been deleted many versions ago
2023-04-01 12:16:15 -05:00
Gregg ce36174f93 Completed LED fading functionality; added new Fading LED example (in Other Examples) 2023-03-31 22:07:31 -05:00
Gregg fab94722d8 Revert "Added fadeTime parameter to LedPin::set()"
This reverts commit c2df57815c.
2023-03-26 07:48:22 -05:00
Gregg c2df57815c Added fadeTime parameter to LedPin::set() 2023-03-26 07:39:06 -05:00
Gregg a79b7569d1 Begin implementation of hardware LEDC fade 2023-03-25 23:05:22 -05:00
Gregg 6079b8edf7 Bump version to 1.7.2 2023-03-25 12:19:08 -05:00
Gregg ecd97e6e71 Added option to set Priority and CPU in autoPoll()
Also added vTaskDelay(5) in pollTask to make sure competing tasks can operate (for example, if priority was set to greater than 2, touch sensor did not operate).  Adding vTaskDelay(5) solved this problem.
2023-03-25 10:58:03 -05:00
Gregg 75930a1d6e Update FeatherPins.h
Changed from old ESP32-C3-DevKitM-1 to new ESP32-C3-DevKitC-02
2023-03-17 22:26:52 -05:00
Gregg cde3348b79 Update src.ino 2023-02-25 15:34:14 -06:00
Gregg 09063fb7dc Extended functionality of setValidValues() to allow INT, UINT8, UINT16, and UINT32 Characteristics 2023-02-25 15:07:02 -06:00
Gregg 7e3d26fe6e Removed initialization of WiFiClient in HAP.h
See #508 for details.
2023-02-18 22:21:54 -06:00
Gregg 69af3d59a3 Replaced Service definitions with macros CREATE_SERV and END_SERV
This has no effect on the code but the names of the macros can be used as flags for an external script to autogenerate documentation in the form of a list of all services and characteristics supported by HomeSpan
2023-02-16 07:23:22 -06:00