* Added keyboard option to menu. Shows a keyboard layout but does not type.
* Keyboard types into text box and wraps.
* send FreeText messages from the send submenu
- renamed `KEYBOARD` action to `FREE_TEXT` and moved its menu location
to the send submenu
- opening the FreeText applet from the menu keeps the menu open and
disabled the timeout
- the FreeText applet writes to inkhud->freetext
- the sending a canned message checks inkhud->freetext and if it isn't
empty, sends and clears the inkhud->freetext
* Text scrolls along with input
* handle free text message completion as an event
implements `handleFreeText` and `OnFreeText()` for system applets to
interface with the FreeText Applet
The FreeText Applet generates an `OnFreeText` event when completing a
message which is handled by the first system applet with the
`handleFreeText` flag set to true.
The Menu Applet now handles this event.
* call `onFreeText` whenever the FreeText Applet exits
allows the menu to consistently restart its auto-close timeout
* Add text cursor
* Change UI to remove the header and make text box longer
Keyboard displays captial letters for legibility
Keyboard types captial letters with long press
* center FreeText keys and draw symbolic buttons
Move input field and keyboard drawing to their own functions:
- `drawInputField()`
- `drawKeyboard()`
Store the keys in a 1-dimensional array
Implement a matching array, `keyWidths`, to set key widths relative to
the font size
* Add character limit and counter
* Fix softlock when hitting character limit
* Move text box as its own menu page
* rework FreeTextApplet into KeyboardApplet
- The Keyboard Applet renders an on-screen keyboard at the lower portion
of the screen.
- Calling `inkhud->openKeyboard()` sends all the user applets to the
background and resizes the first system applet with `handleFreeText` set
to True to fit above the on-screen keyboard
- `inkhud->closeKeyboard()` reverses this layout change
* Fix input box rendering and add character limit to menu free text
* remove FREE_TEXT menu page and use the FREE_TEXT menu action solely
* force update when changing the free text message
* reorganize KeyboardApplet
- add comments after each row of `key[]` and `keyWidths[]` to preserve
formatting
- The selected key is now set using the key index directly
- rowWidths are pre-calculated in the KeyboardApplet constructor
- removed `drawKeyboard()` and implemented `drawKeyLabel()`
* implement `Renderer::clearTile()` to clear the region below a tile
* add parameter to forceUpdate() for re-rendering the full screen
setting the `all` parameter to true in `inkhud->forceUpdate()` now
causes the full screen buffer to clear an re-render. This is helpful for
when sending applets to the background and the UI needs a clean canvas.
System Applets can now set the `alwaysRender` flag true which causes it
to re-render on every screen update. This is set to true in the Battery
Icon Applet.
* clean up tile clearing loops
* implement dirty rendering to let applets draw over their previous render
- `Applet::requestUpdate()` now has an optional flag to keep the old
canvas
- If honored, the renderer calls `render(true)` which runs
`onDirtyRender()` instead of `onRender()` for said applet
- The renderer will not call a dirty render if the full screen is
getting re-rendered
* simplify arithmetic in clearTile for better understanding
* combine Applet::onRender() and Applet::onDirtyRender() into Applet::onRender(bool full)
- add new `full` parameter to onRender() in every applet. This parameter
can be ignored by most applets.
- `Applet::requestUpdate()` has an optional flag that requests a full
render by default
* implement tile and partial rendering in KeyboardApplet
* add comment for drawKeyLabel()
* improve clarity of byte operations in clearTile()
* remove typo and commented code
* fix inaccurate comments
* add null check to openKeyboard() and closeKeyboard()
---------
Co-authored-by: zeropt <ferr0fluidmann@gmail.com>
Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com>
* Change canned message recipient's previous page to send page
* Set previousPage for new menu pages
Set nextPage in back MenuPages to previousPage
Removed back MenuAction
---------
Co-authored-by: zeropt <ferr0fluidmann@gmail.com>
Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com>
* Remove noop CANNED_MESSAGE_MODULE_ENABLE define
* Remove over-eager warning removal
* Remove unused LED_CONN
* Dead defines removal
* Rename oddball LED pin name
* Rename second oddball LED pin name
* Remove another dead define
Using long interleaving is not a breaking change, the receiver node is able
to use the lora header to know if LI encoding is used or not and will
decode LI packets correctly.
However the problem is SX127x and other first generation LoRa IP which do not
support LI at all, for theses it is a breaking change.
HOWEVER due to the sync word bug the LR11x0 already can't talk with SX127x,
so if we enable LI on theses no one would be able to tell.
Same for SX128x altho this is because it works on 2.4Ghz which is incompatible with SX127x.
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* better logic to check if the RAK12035 soil sensor is calibrated, better log messaging if either of the default values were used.
* .
* changes to how default calibration is done and a message it the default calibration is used pointing to the actual calibration sketch so the user can find it and use it to improve accuracy.
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* First steps in consolidating code and minimizing rewrite
* Continuing code cleanup
* Merge containsBell and !isMuted to a single code path
* Forgot about alert_message_buzzer in the cleanup
* More code refinements and cleanup
* Fix nagCycleCutoff
* CoPilot Updates
* InkHUD: Region Picker on initial setup
* Added Node Config menu with Lora Region Picker
* Role picker
* Preset Picker
* Timezone picker added
* Power save mode and bluetooth configs
* Config section Headers
* Channel Config
* Cleaning some behavior
* Add back to all Options
* Display config added
* Position Toggle added
* Network Config for ESP32
* Wifi details
* Reduce line spacing to fit more content
* Recent list with checkboxes
* Timezone labels easier to understand
* Trunk fix
* Added "Saving Changes" screen when reboot is needed
* Trunk fix
* Make Tips show after first boot if the region is Unset
* Added ResetDB and keep only favorite commands
* quick fix to joystick
* Trunk Fix
* Fix to tips to work with new joystick input
* Added ADC multiplier value display on power config
* added ADC calibration feature
* Fixed missing stray endiff
* GPS toggle now is aware if gps is present.
Support softsleep by defining PIN_GPS_STANDBY on CDTop CD-PA1010D.
This differs from existing MTK GPS e.g. L76K, where pulling PIN_GPS_STANDBY (WAKE-UP pin) low is not sufficient to put the GPS module in standby.
An additional `$PMTK225,4*2F` must be sent to enter "Backup Mode", which is exited by bringing PIN_GPS_STANDBY (WAKE-UP pin) high.
Refer to datasheet[0] §1.9.3 "Backup Mode".
0: https://cdn-learn.adafruit.com/assets/assets/000/084/295/original/CD_PA1010D_Datasheet_v.03.pdf
Signed-off-by: Andrew Yong <me@ndoo.sg>
* Improve NRF52 bluetooth power efficiency
* test T114 bad LFXO
* T1000 test
* force BLE param negotiation
* stash
* NRF52 bluetooth small cleanup
* fix potential connectivity issues
* lower BLE min interval to make iOS happy
* remove slave latency negotation
* add BLE issue comment
* code format
* Revert "code format"
This reverts commit 1f92b09d08.
* remove LFCLK debug info
* Fix
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Delete unused code
CryptoEngine::clearKeys() is not used in the code base, therefore this
cleanup removes the code. It might give casual reviewers the impression,
that keys are wiped.
Since the code uses memset() which might be optimized away by the
compiler, using the code might not even cause the memory
to be wiped.
* Update CryptoEngine.cpp
Fix stray newline, this is the only thing that I can come up with that might confuse the linter.
---------
Co-authored-by: Jason P <applewiz@mac.com>
* asked claude to fix the gps power rail issue when the io slot is in use.. this fixes the gps when both the RAK12500 GPS module and the RAK12035 soil sensor modules are being used.
* remove do { ... } while(0) from RESTORE_3V3_POWER() Macro
* remove some comments
* cleaner macro
* removed more excessive comments
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Make BLE TX power configurable for nRF52 variants
* Include BLE TX power setting in T114 variant.h as tested
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Message Bubbles
* Angled edges
* Proper indent for messages inside the bubble
* Fix message header line width
* Correctly calculate text width for the header and shrink Channel Name is on OLED
---------
Co-authored-by: Jason P <applewiz@mac.com>
* run trunk fmt -a
* fix bracket bug
This was introduced by @tedwardd and @thebentern in 021106dfe5.
See this diff:
else
+ checkConfigPort = false;
printf("Using config file %d\n", TCPPort);