Commit Graph

176 Commits

Author SHA1 Message Date
Scott Allen 7dc88bed30 Change version to 6.0.0
The major version number has been incremented only because there's a
chance that a sketch that sets text wrap on will behave differently,
due to the changes in the way wrapping is now handled.
2020-09-29 09:44:41 -04:00
Scott Allen 191e9a2e45 Document bitmap image height requirements
Added the requirement that bitmap heights must be a multiple of
8 pixels in the documentation for drawBitmap() and drawCompressed().
2020-09-29 09:44:41 -04:00
Scott Allen 98f03773b2 Make state variables used by pollButtons() public
The variables currentButtonState and previousButtonState used by
pollButtons(), justPressed() and justReleased() have been made public.
This allows them to be manipulated if circumstances require it.

The documentation added for previousButtonState includes an example.
2020-09-29 09:44:40 -04:00
Scott Allen 4698dd276e Make all possible functions and variables static
This is mainly to reduce code size.

The write() function in class Arduboy2 has to remain virtual,
so functions that result in it eventually being called could
not be made static.

The members of the Point and Rect structures could not be made static
due to their intended use as having multiple instances.

Also to reduce code size, bootLogoExtra() was made non-virtual.
This meant that the begin() and bootLogo...() functions in the
Arduboy2Base class had to have duplicate or equivalent functions
added to the Arduboy2 class.

Related documentation was updated and some minor changes were made to
non-related documentation.
2020-09-29 09:44:40 -04:00
Scott Allen e78e7c9d55 Add more Doxygen cross-referencing
Also:
- Rearrange the order of some member function declarations.
- Minor documentation changes.
2020-09-29 09:44:40 -04:00
Scott Allen 1264edc748 Refactor function BitStreamReader()
Changed from struct to class.

Removed explicit use of the "this" pointer for consistency with
the rest of the library.
2020-09-29 09:44:40 -04:00
Scott Allen aaf4159274 Remove PIXEL_SAFE_MODE define
The ability to compile drawPixel() to not check for
drawing pixels off screen has been removed.
2020-09-29 09:44:20 -04:00
Scott Allen 58a35e2ad9 Refactor text code and add char size functions
- Functions write() and drawChar() were refactored for smaller code
  size and to make text wrapping operate more like what would normally
  be expected.

- A new flag variable, textRaw, has been added, along with functions
  setTextRawMode() and getTextRawMode() to set and read it.
  When set, the write() function will render the value \n (0x0a) as
  an "inverse white circle" instead of handling it as a newline and
  render value \r (0x0d) as a "musical eighth note" instead of
  ignoring it.

- Spacing added at the end of each character is no longer factored in
  when determining if a character will fit on screen at the end of
  a line.

- Checking if line wrap is neccessary is done before drawing a
  character, instead of doing it after drawing to prepare for the
  next character. This fixed a problem with requested line feeds
  interacting with wrapping, resulting in unexpected blank lines.

- Fixed a bug that caused the drawing of characters with a transparent
  background to not work properly. (This is selected by setting the
  background color to be the same as the text color.)

- Added new functions getCharacterWidth() getCharacterHeight()
  getCharacterSpacing() getLineSpacing() to programmatically get
  the dimensions of a character, given the desired text size.

- Functions write() and drawChar() are now able to render a font of
  any character size, and with any character and line spacing, by
  setting variables characterWidth characterHeight characterSpacing
  and lineSpacing, and providing a matching font array. This doesn't
  affect their use with this library but has been done for the sake
  of code portability.
2020-09-28 21:11:13 -04:00
Andrew Dent bbebec346d Add array lengths to comments for boot logos 2020-08-23 15:23:01 -04:00
Scott Allen 7fcbd35266 Fix minor documentation issues 2020-08-23 15:21:28 -04:00
Scott Allen f1009abd7b Change version to 5.3.0 2020-07-25 18:38:05 -04:00
Scott Allen 13130f368a Move generateRandomSeed() to Arduboy2Core
Suggested by @yyyc514 (Josh Goebel)
The generateRandomSeed() function was moved from the Arduboy2Base class
to the Arduboy2Core class, since it deals directly with hardware.
It was also made static.

Some related documentation was changed.
2020-07-25 18:38:05 -04:00
Scott Allen 4530325412 Fix portability issues in the Sprites classes
Issues discovered and fixes developed by @Pharap

The Sprites classes relied on the behavior of 16 bit integer arithmetic
for operations that cause an overflow; specifically (ofs + WIDTH)
calculations for an index into the screen buffer. This would cause
problems if the code was ported to an environment in which the basic
integer type (i.e. "int") is larger than 16 bits.

Also, there was code that assumed little endianness for a technique
used to retrieve the high byte a 16 bit value. This would cause
problems if the code was ported to a big endian architecture.

The changes made are strictly for the sake of improved portability and
better programming practices. They don’t affect code compiled for the
Arduboy in any way.
2020-07-25 18:38:05 -04:00
Scott Allen d7758249fa Add function SPItransferAndRead()
Suggested by @MrBlinky
Same as SPItransfer() but also returns the byte received.
Provided for use with homemade or expanded units that have had
additional peripherals added to the SPI bus that are capable of
sending data.
2020-07-25 18:38:05 -04:00
Pharap 5563599c6d Make writeUnitName() const-correct
Changed the writeUnitName() parameter from
"char* name" to "const char* name".
This will prevent warnings or errors when a string literal or
an array of type "const char" is passed to it.
2020-07-25 18:38:05 -04:00
Scott Allen 30fb448db5 Make lcdBootProgram[] a member of Arduboy2Core
The lcdBootProgram[] array, containing the commands to initialize
the OLED display, isn't considered to be part of the API.
To enforce this, and to avoid the possibility of conflicts from
other code using the same name, it has been changed from being a
global variable to a protected member of the Arduboy2Core class.
2020-07-25 18:38:04 -04:00
Scott Allen a04edf24c1 Move mainNoUSB() to its own class
Suggested and developed by @Pharap

The mainNoUSB() function was never intended to be used directly in
sketches. To help prevent this, it has been made a private member of
a new class, Arduboy2NoUSB, which declares main() as a friend.

The ARDUBOY_NO_USB macro has been modified appropriately.

The Arduboy2Core class now inherits Arduboy2NoUSB, for sketches that
improperly have their own main() which calls the old version of
mainNoUSB() instead of using the ARDUBOY_NO_USB macro.
2020-07-25 18:38:04 -04:00
Scott Allen c74438e377 Rewrite Cabi README.md with more details
Also added file sample.png in the cabi directory, which is used
for the example sketch in the Cabi README.md file

Also added a note referring to Cabi in the documentation for
drawCompressed()
2020-07-25 18:37:44 -04:00
Scott Allen 355e2d2081 Update or remove outdated URLs 2020-07-24 17:15:37 -04:00
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 b854e2295f Make "static" the first keyword, for consistency
Suggested by @Pharap
2020-07-20 19:19:50 -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
Pharap 891f68a0be
Add additional information to drawExternalMask
This information is already contained in the main details block,
but providing it here as well should make it more obvious.
2019-07-13 10:33:29 +01:00
Pharap a31e5091d6
Make width and height constexpr
This allows these functions to be used as constant expressions.
2019-05-31 06:38:43 +01:00
Scott Allen 096aaac8dd Change version to 5.2.1 2019-02-27 17:33:10 -05:00
Pharap b40e3b9c57 Fix missing Print::write overloads
Problem:
The overloading of `Print::write` was previously causing the other
overloads of `write` to be hidden.
For more information on this behaviour, see the following
StackOverflow question:
https://stackoverflow.com/questions/1628768

Solution:
The solution uses a `using`-declaration to bring the `Print::write`
overloads into `Arduboy2`'s scope.
For more information on this usage of a `using`-declaration, see the
following cppreference page:
https://en.cppreference.com/w/cpp/language/using_declaration#In_class_definition
2019-02-27 15:38:57 -05: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 974f5298ee Change version to 5.2.0 2018-11-15 19:27:26 -05:00
Scott Allen c87f512b53 Document Rect and Point constructor parameters 2018-11-15 19:27:26 -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 1d49ce5df8 Move avr/wdt.h include to cpp file 2018-11-13 12:20:14 -05:00
Pharap d5b4a45706 Make both collide functions static 2018-11-13 12:20:14 -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
Pharap 54d47ec04e
Remove unncessary limits.h includes 2018-09-03 07:37:16 +01: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 58ae256412 Change version to 5.1.0 2018-04-07 07:33:28 -04:00
Scott Allen 928c40813d Make sure TX and RX LEDs are off in mainNoUSB() 2018-04-07 07:28:15 -04: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 15db34cab2 Change version to 5.0.0 2018-03-22 08:11:24 -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