Skip to content

Conversation

marcelstoer
Copy link
Member

Please approve.

devsaurus and others added 30 commits September 20, 2016 23:37
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.

It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there.  As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
Reintroduce automatic esp_init_data flashing, plus updated docs.
* Fix some issues in gpio.serout
* Minor cleanup
* Version to make filesystem detection more reliable
* Improve bad fs detection
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages

* Add tag to HTTP error messages

* Create macro for error msg and improve dbg msg
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c

* Wifi module: add new functionality, update documentation

Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list 
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration

functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table

Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c` 
- Updated documentation for `wifi.sta.disconnect`to address issue #1480 
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`

* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`

* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.

* fix error in documentation for `wifi.sta.getapindex`

* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit 
wifi.sta.apchange -> changeap

also organized the wifi_station_map array
Squashed commits included:

Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues

Added /status.json endpoint for phone apps/XHR to get JSON response

Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)

Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.

HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)

* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
marcelstoer and others added 12 commits November 10, 2016 21:31
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
Looks good to me. Thank you.

Also:
 - allow for '\0's in received messages

* add client:config for setting websocket headers

Also:
 - headers are case-insensitive now

* fix docs

* fix typo

* remove unnecessary luaL_argcheck calls

* replace os_sprintf with simple string copy
* handle error condition in file.read()

* simplify loop initialization
This is done to avoid the accidental upval binding
rtctime.dsleep -> rtctime.dsleep_aligned
@pjsg
Copy link
Member

pjsg commented Nov 30, 2016

Do we need to fix the iram/rom section contents? I was playing with a custom build last night with a lot of modules and the system didn't boot. It turned out that I could fix this by making one of the data structures in the websocketclient.c code into a static. I didn't try a plain dev build with all modules, but it is definitely worth a try.....

@marcelstoer
Copy link
Member Author

This was for #1566, right? Not sure...I'd vote against it. It's a rather far-reaching change which fixes something that is not critical (yet) for the large majority of our developers.
I planned to merge it into dev (together with the EUS fix) right after this master drop.

@pjsg
Copy link
Member

pjsg commented Nov 30, 2016

I certainly want to try a clen dev build with lots of modules and see if it boots on a real nodemcu before we merge this one.

@djphoenix
Copy link
Contributor

I definitely vote for merge #1566 after master drop (so with sdk2.0.0), because this is huge change that should be tested in Dev as long as it can. For master drop - I vote up for this, it seems this is stable right now.

@pjsg
Copy link
Member

pjsg commented Dec 1, 2016

I now can't reproduce my problems from last night.....

@marcelstoer marcelstoer merged commit 04ce0ad into master Dec 1, 2016
@devsaurus
Copy link
Member

Shouldn't this have been a merge commit instead of a squash?

@marcelstoer
Copy link
Member Author

Oh bloody h... of course it should have been! I'm really sorry. Is this bad enough to warrant reverting?

@devsaurus
Copy link
Member

Github's compare for a PR from dev to master looks bad at the moment. The common baseline of the two branches isn't automatically detected and all commits since the last drop are scheduled again.
If feasible, this should be reverted IMO.

@marcelstoer
Copy link
Member Author

marcelstoer commented Dec 7, 2016

Hhmm, wouldn't know how to fix this properly. The tag on master could be dropped and this PR merge could be reverted, no problem. However, since we had merges on dev in the meantime we couldn't simply replay this PR, could we? We'd snap the current state of dev - unless all commits are cherry-picked.

@marcelstoer
Copy link
Member Author

Maybe this would be the way to go: http://stackoverflow.com/a/28497372/131929

@pjsg
Copy link
Member

pjsg commented Dec 7, 2016

You could revert the commit to master. Then do a PR from the correct commit on dev to master and merge that. It should work as those commits will not be on master (and never were on master).

@devsaurus
Copy link
Member

The revert branch will contain the original commits or just the squashed commit?

Like Philip proposed, we could create a new branch eg. dev_for_drop based on 85c3a24 and start a PR for this.

@pjsg
Copy link
Member

pjsg commented Dec 7, 2016

The revert will just be a single commit that undoes the squashed commit.

@marcelstoer
Copy link
Member Author

marcelstoer commented Dec 7, 2016

Ok, hold on tight. Let's see if I manage to fix my mess... Nope, at least not easily. GitHub can't automatically revert because of conflicts. I'd have to manually revert all 40+ commits - except that they never were on master 😭 What if we merged the dev-for-drop on top of the existing squashed PR?

marcelstoer added a commit that referenced this pull request Dec 7, 2016
@marcelstoer
Copy link
Member Author

Ok, it's all over and it didn't even hurt that much. Sorry again for all the trouble. I'll add a fat reminder to https://github.com/nodemcu/nodemcu-firmware/blob/master/CONTRIBUTING.md#handling-releases for next time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.