Commit Graph

66 Commits

Author SHA1 Message Date
Scott Allen 2d04cf60e1 Change non-API EEPROM defines to constexpr
Macro defines for system EEPROM access that were not intended to be
part of the API have been made into protected constexpr variables of
the Arduboy2Base class.
2020-07-24 17:15:37 -04:00
Scott Allen 6a8041f2fa Start boot logo with a row visible on screen
The first time the boot logo was displayed, for scrolling it down,
it was entirely off screen. It now starts with the lowest row of pixels
visible.
2020-07-24 17:15:37 -04:00
Scott Allen 205e84eae6 Fix off screen tests for bitmap functions
Issue reported by @MrBlinky
For drawBitmap(), drawSlowXYBitmap() and drawCompressed() the initial
check for the bitmap being entirely off screen would sometimes consider
a bitmap to be partially on screen when it is only one pixel above or
to the left of the screen. This would result in unnecessarily doing the
work to draw the bitmap when none of it would be visible.
2020-07-24 17:15:37 -04:00
Scott Allen 0adb83693a Add functions anyPressed() setCursorX() setCursorY()
Suggested by @Pharap
2020-07-24 17:15:37 -04:00
Scott Allen 53096d87bf Refactor API code. Clarify and enhance user docs.
Includes some suggestions and guidance by @Pharap

API:
- Rename non-API function swap() to swapInt16()
- Make swapInt16(), drawCircleHelper(), fillCircleHelper() and
  struct BitStreamReader protected members of Arduboy2Base
- Add #define ARDUBOY_UNIT_NAME_BUFFER_SIZE for the size of a buffer
  to hold a Unit Name
- Move the position of the PROGMEM keyword for lcdBootProgram[]
  for consistency

Documentation:
- Remove absolute values referring to a Unit Name
- More details relating to the use of the Unit Name
- More details relating to the font and text functions
- Other minor documentation changes and spelling corrections
2020-07-24 17:15:13 -04:00
Scott Allen 4f884f4ed2 Make font and logo data arrays class members
To address a compiler warning for the font array and improve the API.
With help and guidance from @Pharap
2020-07-20 19:12:45 -04:00
Pharap 4e513a15d0
Make Rect and Point's constructors constexpr 2020-02-21 18:18:15 +00:00
Blake W. Ford 6ded14fb0e Use local label for loop in fillScreen() assembly
To fix error: symbol loopto is already defined with -O3 optimization.
2019-02-27 14:48:29 -05:00
Scott Allen 195d3e5cde Add C++ equivalent code for drawPixel() 2018-11-15 19:27:26 -05:00
Mr.Blinky 2941ed100f Fix a compiler issue and optimize drawPixel()
The new compiler in Arduino IDE 1.8.6/1.8.7 has an optimization glitch
where it fails to see the difference between a data structure in RAM
and in PROGMEM when the data is the same and optimizes one out.

drawPixel() is unable to fetch the correct pixel mask from the
bitshift_left array in PROGMEM causing junk to be drawn.

The bitshift_left[] array has now been optimised out and drawPixel()
will function properly. The optimization uses the same number of cycles
and saves 6 bytes.

drawPixel() has also been made static so the Arduboy object pointer is
no longer needlesly passed on to drawPixel() saving more bytes.
2018-11-15 19:26:58 -05:00
Pharap 1f86208163 Add constructors to Point 2018-11-13 12:19:35 -05:00
Pharap bc63e39931 Add constructors to Rect 2018-11-13 12:15:55 -05:00
Scott Allen 0eae58c760 Fix initRandomSeed(). Minor code and doc changes
The call to generateRandomSeed() in initRandomSeed() was missing
parentheses.

Added keyword for generateRandomSeed.

Minor code changes, and documentation changes and additions.
2018-04-23 15:44:15 -04:00
Pharap 4c2e412985
Introduce generateRandomSeed function 2018-04-18 01:33:30 +01:00
Scott Allen b8c1cb742a Add EEPROM flag to disable RGB LED with boot logo
Flag SYS_FLAG_SHOW_LOGO_LEDS added to EEPROM_SYS_FLAGS.
The boot logo functions check the flag and leave the RGB LED off if
the flag isn't set.

Added functions writeShowBootLogoLEDsFlag() and
readShowBootLogoLEDsFlag() for writing and reading the
SYS_FLAG_SHOW_LOGO_LEDS flag.

Example sketch SetSystemEEPROM modified to allow setting the
SYS_FLAG_SHOW_LOGO_LEDS flag.
2018-04-07 07:09:49 -04:00
Scott Allen 674ac8a774 Don't disable timer 0 for Arduboy core 2018-03-22 08:11:24 -04:00
Scott Allen 9a13011474 Use display() in begin() instead of blank()
This saves some code since display() is used multiple times but
blank() normally isn't.
2018-03-22 08:11:24 -04:00
Scott Allen a43e745250 Add system EEPROM flag to disable the boot logo
Flag SYS_FLAG_SHOW_LOGO added to EEPROM_SYS_FLAGS. The boot logo
functions check the flag and bypass the logo sequence if the flag
isn't set.

Added functions writeShowBootLogoFlag() and readShowBootLogoFlag()
for writing and reading the SYS_FLAG_SHOW_LOGO flag.

Renamed example sketch SetNameAndID to SetSystemEEPROM and added
the ability to set the SYS_FLAG_SHOW_LOGO flag, plus menus to reset
the system and user EEPROM areas.
2018-03-22 08:11:24 -04:00
Delio Brignoli da2c7e3d35 Add SpritesB class as alternative to Sprites
The SpritesB class has functions identical to those in Sprites.
When used in place of Sprites it will usually reduce code size (at the
expense of slower execution speed). Code size reduction is accomplished
by factoring all draw modes into the same loop.

Modifications made to the Sprites class to create this class made by
@dxxb (Delio Brignoli).

Creation of the SpritesB class and documentation by
@MLXXXp (Scott Allen).

Also, bootLogoSpritesBSelfMasked() and bootLogoSpritesBOverwrite()
alternative boot logo functions added by @MLXXXp.
2018-03-22 08:11:24 -04:00
Scott Allen eb041d24f8 Add function to wait for all buttons released
New function waitNoButtons() replaces the code at the end of begin()
that waits for all buttons to be released. This is to make it easier
to add back this functionality when using boot() in place of begin().
2018-03-11 05:40:44 -04:00
Scott Allen 460e768ea9 Refactor nextFrame() and add setFrameDuration()
nextFrame() changes were in colaboration with @MrBlinky

setFrameDuration() can be used as an alternative to setFrameRate()
2018-03-11 05:40:44 -04:00
Scott Allen d356be4e13 Refactor and speed up bootLogo functions 2018-03-04 13:51:37 -05:00
Scott Allen d44b89e01f Minor source format changes for drawCompressed()
No code changes from previous commit.
2018-01-17 13:56:25 -05:00
Pharap 6f6849a5bb Reduce drawCompressed progmem usage (#19)
Reduce drawCompressed() progmem usage
2018-01-17 13:51:34 -05:00
Scott Allen fe30863dbe Add complimentary "get" for text "set" functions
Added functions getTextColor(), getTextBackground(),
getTextSize() and getTextWrap() to the Arduboy2 class
2017-07-31 16:57:28 -04:00
Scott Allen b121d19b77 Refactor fillScreen() 2017-06-16 18:37:19 -04:00
Scott Allen bd5b470294 Change drawPixel() to avoid Z reg corruption
Also use _BV() to specify bit masks in the bitshift_left array,
and other minor formatting changes
2017-06-16 18:05:19 -04:00
Pharap 427c1d53f2 Fix bug in drawPixel asm 2017-06-14 19:31:54 +01:00
Scott Allen 3c4915b0d5 Add commented out logo alternatives to begin() 2017-04-26 10:08:07 -04:00
Josh Goebel 520be03d59 any upper register is fine 2017-04-25 15:36:42 -04:00
Josh Goebel e235f26def remove unnecessary carry 2017-04-25 15:36:42 -04:00
Josh Goebel 50df1a221b make sure row_offset and y do not overlap 2017-04-25 15:36:42 -04:00
Josh Goebel 6f9056f99c add back original C implimentation 2017-04-25 15:36:42 -04:00
Josh Goebel 554c21f759 make sure we use upper registers 2017-04-25 15:36:42 -04:00
Josh Goebel e1cce03580 Optimize drawPixel for speed (-20 bytes)
- Inlined     : 332 -> 358 ops/ms
- Non-inlined : 222 -> 303 ops/ms

Moves most of the pixel offset calculation math into assembly.
Also uses a shift lookup table vs calculting bit shifts on the
CPU (which is slow)
2017-04-25 15:36:42 -04:00
Scott Allen ab1a7b3bdd Add delayShort() function
Same as Arduino delay() except takes a 16 bit value.
Mainly added to save some code in the library but can be used by
sketches for the same purpose.

Also changed a delay in bootLogoText() to match a previous change in
bootLogo()
2017-04-25 15:36:42 -04:00
Scott Allen 96b53875b5 Eliminate mismatched type warning in drawChar()
Also changed a loop index from int8_t to uint8_t to match other loops.
2017-04-25 15:36:42 -04:00
Josh Goebel ae8e284d41 optimize drawChar (-126 bytes) 2017-04-25 15:36:42 -04:00
Scott Allen 6e13fc019f Remove extra 50ms delay added by de1725
by Josh Goebel.
Merge conflict resolved.
2017-04-25 15:36:42 -04:00
Josh Goebel 1280160f89 optimize readUnitName (-6 bytes) 2017-04-25 15:36:42 -04:00
Josh Goebel 5877208a57 optimize writeUnitName (-130 bytes) 2017-04-25 15:36:42 -04:00
Josh Goebel 6050dda391 clean up frame management code (-6 bytes)
- saves 6 bytes compiling Mystic Balloon on Arduino 1.8.1
2017-04-25 15:36:42 -04:00
Scott Allen 449532f1e9 Add alternative boot logo functions
New functions bootLogoCompressed(), bootLogoSpritesSelfMasked() and
bootLogoSpritesOverwrite() can be used in place of bootLogo() to
reduce code size in cases where their drawing functions are shared
with the same functions used by the sketch.

New function bootLogoShell() added to provide common code for the
above functions.

Also, the Sprites class functions, and functions used for drawing the
logos, were made static.
2017-04-25 15:36:42 -04:00
Scott Allen 79f24c47cc Adjust location of some braces for consistency
This is just a source formatting change.
2017-04-25 15:36:42 -04:00
Scott Allen cfb5e89d5c Simplify initRandomSeed() to reduce code size
Use only an ADC reading from an unconnected pin shifted left 16 bits
then added to micros().
2017-04-25 15:36:42 -04:00
Scott Allen 3572a013e1 Make showing the unit name with the logo optional
- Added a flag in system EEPROM to indicate if the unit name
  should be displayed at the end of the boot logo sequence.
  Function bootLogoExtra() displays the unit name only if the
  flag is set.

- Added functions writeShowUnitNameFlag() and readShowUnitNameFlag()
  to write and read the "Show Unit Name" flag in EEPROM.

- Enhanced the SetNameAndID example sketch to allow setting the
  "Show Unit Name" flag in EEPROM.
2017-04-25 15:36:42 -04:00
Scott Allen 14d5877dae Add bootLogoText() function
Displays the boot logo using text instead of a bitmap,
as an option to reduce code size.
2017-04-25 15:36:42 -04:00
Scott Allen f294a045e0 Fix flashlight() and safeMode() for boot problem
- Timer 0 is disabled in flashlight() and safeMode() in case its
  variables overlap the bootloader "magic key" location.
- Flashlight mode never exits if invoked.
- Made safeMode() public for use as a smaller code size alternative
  to flashlight().
2017-04-25 15:36:42 -04:00
Scott Allen 1e7f251ce0 Direct control of ports and pins
This eliminates calls to pinMode(), digitalWrite(), functions to
initialize hardware, etc.

New 2 parameter version of digitalWriteRGB() added, which sets an
individual RGB LED on or off digitally.

New function SPItransfer() added to replace Arduino SPI.transfer().
2017-04-25 15:36:42 -04:00
Scott Allen 6c297fab1e Add nextFrameDEV() function for checking CPU load 2017-02-06 18:09:50 -05:00