Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v2.7.8 release #1201

Merged
merged 2 commits into from
Jun 23, 2020
Merged

v2.7.8 release #1201

merged 2 commits into from
Jun 23, 2020

Conversation

crankyoldgit
Copy link
Owner

v2.7.8 (20200622)

[BREAKING CHANGES]

[Bug Fixes]

[Features]

[Misc]

_v2.7.8 (20200622)_

**[BREAKING CHANGES]**
- Fix Manchester code handling; Increase Airwell to `34` bits. (#1200)

**[Bug Fixes]**
- Carrier40: Use correct gap value. (#1193)

**[Features]**
- CarrierAc64: Add detailed support. (#1133)
- Add experimental support for Hitachi A/C 344 bit protocol (#1139)
- Automatic & full library code/API documentation via Doxygen (#1150 #1154 #1155 #1156 #1158 #1165 #1167 #1169 #1180 #1184 #1189 #1191 #1194 #1195 #1197 #1198)
- Hitachi344: Add detailed support and change bit ordering. (#1147)
- Add Corona AC Protocol (#1152)
- Hitachi344: Add Swing(H) and improve Swing(V) (#1148)
- Update auto_analyse_raw_data.py with better code comment sections (#1164)
- Add support for Midea24 protocol. (#1171)
- Add basic Zepeal protocol support (#1178)

**[Misc]**
- scrape_supported_devices.py: avoid changes to SupportedProtocols.md (#1140)
- auto_analyze nice exit on empty rawdata input (#1141)
- Comments update + cleanup (#1143)
- Update D_STR_IRRECVDUMP_STARTUP text and comments. (#1144)
- Minor code cleanups (#1149)
- Update `README.md`'s to point to new API docs. (#1151)
- Update "Supports" sections (#1160)
- Add a `doxygen` check to CI/Travis. (#1161)
- scrape_supported_devices: warn about misplaced or legacy supports sections (#1159)
- Add Supports sections to some files (#1163 #1166)
- Fix compile error when `DEBUG` is enabled.
- Add no-output option and return code on error to scrape_supported_devices
- Travis: Add scrape_supported_devices error check
- Update auto_analyse_raw_data.py to have a default Supports: section
- Treat compiler warnings as errors. (#1174)
- Remove `calcLGChecksum()` and use new generic `sumNibbles()` (#1175)
- Suppress more potential compiler warnings. (#1179)
- Load balance travis tasks to reduce wall clock time. (#1183)
- Set PlatformIO's default baudrate to 115200 (#1188)
- Some fixes to Doshisha protocol handler
- Minor cleanups of Corona and Zepeal
- Enable Doxygen warning when the parameters for a function/method/procedure are wrong/missing. (#1196)
@crankyoldgit
Copy link
Owner Author

@NiKiZe Hopefully, this will be the worst release PR to review (if you even need to) as it includes ALL the updated doxygen stuff we've both done for the past few weeks.
There are no code changes in this PR, just followed the wiki "new version checklist" (which I updated along the way)

@NiKiZe
Copy link
Collaborator

NiKiZe commented Jun 23, 2020

Should Hitachi344 be marked as breaking as well?

@crankyoldgit
Copy link
Owner Author

Should Hitachi344 be marked as breaking as well?

I thought about it, but it isn't "breaking" from 2.7.7. it wasn't included in that release.

@crankyoldgit crankyoldgit merged commit c705abd into master Jun 23, 2020
@crankyoldgit crankyoldgit deleted the v2.7.8 branch June 23, 2020 08:59
@s-hadinger
Copy link
Contributor

Great job. I updated Tasmota accordingly. The code impact is +5.2kb.

Do you have any idea that could shrink back the code size a little? We still have headroom but we may eventually need to specialize some version with only a fraction of the protocols.

@crankyoldgit
Copy link
Owner Author

Great job. I updated Tasmota accordingly. The code impact is +5.2kb.

@s-hadinger Thanks for the data point and the feedback. The code size impact is in-line with what I'd expect given the additions. i.e. ~2K per detail protocol, ~0.5K per detail-less protocol.

Do you have any idea that could shrink back the code size a little? We still have headroom but we may eventually need to specialize some version with only a fraction of the protocols.

There are some very small code (space) optimisation that are left, but I can't see them saving more than a couple of K total.
Each time we add an AirCon it going to increase by 1-2K (and we've got another waiting to be merged already)

From a Tasmota perspective, I think you need to assume this library will grow similarly every month or so if you include every protocol.
My guess(es) are the .toString() methods are something you might be able to ditch if you can avoid them.
Any use of these will cause significant code increase too:

IRremoteESP8266/src/IRac.h

Lines 405 to 410 in 576e71b

/// Common functions for use with all A/Cs supported by the IRac class.
namespace IRAcUtils {
String resultAcToString(const decode_results * const results);
bool decodeToState(const decode_results *decode, stdAc::state_t *result,
const stdAc::state_t *prev = NULL);
} // namespace IRAcUtils

The IRac common A/C api is probably the bulk of the bloat from your perspective. Maybe have a tasmota version with all IR protocols but no IRhvac support at all, and then have a version with just the IRhvac ones and maybe the base level ones included in the standard tasmota build?

Maybe also have a "send only" version? The decode parts for each protocol are the largest/most complex etc.

If you or anyone else has suggestions on how to save significant space (e.g. 1-2K at a time), I'm all ears.

@s-hadinger
Copy link
Contributor

Indeed, having a "send only" version would be a nice alternative, especially for HVAC protocols. However I have already heard users that wanted to capture IR interactions too.

I didn't spot any obvious area where to reduce code size. Maybe there is code factorization possible.

For ex: IRAcUtils::decodeToState() could be a candidate. If all classes inherited from the same base class, you could leave only constructors in the switch/case, and have only one final ac.setRaw(decode->state); *result = ac.toCommon();. I understand there are some exceptions as some need ac.setRaw(decode->value); instead. This could save some Flash size.

@crankyoldgit
Copy link
Owner Author

Indeed, having a "send only" version would be a nice alternative, especially for HVAC protocols. However I have already heard users that wanted to capture IR interactions too.

This is just my $0.02/personal opinion. Most people don't need to detect/decode in-bound IR A/C messages. I'd figure most people just want to control their A/C. Some might want to use an IR remote to control something. i.e. press button on remote, have tasmota generate a MQTT message and turn on/off the fan/kettle/lamp etc.
They'd probably do that with something like NEC etc.

So, I'd give them the base tasmota decode IR protocols + send-only for all other protocols. i.e. they can still capture raw etc.
removing all the AC decodes will save some space, but not a massive amount.

Perhaps having two "full" versions. Both with all "simple" protocol send/decodes etc, and each having A-M & N-Z "detailed" A/C protocols respectively?

I didn't spot any obvious area where to reduce code size. Maybe there is code factorization possible.

Yeah, I'm running out of obvious savings. :-(

IRAcUtils::decodeToState()

I think the amount of coding to try to reduce the space used by decodeToState() would just be transferred to each A/C class. Thus no nett gain. That said, I sorely want to make that & the to String variant simpler if I can. :-/

@s-hadinger
Copy link
Contributor

Thanks, good insights. We still have some headroom for now. Indeed if we need to shrink code, having a send-only HVAC version makes sense.

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

Successfully merging this pull request may close these issues.

3 participants