unread contained two subtle bugs:
- it created a buffer chunk at pipe[1], when that position is reserved
for the pipe reader function. Because it shifted pipe[i] to
pipe[i+1], including pipe[1], this was likely to manifest as the pipe
later attempting to dequeue a function rather than a buffer chunk
user datum. Solve this by adjusting the loop bounds and creation
index.
- when it created a new buffer chunk, it left that chunk's ->start and
->end fields at 0, but would then exit the loop to do the tail fill,
which was in turn assuming the exit condition of the loop when an
existing chunk had room, namely that data had been moved to the right
and so ->start > l. Solve this by making new chunks empty but with
->start = ->end = LUAL_BUFFERSIZE. It may be slightly better to
instead try to leave room at both ends if the buffer was empty prior
to this unread.
FIXES: https://github.com/nodemcu/nodemcu-firmware/issues/3155
* It appears that the rf_pre_init is not called any more. Also cleaned up the code in
wifi_common.
* Log a message (at the right baud rate) if the hostname is invalid
* Updated the comment in the user_config.h file
* Don't adjust the clock until after we deal with rtctime...
* Switched to using START_OPTION_CPU_FREQ_MAX instead.
* Use setfield and add caching of the startup option
* Put the startupcounts warning into a warning box
* SoftUART fixes:
- Simplify code by using lua_L* functions and using userdata properly
- Fix some edge-cases
- Add more examples to documentation
* Don't de-register interrupt hook if there is more RX instances
* More bug fixes and registering simplification with luaL_reref and unref2
* Correct documentation of SoftUART module
* Change struct to use integers. This is slightly more complex as we have to deal with Unsigned 32-bit integers (that aren't lua integers)
* Use int64 in struct rather than double.
* Fix sjson to do the right things in LUA5.3 with integers and floats
I've not been able to get the mqtt `connfail` callback to work.
I'm consistently receiving `method not supported` errors:
```
application.lua:53: method not supported
stack traceback:
[C]: in function 'on'
application.lua:53: in main chunk
[C]: in function 'dofile'
init.lua:18: in function <init.lua:6>
```
Example code:
```
function on_connection_failed(client, reason)
print("mqtt connection failed: " .. reason)
end
m:on("connfail", on_connection_failed)
```
I believed this to be caused by the incorrect length comparison for `connfail`
that is updated here.
Once I changed that, the error went away, however the callback was never called.
I believe the callback was never called because of an incorrect assignment.
However, I saw this somewhat confusing description in the docs so this
assignment may be expected?
> The second (failure) callback aliases with the "connfail" callback available through :on(). (The "offline" callback is only called after an already established connection becomes closed. If the connect() call fails to establish a connection, the callback passed to :connect() is called and nothing else.)
* DHT module: fix the handling of negative temps.
The macro handling the conversion from the 2 bytes buffer to a double
was handling negative values by checking the sign bit and taking the
negative value of the number minus the sign bit.
Unfortunately this does not work as the negative values are represented
in 1's complement, so for instance -1 was becoming -32767
* +1 = b0000_0000_0000_ 0001
* -1 = 1111_1111_1111_1111
This replace the spacial code with a signed 16 bits value.
* Refactoring: removes some code duplication.
* Fixed the conversion of the 8/16 bits values
Co-authored-by: Marco Dondero <marco@dondero.eu>
connecting to server.
Inside af426d0315, the `mqtt_socket_timer`
function was modified so that instead of checking the presense of
allocated `mud->pesp_conn` structure, `mud->connected` field was used
on determining if the timer need to be disarmed.
However, this is not entirely correct. If the TCP socket is actively
connecting and haven't timed out yet, then `mud->connected` is also
`false` and the timer will think the connection is broken and
disarms itself. This has two consequences:
* The connection timeout counter is no longer decremented and checked
* After connection succeeds, keepalive heartbeat is no longer being
sent (#3166). This is particularly noticeable in MQTT over TLS
connections, because those usually takes longer than 1 second
to finish and the timer would had chance to execute before connection
is established
This commit checks the presense of `pesp_conn->proto.tcp` pointer
instead, which was allocated in the same place as the (old) `pesp_conn`
struct, and according to my test indeed fixes the above issue.