Initializes the listener that keeps track of if the PIR sensor detects motion or not. It is automatically called when the PIRSensorHelper is instantiated.
Initializes the listener that keeps track of if the touch switch has been touched or not. It is automatically called when the TouchSwitchHelper is instantiated.
The ActiveBuzzerHelper class contains methods that pertain to the control of the active buzzer.
+
+ IMPORTANT NOTE: WIRING MUST BE DIRECT. USAGE OF TRANSISTOR ALTERS THE FUNCTIONALITIES OF THE HELPER.
+Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces
+
+
Search
+
You can search for definitions of modules, packages, types, fields, methods, system properties and other terms defined in the API. These items can be searched using part or all of the name, optionally using "camelCase" abbreviations, or multiple search terms separated by whitespace. Some examples:
+The following sections describe the different kinds of pages in this collection.
+
+
Overview
+
The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
+
+
+
Package
+
Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:
+
+
Interfaces
+
Classes
+
Enum Classes
+
Exception Classes
+
Annotation Interfaces
+
+
+
+
Class or Interface
+
Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.
+
+
Class Inheritance Diagram
+
Direct Subclasses
+
All Known Subinterfaces
+
All Known Implementing Classes
+
Class or Interface Declaration
+
Class or Interface Description
+
+
+
+
Nested Class Summary
+
Enum Constant Summary
+
Field Summary
+
Property Summary
+
Constructor Summary
+
Method Summary
+
Required Element Summary
+
Optional Element Summary
+
+
+
+
Enum Constant Details
+
Field Details
+
Property Details
+
Constructor Details
+
Method Details
+
Element Details
+
+
Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.
+
The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+
+
+
Other Files
+
Packages and modules may contain pages with additional information related to the declarations nearby.
+
+
+
Tree (Class Hierarchy)
+
There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.
+
+
When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
+
When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
+
+
+
+
All Packages
+
The All Packages page contains an alphabetic index of all packages contained in the documentation.
+
+
+
All Classes and Interfaces
+
The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.
+
+
+
Index
+
The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.
+
+
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+
diff --git a/pi4micronaut-utils/src/docs/javadoc/legal/COPYRIGHT b/pi4micronaut-utils/src/docs/javadoc/legal/COPYRIGHT
new file mode 100644
index 00000000..ca74fffd
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/legal/COPYRIGHT
@@ -0,0 +1 @@
+Please see ..\java.base\COPYRIGHT
diff --git a/pi4micronaut-utils/src/docs/javadoc/legal/LICENSE b/pi4micronaut-utils/src/docs/javadoc/legal/LICENSE
new file mode 100644
index 00000000..4ad9fe40
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/legal/LICENSE
@@ -0,0 +1 @@
+Please see ..\java.base\LICENSE
diff --git a/pi4micronaut-utils/src/docs/javadoc/legal/jquery.md b/pi4micronaut-utils/src/docs/javadoc/legal/jquery.md
new file mode 100644
index 00000000..d468b318
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/legal/jquery.md
@@ -0,0 +1,72 @@
+## jQuery v3.6.1
+
+### jQuery License
+```
+jQuery v 3.6.1
+Copyright OpenJS Foundation and other contributors, https://openjsf.org/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************
+
+The jQuery JavaScript Library v3.6.1 also includes Sizzle.js
+
+Sizzle.js includes the following license:
+
+Copyright JS Foundation and other contributors, https://js.foundation/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/sizzle
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
+
+*********************
+
+```
diff --git a/pi4micronaut-utils/src/docs/javadoc/legal/jqueryUI.md b/pi4micronaut-utils/src/docs/javadoc/legal/jqueryUI.md
new file mode 100644
index 00000000..8bda9d7a
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/legal/jqueryUI.md
@@ -0,0 +1,49 @@
+## jQuery UI v1.13.2
+
+### jQuery UI License
+```
+Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery-ui
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code contained within the demos directory.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
+
+```
diff --git a/pi4micronaut-utils/src/docs/javadoc/link.svg b/pi4micronaut-utils/src/docs/javadoc/link.svg
new file mode 100644
index 00000000..dadef51c
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/link.svg
@@ -0,0 +1,31 @@
+
+
+
+
+
diff --git a/pi4micronaut-utils/src/docs/javadoc/member-search-index.js b/pi4micronaut-utils/src/docs/javadoc/member-search-index.js
new file mode 100644
index 00000000..e278f622
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/member-search-index.js
@@ -0,0 +1 @@
+memberSearchIndex = [{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"actBuzzCheck"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"ActiveBuzzerHelper(Pwm)","u":"%3Cinit%3E(com.pi4j.io.pwm.Pwm)"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"activeBuzzerOff()"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"activeBuzzerOn()"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"addEventListener(DigitalStateChangeListener)","u":"addEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"PIRSensorHelper","l":"addEventListener(DigitalStateChangeListener)","u":"addEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"PushButtonHelper","l":"addEventListener(DigitalStateChangeListener)","u":"addEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"SlideSwitchHelper","l":"addEventListener(DigitalStateChangeListener)","u":"addEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"TouchSwitchHelper","l":"addEventListener(DigitalStateChangeListener)","u":"addEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu","c":"Application","l":"Application()","u":"%3Cinit%3E()"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"beep()"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"clearDisplay()"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"clearLine(int)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createDigitalInput(DigitalInputConfiguration, Context)","u":"createDigitalInput(com.opensourcewithslu.utilities.DigitalInputConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createDigitalOutput(DigitalOutputConfiguration, Context)","u":"createDigitalOutput(com.opensourcewithslu.utilities.DigitalOutputConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createI2C(i2cConfiguration, Context)","u":"createI2C(com.opensourcewithslu.utilities.i2cConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createPi4jContext()"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createPwm(PwmConfiguration, Context)","u":"createPwm(com.opensourcewithslu.utilities.PwmConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"createSpi(SpiConfiguration, Context)","u":"createSpi(com.opensourcewithslu.utilities.SpiConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"DigitalInputConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"DigitalInputMultiPinConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"DigitalOutputConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getAddress()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getAddress()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getAddress()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getAddresses()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getAddresses()"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"getBaud()"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"getBus()"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"getChannel()"},{"p":"com.opensourcewithslu.utilities","c":"MultipinConfiguration","l":"getComponents()"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"getDark()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getDebounce()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getDebounces()"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"getDevice()"},{"p":"com.opensourcewithslu.inputdevices","c":"RotaryEncoderHelper","l":"getEncoderValue()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"MultipinConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"getId()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getInital()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getInitals()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getInitial()"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"getMode()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"getName()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getProvider()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getProvider()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getProvider()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getProvider()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getProvider()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"getPull()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"getPulls()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getPwmType()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getPwmTypes()"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"getShutdown()"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"getShutdown()"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"getShutdowns()"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"i2cConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"initialize()"},{"p":"com.opensourcewithslu.inputdevices","c":"PIRSensorHelper","l":"initialize()"},{"p":"com.opensourcewithslu.inputdevices","c":"PushButtonHelper","l":"initialize()"},{"p":"com.opensourcewithslu.inputdevices","c":"RotaryEncoderHelper","l":"initialize()"},{"p":"com.opensourcewithslu.inputdevices","c":"SlideSwitchHelper","l":"initialize()"},{"p":"com.opensourcewithslu.inputdevices","c":"TouchSwitchHelper","l":"initialize()"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"intermittentTone()"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"isDark"},{"p":"com.opensourcewithslu.inputdevices","c":"PIRSensorHelper","l":"isMoving"},{"p":"com.opensourcewithslu.inputdevices","c":"SlideSwitchHelper","l":"isOn"},{"p":"com.opensourcewithslu.inputdevices","c":"PushButtonHelper","l":"isPressed"},{"p":"com.opensourcewithslu.inputdevices","c":"TouchSwitchHelper","l":"isTouched"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"LCD1602Helper(I2CConfig, Context)","u":"%3Cinit%3E(com.pi4j.io.i2c.I2CConfig,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.outputdevices","c":"LEDHelper","l":"LEDHelper(DigitalOutput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalOutput)"},{"p":"com.opensourcewithslu.outputdevices","c":"LEDHelper","l":"ledOff()"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"ledOff()"},{"p":"com.opensourcewithslu.outputdevices","c":"LEDHelper","l":"ledOn()"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"ledOn()"},{"p":"com.opensourcewithslu","c":"Application","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"com.opensourcewithslu.outputdevices","c":"ActiveBuzzerHelper","l":"morseCodeTone()"},{"p":"com.opensourcewithslu.utilities","c":"MultipinConfiguration","l":"MultipinConfiguration(String, Object[])","u":"%3Cinit%3E(java.lang.String,java.lang.Object[])"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JMultipinFactory","l":"multiPinInput(DigitalInputMultiPinConfiguration, Context)","u":"multiPinInput(com.opensourcewithslu.utilities.MultiPinConfigs.DigitalInputMultiPinConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JMultipinFactory","l":"multiPinPwm(PwmMultiPinConfiguration, Context)","u":"multiPinPwm(com.opensourcewithslu.utilities.MultiPinConfigs.PwmMultiPinConfiguration,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"PhotoResistorHelper(DigitalInput, DigitalOutput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalInput,com.pi4j.io.gpio.digital.DigitalOutput)"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JFactory","l":"Pi4JFactory()","u":"%3Cinit%3E()"},{"p":"com.opensourcewithslu.utilities","c":"Pi4JMultipinFactory","l":"Pi4JMultipinFactory()","u":"%3Cinit%3E()"},{"p":"com.opensourcewithslu.inputdevices","c":"PIRSensorHelper","l":"PIRSensorHelper(DigitalInput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalInput)"},{"p":"com.opensourcewithslu.inputdevices","c":"PushButtonHelper","l":"PushButtonHelper(DigitalInput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalInput)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"PwmConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"PwmMultiPinConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.inputdevices","c":"RFidHelper","l":"readFromCard()"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"removeEventListener()"},{"p":"com.opensourcewithslu.inputdevices","c":"PIRSensorHelper","l":"removeEventListener()"},{"p":"com.opensourcewithslu.inputdevices","c":"TouchSwitchHelper","l":"removeEventListener()"},{"p":"com.opensourcewithslu.inputdevices","c":"PushButtonHelper","l":"removeEventListener(DigitalStateChangeListener)","u":"removeEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"SlideSwitchHelper","l":"removeEventListener(DigitalStateChangeListener)","u":"removeEventListener(com.pi4j.io.gpio.digital.DigitalStateChangeListener)"},{"p":"com.opensourcewithslu.inputdevices","c":"RFidHelper","l":"resetScanner()"},{"p":"com.opensourcewithslu.inputdevices","c":"RFidHelper","l":"RFidHelper(SpiConfig, Context)","u":"%3Cinit%3E(com.pi4j.io.spi.SpiConfig,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.inputdevices","c":"RFidHelper","l":"RFidHelper(SpiConfig, int, Context)","u":"%3Cinit%3E(com.pi4j.io.spi.SpiConfig,int,com.pi4j.context.Context)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"RGBLEDHelper(MultipinConfiguration)","u":"%3Cinit%3E(com.opensourcewithslu.utilities.MultipinConfiguration)"},{"p":"com.opensourcewithslu.inputdevices","c":"RotaryEncoderHelper","l":"RotaryEncoderHelper(MultipinConfiguration)","u":"%3Cinit%3E(com.opensourcewithslu.utilities.MultipinConfiguration)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"setAddress(int)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"setAddress(int)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setAddress(int)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"setAddresses(String)","u":"setAddresses(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setAddresses(String)","u":"setAddresses(java.lang.String)"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"setBackLight(boolean)"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"setBaud(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setBlue(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setBlue(int, int)","u":"setBlue(int,int)"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"setBus(int)"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"setChannel(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setColor(int[])"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setColor(int[], int[])","u":"setColor(int[],int[])"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setColorHex(String)","u":"setColorHex(java.lang.String)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setColorHex(String, int[])","u":"setColorHex(java.lang.String,int[])"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"setDarknessThreshold(int)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"setDebounce(Long)","u":"setDebounce(java.lang.Long)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"setDebounces(String)","u":"setDebounces(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"setDevice(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setGreen(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setGreen(int, int)","u":"setGreen(int,int)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setInital(int)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"setInitial(DigitalState)","u":"setInitial(com.pi4j.io.gpio.digital.DigitalState)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setInitials(String)","u":"setInitials(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"setMode(SpiMode)","u":"setMode(com.pi4j.io.spi.SpiMode)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"i2cConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"setName(String)","u":"setName(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"setProvider(String)","u":"setProvider(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"setProvider(String)","u":"setProvider(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"setProvider(String)","u":"setProvider(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setProvider(String)","u":"setProvider(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setProvider(String)","u":"setProvider(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalInputConfiguration","l":"setPull(PullResistance)","u":"setPull(com.pi4j.io.gpio.digital.PullResistance)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"DigitalInputMultiPinConfiguration","l":"setPulls(String)","u":"setPulls(java.lang.String)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setPwmType(String)","u":"setPwmType(java.lang.String)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setPwmTypes(String)","u":"setPwmTypes(java.lang.String)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setRed(int)"},{"p":"com.opensourcewithslu.outputdevices","c":"RGBLEDHelper","l":"setRed(int, int)","u":"setRed(int,int)"},{"p":"com.opensourcewithslu.utilities","c":"DigitalOutputConfiguration","l":"setShutdown(DigitalState)","u":"setShutdown(com.pi4j.io.gpio.digital.DigitalState)"},{"p":"com.opensourcewithslu.utilities","c":"PwmConfiguration","l":"setShutdown(int)"},{"p":"com.opensourcewithslu.utilities.MultiPinConfigs","c":"PwmMultiPinConfiguration","l":"setShutdowns(String)","u":"setShutdowns(java.lang.String)"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"setToLow()"},{"p":"com.opensourcewithslu.inputdevices","c":"SlideSwitchHelper","l":"SlideSwitchHelper(DigitalInput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalInput)"},{"p":"com.opensourcewithslu.utilities","c":"SpiConfiguration","l":"SpiConfiguration(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.opensourcewithslu.outputdevices","c":"LEDHelper","l":"switchState()"},{"p":"com.opensourcewithslu.inputdevices","c":"TouchSwitchHelper","l":"TouchSwitchHelper(DigitalInput)","u":"%3Cinit%3E(com.pi4j.io.gpio.digital.DigitalInput)"},{"p":"com.opensourcewithslu.inputdevices","c":"PhotoResistorHelper","l":"updateDark()"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"writeText(String)","u":"writeText(java.lang.String)"},{"p":"com.opensourcewithslu.outputdevices","c":"LCD1602Helper","l":"writeTextAtLine(String, int)","u":"writeTextAtLine(java.lang.String,int)"},{"p":"com.opensourcewithslu.inputdevices","c":"RFidHelper","l":"writeToCard(Object)","u":"writeToCard(java.lang.Object)"}];updateSearchResults();
\ No newline at end of file
diff --git a/pi4micronaut-utils/src/docs/javadoc/module-search-index.js b/pi4micronaut-utils/src/docs/javadoc/module-search-index.js
new file mode 100644
index 00000000..0d59754f
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/module-search-index.js
@@ -0,0 +1 @@
+moduleSearchIndex = [];updateSearchResults();
\ No newline at end of file
diff --git a/pi4micronaut-utils/src/docs/javadoc/overview-summary.html b/pi4micronaut-utils/src/docs/javadoc/overview-summary.html
new file mode 100644
index 00000000..abdf857b
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/overview-summary.html
@@ -0,0 +1,25 @@
+
+
+
+
+pi4micronaut-utils v1.0 API
+
+
+
+
+
+
+
+
+
+
+
+
+
The help page provides an introduction to the scope and syntax of JavaDoc search.
+
You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.
+
The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.
+link
+
+
+
+
+
Loading search index...
+
+
+
+
+
+
+
+
+
diff --git a/pi4micronaut-utils/src/docs/javadoc/search.js b/pi4micronaut-utils/src/docs/javadoc/search.js
new file mode 100644
index 00000000..4ca95577
--- /dev/null
+++ b/pi4micronaut-utils/src/docs/javadoc/search.js
@@ -0,0 +1,458 @@
+/*
+ * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
+"use strict";
+const messages = {
+ enterTerm: "Enter a search term",
+ noResult: "No results found",
+ oneResult: "Found one result",
+ manyResults: "Found {0} results",
+ loading: "Loading search index...",
+ searching: "Searching...",
+ redirecting: "Redirecting to first result...",
+ linkIcon: "Link icon",
+ linkToSection: "Link to this section"
+}
+const categories = {
+ modules: "Modules",
+ packages: "Packages",
+ types: "Classes and Interfaces",
+ members: "Members",
+ searchTags: "Search Tags"
+};
+const highlight = "$&";
+const NO_MATCH = {};
+const MAX_RESULTS = 300;
+function checkUnnamed(name, separator) {
+ return name === "" || !name ? "" : name + separator;
+}
+function escapeHtml(str) {
+ return str.replace(//g, ">");
+}
+function getHighlightedText(str, boundaries, from, to) {
+ var start = from;
+ var text = "";
+ for (var i = 0; i < boundaries.length; i += 2) {
+ var b0 = boundaries[i];
+ var b1 = boundaries[i + 1];
+ if (b0 >= to || b1 <= from) {
+ continue;
+ }
+ text += escapeHtml(str.slice(start, Math.max(start, b0)));
+ text += "";
+ text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1)));
+ text += "";
+ start = Math.min(to, b1);
+ }
+ text += escapeHtml(str.slice(start, to));
+ return text;
+}
+function getURLPrefix(item, category) {
+ var urlPrefix = "";
+ var slash = "/";
+ if (category === "modules") {
+ return item.l + slash;
+ } else if (category === "packages" && item.m) {
+ return item.m + slash;
+ } else if (category === "types" || category === "members") {
+ if (item.m) {
+ urlPrefix = item.m + slash;
+ } else {
+ $.each(packageSearchIndex, function(index, it) {
+ if (it.m && item.p === it.l) {
+ urlPrefix = it.m + slash;
+ }
+ });
+ }
+ }
+ return urlPrefix;
+}
+function getURL(item, category) {
+ if (item.url) {
+ return item.url;
+ }
+ var url = getURLPrefix(item, category);
+ if (category === "modules") {
+ url += "module-summary.html";
+ } else if (category === "packages") {
+ if (item.u) {
+ url = item.u;
+ } else {
+ url += item.l.replace(/\./g, '/') + "/package-summary.html";
+ }
+ } else if (category === "types") {
+ if (item.u) {
+ url = item.u;
+ } else {
+ url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html";
+ }
+ } else if (category === "members") {
+ url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#";
+ if (item.u) {
+ url += item.u;
+ } else {
+ url += item.l;
+ }
+ } else if (category === "searchTags") {
+ url += item.u;
+ }
+ item.url = url;
+ return url;
+}
+function createMatcher(term, camelCase) {
+ if (camelCase && !isUpperCase(term)) {
+ return null; // no need for camel-case matcher for lower case query
+ }
+ var pattern = "";
+ var upperCase = [];
+ term.trim().split(/\s+/).forEach(function(w, index, array) {
+ var tokens = w.split(/(?=[A-Z,.()<>?[\/])/);
+ for (var i = 0; i < tokens.length; i++) {
+ var s = tokens[i];
+ // ',' and '?' are the only delimiters commonly followed by space in java signatures
+ pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")";
+ upperCase.push(false);
+ var isWordToken = /\w$/.test(s);
+ if (isWordToken) {
+ if (i === tokens.length - 1 && index < array.length - 1) {
+ // space in query string matches all delimiters
+ pattern += "(.*?)";
+ upperCase.push(isUpperCase(s[0]));
+ } else {
+ if (!camelCase && isUpperCase(s) && s.length === 1) {
+ pattern += "()";
+ } else {
+ pattern += "([a-z0-9$<>?[\\]]*?)";
+ }
+ upperCase.push(isUpperCase(s[0]));
+ }
+ } else {
+ pattern += "()";
+ upperCase.push(false);
+ }
+ }
+ });
+ var re = new RegExp(pattern, "gi");
+ re.upperCase = upperCase;
+ return re;
+}
+function findMatch(matcher, input, startOfName, endOfName) {
+ var from = startOfName;
+ matcher.lastIndex = from;
+ var match = matcher.exec(input);
+ // Expand search area until we get a valid result or reach the beginning of the string
+ while (!match || match.index + match[0].length < startOfName || endOfName < match.index) {
+ if (from === 0) {
+ return NO_MATCH;
+ }
+ from = input.lastIndexOf(".", from - 2) + 1;
+ matcher.lastIndex = from;
+ match = matcher.exec(input);
+ }
+ var boundaries = [];
+ var matchEnd = match.index + match[0].length;
+ var score = 5;
+ var start = match.index;
+ var prevEnd = -1;
+ for (var i = 1; i < match.length; i += 2) {
+ var isUpper = isUpperCase(input[start]);
+ var isMatcherUpper = matcher.upperCase[i];
+ // capturing groups come in pairs, match and non-match
+ boundaries.push(start, start + match[i].length);
+ // make sure groups are anchored on a left word boundary
+ var prevChar = input[start - 1] || "";
+ var nextChar = input[start + 1] || "";
+ if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) {
+ if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) {
+ score -= 0.1;
+ } else if (isMatcherUpper && start === prevEnd) {
+ score -= isUpper ? 0.1 : 1.0;
+ } else {
+ return NO_MATCH;
+ }
+ }
+ prevEnd = start + match[i].length;
+ start += match[i].length + match[i + 1].length;
+
+ // lower score for parts of the name that are missing
+ if (match[i + 1] && prevEnd < endOfName) {
+ score -= rateNoise(match[i + 1]);
+ }
+ }
+ // lower score if a type name contains unmatched camel-case parts
+ if (input[matchEnd - 1] !== "." && endOfName > matchEnd)
+ score -= rateNoise(input.slice(matchEnd, endOfName));
+ score -= rateNoise(input.slice(0, Math.max(startOfName, match.index)));
+
+ if (score <= 0) {
+ return NO_MATCH;
+ }
+ return {
+ input: input,
+ score: score,
+ boundaries: boundaries
+ };
+}
+function isUpperCase(s) {
+ return s !== s.toLowerCase();
+}
+function isLowerCase(s) {
+ return s !== s.toUpperCase();
+}
+function rateNoise(str) {
+ return (str.match(/([.(])/g) || []).length / 5
+ + (str.match(/([A-Z]+)/g) || []).length / 10
+ + str.length / 20;
+}
+function doSearch(request, response) {
+ var term = request.term.trim();
+ var maxResults = request.maxResults || MAX_RESULTS;
+ if (term.length === 0) {
+ return this.close();
+ }
+ var matcher = {
+ plainMatcher: createMatcher(term, false),
+ camelCaseMatcher: createMatcher(term, true)
+ }
+ var indexLoaded = indexFilesLoaded();
+
+ function getPrefix(item, category) {
+ switch (category) {
+ case "packages":
+ return checkUnnamed(item.m, "/");
+ case "types":
+ return checkUnnamed(item.p, ".");
+ case "members":
+ return checkUnnamed(item.p, ".") + item.c + ".";
+ default:
+ return "";
+ }
+ }
+ function useQualifiedName(category) {
+ switch (category) {
+ case "packages":
+ return /[\s/]/.test(term);
+ case "types":
+ case "members":
+ return /[\s.]/.test(term);
+ default:
+ return false;
+ }
+ }
+ function searchIndex(indexArray, category) {
+ var matches = [];
+ if (!indexArray) {
+ if (!indexLoaded) {
+ matches.push({ l: messages.loading, category: category });
+ }
+ return matches;
+ }
+ $.each(indexArray, function (i, item) {
+ var prefix = getPrefix(item, category);
+ var simpleName = item.l;
+ var qualifiedName = prefix + simpleName;
+ var useQualified = useQualifiedName(category);
+ var input = useQualified ? qualifiedName : simpleName;
+ var startOfName = useQualified ? prefix.length : 0;
+ var endOfName = category === "members" && input.indexOf("(", startOfName) > -1
+ ? input.indexOf("(", startOfName) : input.length;
+ var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName);
+ if (m === NO_MATCH && matcher.camelCaseMatcher) {
+ m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName);
+ }
+ if (m !== NO_MATCH) {
+ m.indexItem = item;
+ m.prefix = prefix;
+ m.category = category;
+ if (!useQualified) {
+ m.input = qualifiedName;
+ m.boundaries = m.boundaries.map(function(b) {
+ return b + prefix.length;
+ });
+ }
+ matches.push(m);
+ }
+ return true;
+ });
+ return matches.sort(function(e1, e2) {
+ return e2.score - e1.score;
+ }).slice(0, maxResults);
+ }
+
+ var result = searchIndex(moduleSearchIndex, "modules")
+ .concat(searchIndex(packageSearchIndex, "packages"))
+ .concat(searchIndex(typeSearchIndex, "types"))
+ .concat(searchIndex(memberSearchIndex, "members"))
+ .concat(searchIndex(tagSearchIndex, "searchTags"));
+
+ if (!indexLoaded) {
+ updateSearchResults = function() {
+ doSearch(request, response);
+ }
+ } else {
+ updateSearchResults = function() {};
+ }
+ response(result);
+}
+// JQuery search menu implementation
+$.widget("custom.catcomplete", $.ui.autocomplete, {
+ _create: function() {
+ this._super();
+ this.widget().menu("option", "items", "> .result-item");
+ // workaround for search result scrolling
+ this.menu._scrollIntoView = function _scrollIntoView( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height() - 26;
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ };
+ },
+ _renderMenu: function(ul, items) {
+ var currentCategory = "";
+ var widget = this;
+ widget.menu.bindings = $();
+ $.each(items, function(index, item) {
+ if (item.category && item.category !== currentCategory) {
+ ul.append("